用途:把 Delta Lake 表与云存储(S3、GCS、Azure)集成,使用纯 Python 的 deltalake 包读写、维护和做增量处理。
安装:pip install deltalake pyarrow
主要配置方式:
- storage_options(推荐):用字典传入凭据,如 S3 的 AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY、AWS_REGION;生产环境更推荐用环境变量。GCS 用 GOOGLE_SERVICE_ACCOUNT_KEY_JSON 或环境变量 GOOGLE_APPLICATION_CREDENTIALS;Azure 用 AZURE_STORAGE_CONNECTION_STRING,或 AZURE_STORAGE_ACCOUNT_NAME 加 AZURE_STORAGE_ACCOUNT_KEY。
- PyArrow 文件系统(进阶):用 fs.FileSystem.from_uri 与 fs.SubTreeFileSystem 构造文件系统对象,传给 write_deltalake 或 DeltaTable,可获更强控制。
写入与读取:write_deltalake("s3://bucket/delta-table", data=pa_table, storage_options=storage_options, mode="overwrite", partition_by=["date"]);读取用 DeltaTable("s3://bucket/delta-table", storage_options=storage_options),再 to_pandas()。
时间旅行:dt.load_version(5) 按版本读取;dt.load_with_datetime("2024-01-01T12:00:00Z") 按时间读取;dt.history() 查看历史(version、timestamp、operation)。
维护与增量:dt.vacuum(retention_hours=24) 清理旧文件;dt.optimize().execute() 合并小文件;dt.files() 列出 Parquet 文件;dt.details() 查看元数据。增量处理可用 dt.history() 过滤 version 大于上次检查点,再更新检查点 dt.version(),或全量快照对比。
最佳实践与限制:生产用环境变量而非硬编码凭据;按日期/地区分区;定期 vacuum 但需保留足够时间旅行范围;定期 optimize;用版本跟踪增量。不要完全禁用 vacuum(存储膨胀),也不要 vacuum 过于激进(丢失时间旅行能力)。S3 兼容存储(如 MinIO)可用 AWS_ENDPOINT_URL 或写入 storage_options。认证细节参考相关条目。资料未提供各云平台的完整权限配置与定价信息。