SuperAPI AI 工具集

azure-storage-file-datalake-py

数据与分析

查看项目

更新于 10-16 02:08

技能介绍

用途

Azure Data Lake Storage Gen2 SDK for Python 面向大数据分析工作负载,提供分层文件系统能力,用于在 Azure Data Lake Storage Gen2 上执行文件与目录操作。

安装与环境变量

安装命令:

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

环境变量:

AZURE_STORAGE_ACCOUNT_URL=https://<account>.dfs.core.windows.net

身份验证

使用 DefaultAzureCredential 与 DataLakeServiceClient 建立服务客户端:

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

credential = DefaultAzureCredential()
account_url = "https://<account>.dfs.core.windows.net"

service_client = DataLakeServiceClient(account_url=account_url, credential=credential)

客户端层级

  • DataLakeServiceClient:账户级操作
  • FileSystemClient:容器(文件系统)操作
  • DataLakeDirectoryClient:目录操作
  • DataLakeFileClient:文件操作

主要能力

文件系统操作

可创建文件系统(容器)、获取已有文件系统、删除文件系统以及列举文件系统:

file_system_client = service_client.create_file_system("myfilesystem")
file_system_client = service_client.get_file_system_client("myfilesystem")
service_client.delete_file_system("myfilesystem")
for fs in service_client.list_file_systems():
    print(fs.name)

目录操作

支持创建目录、创建嵌套目录、获取目录客户端、删除目录以及重命名/移动目录:

directory_client = file_system_client.create_directory("mydir")
directory_client = file_system_client.create_directory("path/to/nested/dir")
directory_client = file_system_client.get_directory_client("mydir")
directory_client.delete_directory()
directory_client.rename_directory(new_name="myfilesystem/newname")

文件操作

上传文件支持从本地文件、字节数据上传,以及针对大文件使用 append_data 与 flush_data 分块追加并提交:

file_client = file_system_client.get_file_client("path/to/file.txt")
with open("local-file.txt", "rb") as data:
    file_client.upload_data(data, overwrite=True)
file_client.upload_data(b"Hello, Data Lake!", overwrite=True)
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)

下载文件支持读取全部内容、写入本地文件以及按范围下载:

download = file_client.download_file()
content = download.readall()
with open("downloaded.txt", "wb") as f:
    download = file_client.download_file()
    download.readinto(f)
download = file_client.download_file(offset=0, length=100)

删除文件:

file_client.delete_file()

列举内容

可列举路径(文件与目录)、列举指定目录下的路径以及递归列举:

for path in file_system_client.get_paths():
    print(f"{'DIR' if path.is_directory else 'FILE'}: {path.name}")
for path in file_system_client.get_paths(path="mydir"):
    print(path.name)
for path in file_system_client.get_paths(path="mydir", recursive=True):
    print(path.name)

文件/目录属性

可获取属性(如大小、最后修改时间)并设置元数据:

properties = file_client.get_file_properties()
print(f"Size: {properties.size}")
print(f"Last modified: {properties.last_modified}")
file_client.set_metadata(metadata={"processed": "true"})

访问控制(ACL)

可获取 ACL、设置 ACL 以及递归更新 ACL 条目:

acl = directory_client.get_access_control()
print(f"Owner: {acl['owner']}")
print(f"Permissions: {acl['permissions']}")
directory_client.set_access_control(owner="user-id", permissions="rwxr-x---")
from azure.storage.filedatalake import AccessControlChangeResult
directory_client.update_access_control_recursive(acl="user:user-id:rwx")

异步客户端

提供异步客户端以支持高吞吐场景:

from azure.storage.filedatalake.aio import DataLakeServiceClient
from azure.identity.aio import DefaultAzureCredential

async def datalake_operations():
    credential = DefaultAzureCredential()
    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())

最佳实践

  • 使用分层命名空间以获得文件系统语义
  • 大文件上传使用 append_data + flush_data
  • 在目录级别设置 ACL 并继承给子项
  • 高吞吐场景使用异步客户端
  • 使用 get_paths 并设置 recursive=True 进行完整目录列举
  • 为自定义文件属性设置元数据
  • 简单对象存储用例可考虑 Blob API

适用场景

该技能适用于执行上述概述中描述的工作流或操作。

限制

  • 仅在任务明确匹配上述范围时使用此技能。
  • 不要将输出视为环境特定验证、测试或专家审查的替代品。
  • 如果缺少必需的输入、权限、安全边界或成功标准,请停止并请求澄清。