跳转到主要内容

对deltalake规范的松散实现,专注于可扩展性和分布式数据。

项目描述

xdlake

deltalake的松散实现,并在pyarrow之上用Python编写,专注于可扩展性、可定制性和分布式数据。

这主要受到deltalake包的启发,并且(非常)未经实战检验。然而,由于其Pythonic设计,它更具灵活性。如果你对此感兴趣,不妨试试看,甚至可以帮助使其变得更好。

安装

pip install xdlake

用法

实例化

实例化一个表!这可以是本地或远程。对于远程,你可能需要安装相关的fsspec实现,例如为AWS S3、Google Storage和Azure Storage分别安装s3fs、gcsfs、adlfs。

dt = xdlake.DeltaTable("path/to/my/cool/local/table")
dt = xdlake.DeltaTable("s3://path/to/my/cool/table")
dt = xdlake.DeltaTable("az://path/to/my/cool/table", storage_options=dict_of_azure_creds)

读取

读取数据。对于复杂的过滤和谓词下推等,请使用to_pyarrow_dataset并了解如何过滤pyarrow数据集

ds = dt.to_pyarrow_dataset()
t = dt.to_pyarrow_table()
df = dt.to_pandas()

写入

DeltaTable的实例是不可变的:任何执行表操作的函数都将返回一个新的DeltaTable。

写入内存数据

从内存中写入数据。数据可以是 pyarrow 表、数据集、记录批次、pandas DataFrame 或这些事物的可迭代对象。

dt = dt.write(my_cool_pandas_dataframe)
dt = dt.write(my_cool_arrow_table)
dt = dt.write(my_cool_arrow_dataset)
dt = dt.write(my_cool_arrow_record_batches)
dt = dt.write(pyarrow.Table.from_pandas(df))
导入外部数据

导入外部数据的引用而不进行复制。数据可以异构地存储在 s3、gs、azure 和本地,并且可以与 DeltaTable 本身不同的方式进行分区。尽情发挥。

如需为不同的存储位置提供不同的凭据,请参阅 凭据

一次性从多个位置导入数据。此方法仅适用于非分区数据。

dt = dt.import_refs(["s3://some/aws/data", "gs://some/gcp/data", "az://some/azure/data" ])
dt = dt.import_refs(my_pyarrow_filesystem_dataset)

分区数据需要不同的处理方式。首先,您需要阅读有关 pyarrow 分区 的内容来完成此操作。其次,您一次只能导入一个数据集。

foreign_partitioning = pyarrow.dataset.partitioning(...)
ds = pyarrow.dataset.dataset(
    list_of_files,
    partitioning=foreign_partitioning,
    partition_base_dir,
    filesystem=xdlake.storage.get_filesystem(foreign_refs_loc),
)
dt = dt.import_refs(ds, partition_by=my_partition_cols)

删除

使用 pyarrow 表达式 从 DeltaTable 中删除行

import pyarrow.compute as pc
expr = (
    (pc.field("cats") == pc.scalar("A"))
    |
    (pc.field("float64") > pc.scalar(0.9))
)
dt = dt.delete(expr)
删除向量

我非常希望支持 删除向量,但 pyarrow 无法按行索引过滤 parquet 文件(如果你问我的话,这是很基本的)。如果你也希望 xdlake 支持删除向量,请通过在 这里 发声来告知 arrow 的人们。

克隆

您可以对 deltatable 进行克隆。这是一个软克隆(不复制数据,新表只引用数据)。整个版本历史都得到了保留。写入将被写入新位置。

cloned_dt = dt.clone("the/location/of/the/clone")

凭据

引用分布式数据的 DeltaTable 可能需要各种云位置的凭据。

为 s3、gs 等注册默认凭据。

xdlake.storage.register_default_filesystem_for_protocol("s3", s3_creds)
xdlake.storage.register_default_filesystem_for_protocol("gs", gs_creds)
xdlake.storage.register_default_filesystem_for_protocol("az", az_creds)

为各种前缀注册特定凭据。

xdlake.storage.register_filesystem("s3://bucket-doom/foo/bar", s3_creds)
xdlake.storage.register_filesystem("s3://bucket-zoom/biz/baz", other_s3_creds)
xdlake.storage.register_filesystem("az://container-blah/whiz/whaz", az_creds)

链接

项目主页 GitHub
DeltaLake 事务日志 协议

错误

请在 GitHub 上报告错误、问题、功能请求等。

Gitpod 工作区

启动 gitpod 工作区

构建状态

main

项目详情


下载文件

下载适用于您的平台文件。如果您不确定选择哪个,请了解更多有关 安装包 的信息。

源分布

xdlake-0.0.7.tar.gz (33.3 kB 查看散列)

上传时间

构建分布

xdlake-0.0.7-py3-none-any.whl (20.8 kB 查看散列)

上传时间 Python 3

支持者

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面