如何用Delta-rs Python API连接并认证Azure Data Lake Storage Gen2的Delta表?
使用Delta-rs Python API连接Azure Data Lake Storage Gen2的Delta表分步指南
1. 先装依赖
直接用pip安装delta-rs的Python包即可,命令:
pip install deltalake
建议用Python 3.8及以上版本,避免版本兼容问题。
2. 准备Azure认证信息
ADLS Gen2常用两种认证方式,挑你适用的来:
方式一:SAS密钥认证
得备好这几个信息:
- 存储账户名称(从Azure门户的存储账户页面复制)
- 容器名称(ADLS Gen2里的容器名)
- SAS密钥(Azure门户里生成的,要确保包含对目标Delta表的读/写权限,权限不够会报错)
方式二:服务主体(SPN)认证
需要提前在Azure AD里注册好服务主体,拿到以下信息:
- 存储账户名称
- 容器名称
- 租户ID(Azure AD的租户ID)
- 客户端ID(服务主体的应用ID)
- 客户端密钥(服务主体的密码)
另外,要给这个服务主体分配存储容器的Storage Blob Data Contributor角色,不然没权限访问数据。
3. 连接Delta表的代码示例
用SAS密钥连接
from deltalake import DeltaTable # 替换成你的实际信息 storage_account = "你的存储账户名" container = "你的容器名" sas_key = "你的SAS密钥" delta_table_path = f"az://{container}/delta表的路径" # 示例:az://my-container/datasets/user-delta-table # 配置存储参数 storage_options = { "azure_storage_account_name": storage_account, "azure_sas_key": sas_key } # 加载Delta表 delta_table = DeltaTable(delta_table_path, storage_options=storage_options) # 验证连接成功:查看表结构和数据 print("Delta表结构:") print(delta_table.schema().json()) print("\n前5行数据:") print(delta_table.to_pandas().head())
用服务主体连接
from deltalake import DeltaTable # 替换成你的实际信息 storage_account = "你的存储账户名" container = "你的容器名" tenant_id = "你的租户ID" client_id = "你的服务主体客户端ID" client_secret = "你的服务主体客户端密钥" delta_table_path = f"az://{container}/delta表的路径" # 配置存储参数 storage_options = { "azure_storage_account_name": storage_account, "azure_tenant_id": tenant_id, "azure_client_id": client_id, "azure_client_secret": client_secret } # 加载Delta表 delta_table = DeltaTable(delta_table_path, storage_options=storage_options) # 验证连接成功:查看表版本和分区 print("Delta表当前版本:") print(delta_table.version()) print("\n表的分区信息:") print(delta_table.partitions())
4. 常见坑排查
- 路径格式别错:必须是
az://<容器名>/<表路径>,存储账户不用写在路径里,单独通过azure_storage_account_name参数传 - SAS密钥权限要够:至少要有
Read权限(读表),如果要写表得加Write、Delete等权限 - 服务主体角色要到位:必须给服务主体分配
Storage Blob Data Contributor(或更细粒度的对应权限),只给Contributor没用,因为那是资源管理权限,不是数据权限 - 网络问题:如果是内网环境,检查是否能访问Azure存储端点,需要的话可以在
storage_options里加azure_proxy参数配置代理
内容的提问来源于stack exchange,提问作者user__42
相关产品推荐
相关产品推荐

