azure-storage-file-datalake-py
microsoft/skills
Verwalten Sie Azure Data Lake Storage Gen2 mit dem Python SDK für hierarchische Dateisysteme, Big-Data-Analysen und Datei-/Verzeichnisoperationen.
...Alle erweiternAzure Data Lake Storage Gen2 SDK für Python
Hierarchisches Dateisystem für Big-Data-Analysearbeitslasten.
Installation
pip install azure-storage-file-datalake azure-identity
Umgebungsvariablen
AZURE_STORAGE_ACCOUNT_URL=https://<account>.dfs.core.windows.net # Erforderlich für alle Authentifizierungsmethoden
AZURE_TOKEN_CREDENTIALS=prod # Nur erforderlich, wenn DefaultAzureCredential in der Produktion verwendet wird
</account>Authentifizierung & Lebenszyklus
🔑 Auf jedes der folgenden Codebeispiele gelten zwei Regeln:
- Bevorzugen Sie
DefaultAzureCredential. Es funktioniert lokal (Azure CLI / VS Code / Developer CLI) und in Azure (verwaltete Identität, Workload-Identität) ohne Codeänderung. Vermeiden Sie Verbindungszeichenfolgen und Konten-/API-Schlüssel, da diese die Entra-Überwachung und Rotation umgehen.
- Lokale Entwicklung:
DefaultAzureCredentialfunktioniert wie angegeben.- Produktion: Legen Sie
AZURE_TOKEN_CREDENTIALS=prod(oderAZURE_TOKEN_CREDENTIALS=<specific_credential></specific_credential>) fest, um die Anmeldeketten auf produktionssichere Anmeldeinformationen zu beschränken.- Verpacken Sie jeden Client in einen Kontextmanager, um HTTP-Transportschichten, Sockets und Token-Caches deterministisch freizugeben:
- Synchron:
with <client>(...) as client:</client>- Asynchron:
async with <client>(...) as client:</client>undasync with DefaultAzureCredential() as credential:(ausazure.identity.aio)Codeausschnitte können diese Einrichtung abkürzen, aber Produktionscode sollte stets beide Regeln befolgen.
from azure.identity import DefaultAzureCredential, ManagedIdentityCredential
from azure.storage.filedatalake import DataLakeServiceClient
# Lokale Entwicklung: DefaultAzureCredential. Produktion: AZURE_TOKEN_CREDENTIALS=prod oder AZURE_TOKEN_CREDENTIALS=<specific_credential> festlegen
credential = DefaultAzureCredential(require_envvar=True)
# Oder verwenden Sie in der Produktion direkt eine spezifische Anmeldeinformation:
# Siehe https://learn.microsoft.com/python/api/overview/azure/identity-readme?view=azure-python#credential-classes
# credential = ManagedIdentityCredential()
account_url = "https://<account>.dfs.core.windows.net"
with DataLakeServiceClient(account_url=account_url, credential=credential) as service_client:
# Verwenden Sie service_client hier (siehe folgende Abschnitte für Operationen)
...
</account></specific_credential>Client-Hierarchie
| Client | Zweck |
|---|---|
| `DataLakeServiceClient` | Vorgänge auf Kontoebene |
| `FileSystemClient` | Vorgänge im Container (Dateisystem) |
| `DataLakeDirectoryClient` | Verzeichnisoperationen |
| `DataLakeFileClient` | Dateioperationen |
Dateisystemoperationen
# Dateisystem (Container) erstellen
file_system_client = service_client.create_file_system("myfilesystem")
# Bestehendes abrufen
file_system_client = service_client.get_file_system_client("myfilesystem")
# Löschen
service_client.delete_file_system("myfilesystem")
# Dateisysteme auflisten
for fs in service_client.list_file_systems():
print(fs.name)
Verzeichnisoperationen
file_system_client = service_client.get_file_system_client("myfilesystem")
# Verzeichnis erstellen
directory_client = file_system_client.create_directory("mydir")
# Verschachtelte Verzeichnisse erstellen
directory_client = file_system_client.create_directory("path/to/nested/dir")
# Verzeichnisclient abrufen
directory_client = file_system_client.get_directory_client("mydir")
# Verzeichnis löschen
directory_client.delete_directory()
# Verzeichnis umbenennen/verschieben
directory_client.rename_directory(new_name="myfilesystem/newname")
Dateioperationen
Datei hochladen
# Datei-Client abrufen
file_client = file_system_client.get_file_client("path/to/file.txt")
# Von lokaler Datei hochladen
with open("local-file.txt", "rb") as data:
file_client.upload_data(data, overwrite=True)
# Bytes hochladen
file_client.upload_data(b"Hello, Data Lake!", overwrite=True)
# Daten anhängen (für große Dateien)
file_client.append_data(data=b"chunk1", offset=0, length=6)
file_client.append_data(data=b"chunk2", offset=6, length=6)
file_client.flush_data(12) # Daten festlegen
Datei herunterladen
file_client = file_system_client.get_file_client("path/to/file.txt")
# gesamten Inhalt herunterladen
download = file_client.download_file()
content = download.readall()
# In Datei herunterladen
with open("downloaded.txt", "wb") as f:
download = file_client.download_file()
download.readinto(f)
# Bereich herunterladen
download = file_client.download_file(offset=0, length=100)
Datei löschen
file_client.delete_file()
Inhalte auflisten
# Pfade auflisten (Dateien und Verzeichnisse)
for path in file_system_client.get_paths():
print(f"{'DIR' if path.is_directory else 'FILE'}: {path.name}")
# Pfade im Verzeichnis auflisten
for path in file_system_client.get_paths(path="mydir"):
print(path.name)
# Rekursive Auflistung
for path in file_system_client.get_paths(path="mydir", recursive=True):
print(path.name)
Datei-/Verzeichniseigenschaften
# Eigenschaften abrufen
properties = file_client.get_file_properties()
print(f"Größe: {properties.size}")
print(f"Zuletzt geändert: {properties.last_modified}")
# Metadaten festlegen
file_client.set_metadata(metadata={"processed": "true"})
Zugriffssteuerung (ACL)
# ACL abrufen
acl = directory_client.get_access_control()
print(f"Eigentümer: {acl['owner']}")
print(f"Berechtigungen: {acl['permissions']}")
# ACL festlegen
directory_client.set_access_control(
owner="user-id",
permissions="rwxr-x---"
)
# ACL-Einträge aktualisieren
from azure.storage.filedatalake import AccessControlChangeResult
directory_client.update_access_control_recursive(
acl="user:user-id:rwx"
)
Asynchroner Client
from azure.storage.filedatalake.aio import DataLakeServiceClient
from azure.identity.aio import DefaultAzureCredential
async def datalake_operations():
async with DefaultAzureCredential() as credential:
async with DataLakeServiceClient(
account_url="https://<account>.dfs.core.windows.net",
credential=credential
) as service_client:
file_system_client = service_client.get_file_system_client("myfilesystem")
file_client = file_system_client.get_file_client("test.txt")
await file_client.upload_data(b"async content", overwrite=True)
download = await file_client.download_file()
content = await download.readall()
import asyncio
asyncio.run(datalake_operations())
</account>Best Practices
- Entscheiden Sie sich für synchron ODER asynchron und bleiben Sie konsistent. Mischen Sie keine synchronen Clients von
azure.storage.filedatalakemit asynchronen Clients vonazure.storage.filedatalake.aioim selben Aufrufpfad. Wählen Sie einen Modus pro Modul. - Verwenden Sie stets Kontextmanager für Clients und asynchrone Anmeldeinformationen. Verpacken Sie jeden Client in
with DataLakeServiceClient(...) as client:(synchron) oderasync with DataLakeServiceClient(...) as client:(asynchron). Für asynchroneDefaultAzureCredentialausazure.identity.aioverwenden Sie ebenfallsasync with credential:, um Token und Transportschichten ordnungsgemäß aufzuräumen. - Verwenden Sie
DefaultAzureCredentialfür portierbare Authentifizierung über lokale Entwicklung und Azure hinweg (vermeiden Sie nach Möglichkeit Verbindungszeichenfolgen/API-Schlüssel). - Verwenden Sie den hierarchischen Namespace für Dateisystemsemantik.
- Verwenden Sie
append_data+flush_datafür das Hochladen großer Dateien. - Legen Sie ACLs auf Verzeichnisebene fest und erben Sie diese an untergeordnete Elemente.
- Verwenden Sie den asynchronen Client für Szenarien mit hohem Durchsatz.
- Verwenden Sie
get_pathsmitrecursive=Truefür vollständige Verzeichnisauflistungen. - Legen Sie Metadaten fest für benutzerdefinierte Dateiattribute.
- Erwägen Sie die Blob-API für einfache Objektspeicherszenarien.
---
name: azure-storage-file-datalake-py
description: Manage Azure Data Lake Storage Gen2 with Python SDK for hierarchical file systems, big data analytics, and file/directory operations.
license: MIT
---
# Azure Data Lake Storage Gen2 SDK for Python
Hierarchical file system for big data analytics workloads.
## Installation
```bash
pip install azure-storage-file-datalake azure-identity
```
## Environment Variables
```bash
AZURE_STORAGE_ACCOUNT_URL=https://<account>.dfs.core.windows.net # Required for all auth methods
AZURE_TOKEN_CREDENTIALS=prod # Required only if DefaultAzureCredential is used in production
```
## Authentication & Lifecycle
> **🔑 Two rules apply to every code sample below:**
>
> 1. **Prefer `DefaultAzureCredential`.** It works locally (Azure CLI / VS Code / Developer CLI) and in Azure (managed identity, workload identity) with no code change. Avoid connection strings, account/API keys — they bypass Entra audit and rotation.
> - Local dev: `DefaultAzureCredential` works as-is.
> - Production: set `AZURE_TOKEN_CREDENTIALS=prod` (or `AZURE_TOKEN_CREDENTIALS=<specific_credential>`) to constrain the credential chain to production-safe credentials.
> 2. **Wrap every client in a context manager** so HTTP transports, sockets, and token caches are released deterministically:
> - Sync: `with <Client>(...) as client:`
> - Async: `async with <Client>(...) as client:` **and** `async with DefaultAzureCredential() as credential:` (from `azure.identity.aio`)
>
> Snippets may abbreviate this setup, but production code should always follow both rules.
```python
from azure.identity import DefaultAzureCredential, ManagedIdentityCredential
from azure.storage.filedatalake import DataLakeServiceClient
# Local dev: DefaultAzureCredential. Production: set AZURE_TOKEN_CREDENTIALS=prod or AZURE_TOKEN_CREDENTIALS=<specific_credential>
credential = DefaultAzureCredential(require_envvar=True)
# Or use a specific credential directly in production:
# See https://learn.microsoft.com/python/api/overview/azure/identity-readme?view=azure-python#credential-classes
# credential = ManagedIdentityCredential()
account_url = "https://<account>.dfs.core.windows.net"
with DataLakeServiceClient(account_url=account_url, credential=credential) as service_client:
# Use service_client here (see following sections for operations)
...
```
## Client Hierarchy
| Client | Purpose |
|--------|---------|
| `DataLakeServiceClient` | Account-level operations |
| `FileSystemClient` | Container (file system) operations |
| `DataLakeDirectoryClient` | Directory operations |
| `DataLakeFileClient` | File operations |
## File System Operations
```python
# Create file system (container)
file_system_client = service_client.create_file_system("myfilesystem")
# Get existing
file_system_client = service_client.get_file_system_client("myfilesystem")
# Delete
service_client.delete_file_system("myfilesystem")
# List file systems
for fs in service_client.list_file_systems():
print(fs.name)
```
## Directory Operations
```python
file_system_client = service_client.get_file_system_client("myfilesystem")
# Create directory
directory_client = file_system_client.create_directory("mydir")
# Create nested directories
directory_client = file_system_client.create_directory("path/to/nested/dir")
# Get directory client
directory_client = file_system_client.get_directory_client("mydir")
# Delete directory
directory_client.delete_directory()
# Rename/move directory
directory_client.rename_directory(new_name="myfilesystem/newname")
```
## File Operations
### Upload File
```python
# Get file client
file_client = file_system_client.get_file_client("path/to/file.txt")
# Upload from local file
with open("local-file.txt", "rb") as data:
file_client.upload_data(data, overwrite=True)
# Upload bytes
file_client.upload_data(b"Hello, Data Lake!", overwrite=True)
# Append data (for large files)
file_client.append_data(data=b"chunk1", offset=0, length=6)
file_client.append_data(data=b"chunk2", offset=6, length=6)
file_client.flush_data(12) # Commit the data
```
### Download File
```python
file_client = file_system_client.get_file_client("path/to/file.txt")
# Download all content
download = file_client.download_file()
content = download.readall()
# Download to file
with open("downloaded.txt", "wb") as f:
download = file_client.download_file()
download.readinto(f)
# Download range
download = file_client.download_file(offset=0, length=100)
```
### Delete File
```python
file_client.delete_file()
```
## List Contents
```python
# List paths (files and directories)
for path in file_system_client.get_paths():
print(f"{'DIR' if path.is_directory else 'FILE'}: {path.name}")
# List paths in directory
for path in file_system_client.get_paths(path="mydir"):
print(path.name)
# Recursive listing
for path in file_system_client.get_paths(path="mydir", recursive=True):
print(path.name)
```
## File/Directory Properties
```python
# Get properties
properties = file_client.get_file_properties()
print(f"Size: {properties.size}")
print(f"Last modified: {properties.last_modified}")
# Set metadata
file_client.set_metadata(metadata={"processed": "true"})
```
## Access Control (ACL)
```python
# Get ACL
acl = directory_client.get_access_control()
print(f"Owner: {acl['owner']}")
print(f"Permissions: {acl['permissions']}")
# Set ACL
directory_client.set_access_control(
owner="user-id",
permissions="rwxr-x---"
)
# Update ACL entries
from azure.storage.filedatalake import AccessControlChangeResult
directory_client.update_access_control_recursive(
acl="user:user-id:rwx"
)
```
## Async Client
```python
from azure.storage.filedatalake.aio import DataLakeServiceClient
from azure.identity.aio import DefaultAzureCredential
async def datalake_operations():
async with DefaultAzureCredential() as credential:
async with DataLakeServiceClient(
account_url="https://<account>.dfs.core.windows.net",
credential=credential
) as service_client:
file_system_client = service_client.get_file_system_client("myfilesystem")
file_client = file_system_client.get_file_client("test.txt")
await file_client.upload_data(b"async content", overwrite=True)
download = await file_client.download_file()
content = await download.readall()
import asyncio
asyncio.run(datalake_operations())
```
## Best Practices
1. **Pick sync OR async and stay consistent.** Do not mix `azure.storage.filedatalake` sync clients with `azure.storage.filedatalake.aio` async clients in the same call path. Choose one mode per module.
2. **Always use context managers for clients and async credentials.** Wrap every client in `with DataLakeServiceClient(...) as client:` (sync) or `async with DataLakeServiceClient(...) as client:` (async). For async `DefaultAzureCredential` from `azure.identity.aio`, also use `async with credential:` so tokens and transports are cleaned up.
3. **Use `DefaultAzureCredential`** for portable auth across local dev and Azure (avoid connection strings / API keys when possible).
4. **Use hierarchical namespace** for file system semantics
5. **Use `append_data` + `flush_data`** for large file uploads
6. **Set ACLs at directory level** and inherit to children
7. **Use async client** for high-throughput scenarios
8. **Use `get_paths` with `recursive=True`** for full directory listing
9. **Set metadata** for custom file attributes
10. **Consider Blob API** for simple object storage use cases
Alle Dateien
1 Dateienazure-storage-file-datalake-py installieren
Laden Sie die Skill-Dateien herunter und extrahieren Sie diese in Ihr .claude/skills/-Verzeichnis.
ZIP herunterladenKlonen Sie das Repository und kopieren Sie die Skill-Dateien in Ihr Projekt.
git clone https://github.com/microsoft/skills/tree/main/.github/plugins/azure-sdk-python/skills/azure-storage-file-datalake-py # Copy SKILL.md to your .claude/skills/ directory
Kopieren





Heim
