opción
HogarHogar Skill DevOps y CI/CD azure-storage-file-datalake-py

azure-storage-file-datalake-py

microsoft/skills microsoft/skills

Gestiona Azure Data Lake Storage Gen2 con el SDK de Python para sistemas de archivos jerárquicos, análisis de grandes datos y operaciones de archivos/directorios.

...Expandir todo
0
Tiempo actualizado 16 de septiembre de 2026

SDK de Azure Data Lake Storage Gen2 para Python

Sistema de archivos jerárquico para cargas de trabajo de análisis de grandes datos.

Instalación

pip install azure-storage-file-datalake azure-identity

Variables de entorno

AZURE_STORAGE_ACCOUNT_URL=https://<cuenta>.dfs.core.windows.net  # Obligatorio para todos los métodos de autenticación
AZURE_TOKEN_CREDENTIALS=prod # Solo obligatorio si se utiliza DefaultAzureCredential en producción
</cuenta>

Autenticación y ciclo de vida

🔑 Se aplican dos reglas a cada ejemplo de código a continuación:

  1. Preferir DefaultAzureCredential. Funciona localmente (Azure CLI / VS Code / Developer CLI) y en Azure (identidad administrada, identidad de carga de trabajo) sin cambios en el código. Evite las cadenas de conexión y las claves de cuenta/API, ya que eluden la auditoría y la rotación de Entra.
    • Desarrollo local: DefaultAzureCredential funciona tal cual.
    • Producción: establezca AZURE_TOKEN_CREDENTIALS=prod (o AZURE_TOKEN_CREDENTIALS=<credencial_específica></credencial_específica>) para restringir la cadena de credenciales a credenciales seguras para producción.
  2. Envuelva cada cliente en un administrador de contexto para que las transferencias HTTP, los sockets y las cachés de tokens se liberen de forma determinista:
    • Síncrono: with <cliente>(...) as cliente:</cliente>
    • Asíncrono: async with <cliente>(...) as cliente:</cliente> y async with DefaultAzureCredential() as credential: (de azure.identity.aio)

Los fragmentos de código pueden abreviar esta configuración, pero el código de producción debe seguir siempre ambas reglas.

from azure.identity import DefaultAzureCredential, ManagedIdentityCredential
from azure.storage.filedatalake import DataLakeServiceClient

# Desarrollo local: DefaultAzureCredential. Producción: establezca AZURE_TOKEN_CREDENTIALS=prod o AZURE_TOKEN_CREDENTIALS=<credencial_específica>
credential = DefaultAzureCredential(require_envvar=True)
# O utilice una credencial específica directamente en producción:
# Consulte https://learn.microsoft.com/python/api/overview/azure/identity-readme?view=azure-python#credential-classes
# credential = ManagedIdentityCredential()
account_url = "https://<cuenta>.dfs.core.windows.net"

with DataLakeServiceClient(account_url=account_url, credential=credential) as service_client:
    # Utilice service_client aquí (consulte las secciones siguientes para las operaciones)
    ...
</cuenta></credencial_específica>

Jerarquía de clientes

ClientePropósito
`DataLakeServiceClient`Operaciones a nivel de cuenta
`FileSystemClient`Operaciones de contenedor (sistema de archivos)
`DataLakeDirectoryClient`Operaciones de directorio
`DataLakeFileClient`Operaciones de archivo

Operaciones del sistema de archivos

# Crear sistema de archivos (contenedor)
file_system_client = service_client.create_file_system("myfilesystem")

# Obtener existente
file_system_client = service_client.get_file_system_client("myfilesystem")

# Eliminar
service_client.delete_file_system("myfilesystem")

# Listar sistemas de archivos
for fs in service_client.list_file_systems():
    print(fs.name)

Operaciones de directorio

file_system_client = service_client.get_file_system_client("myfilesystem")

# Crear directorio
directory_client = file_system_client.create_directory("mydir")

# Crear directorios anidados
directory_client = file_system_client.create_directory("path/to/nested/dir")

# Obtener cliente de directorio
directory_client = file_system_client.get_directory_client("mydir")

# Eliminar directorio
directory_client.delete_directory()

# Renombrar/mover directorio
directory_client.rename_directory(new_name="myfilesystem/newname")

Operaciones de archivo

Subir archivo

# Obtener cliente de archivo
file_client = file_system_client.get_file_client("path/to/file.txt")

# Subir desde archivo local
with open("local-file.txt", "rb") as data:
    file_client.upload_data(data, overwrite=True)

# Subir bytes
file_client.upload_data(b"Hello, Data Lake!", overwrite=True)

# Adjuntar datos (para archivos grandes)
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)  # Confirmar los datos

Descargar archivo

file_client = file_system_client.get_file_client("path/to/file.txt")

# Descargar todo el contenido
download = file_client.download_file()
content = download.readall()

# Descargar a archivo
with open("downloaded.txt", "wb") as f:
    download = file_client.download_file()
    download.readinto(f)

# Descargar rango
download = file_client.download_file(offset=0, length=100)

Eliminar archivo

file_client.delete_file()

Listar contenidos

# Listar rutas (archivos y directorios)
for path in file_system_client.get_paths():
    print(f"{'DIR' if path.is_directory else 'FILE'}: {path.name}")

# Listar rutas en directorio
for path in file_system_client.get_paths(path="mydir"):
    print(path.name)

# Listado recursivo
for path in file_system_client.get_paths(path="mydir", recursive=True):
    print(path.name)

Propiedades de archivo/directorio

# Obtener propiedades
properties = file_client.get_file_properties()
print(f"Tamaño: {properties.size}")
print(f"Última modificación: {properties.last_modified}")

# Establecer metadatos
file_client.set_metadata(metadata={"processed": "true"})

Control de acceso (ACL)

# Obtener ACL
acl = directory_client.get_access_control()
print(f"Propietario: {acl['owner']}")
print(f"Permisos: {acl['permissions']}")

# Establecer ACL
directory_client.set_access_control(
    owner="user-id",
    permissions="rwxr-x---"
)

# Actualizar entradas de ACL
from azure.storage.filedatalake import AccessControlChangeResult
directory_client.update_access_control_recursive(
    acl="user:user-id:rwx"
)

Cliente asíncrono

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://<cuenta>.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())
</cuenta>

Mejores prácticas

  1. Elija síncrono O asíncrono y mantenga la coherencia. No mezcle clientes síncronos de azure.storage.filedatalake con clientes asíncronos de azure.storage.filedatalake.aio en la misma ruta de llamada. Elija un modo por módulo.
  2. Utilice siempre administradores de contexto para clientes y credenciales asíncronas. Envuelva cada cliente en with DataLakeServiceClient(...) as cliente: (síncrono) o async with DataLakeServiceClient(...) as cliente: (asíncrono). Para DefaultAzureCredential asíncrono de azure.identity.aio, utilice también async with credential: para que los tokens y las transferencias se limpien correctamente.
  3. Utilice DefaultAzureCredential para una autenticación portátil entre el desarrollo local y Azure (evite cadenas de conexión / claves API cuando sea posible).
  4. Utilice un espacio de nombres jerárquico para la semántica del sistema de archivos
  5. Utilice append_data + flush_data para subir archivos grandes
  6. Establezca ACLs a nivel de directorio y heredarlas a los hijos
  7. Utilice el cliente asíncrono para escenarios de alto rendimiento
  8. Utilice get_paths con recursive=True para una lista completa de directorios
  9. Establezca metadatos para atributos de archivo personalizados
  10. Considere la API de Blob para casos de uso simples de almacenamiento de objetos
Ver en GitHub
---
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

Todos los archivos

1 archivos

Instalar azure-storage-file-datalake-py

Descarga y extrae los archivos de habilidades en tu directorio .claude/skills/.

Descargar ZIP

Clona el repositorio y copia los archivos de la habilidad a tu proyecto.

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

Copiar Copiar
Configuración rápida: Copie la carpeta de habilidades a .claude/skills/ Claude detectará y utilizará automáticamente la habilidad
Repositorio microsoft/skills

Habilidades relacionadas

base44-cli
Tiempo actualizado 29 de junio de 2026
klingai-upgrade-migration
Tiempo actualizado 3 de julio de 2026
Railway CLI Management
Tiempo actualizado 2 de julio de 2026
Verification &amp; Quality Assurance
Tiempo actualizado 29 de junio de 2026
OR