Delta表的日志记录了有关事务和统计信息(数据类型、最小值、最大值、列数等)的元数据。但是,当查看此日志的json文件时,我只能看到数据类型。是否有人知道如何获取此Delta表的最小值、最大值和列数,而无需计算任何内容(因为读取文件时Delta表应该具有此信息)?
Delta表的日志记录了有关事务和统计信息(数据类型、最小值、最大值、列数等)的元数据。但是,当查看此日志的json文件时,我只能看到数据类型。是否有人知道如何获取此Delta表的最小值、最大值和列数,而无需计算任何内容(因为读取文件时Delta表应该具有此信息)?
随着 Delta Lake 1.2.0 中 数据跳过 的发布,列级别的统计信息(如最小值/最大值)现在已经可用。每次执行 add
操作添加新的 Parquet 文件时,统计信息都会保存在 Delta Lake 事务日志中。使用 delta-rs Python 包(v0.8.0 或更高版本),我们可以从事务日志中检索和读取这些 add
操作记录以查看文件级别的统计信息。首先,使用 pip 或 conda 安装该软件包:
# using pip:
$ pip install deltalake
# using conda:
$ conda install -c conda-forge delta-spark
get_add_actions
方法读取add
操作记录:from deltalake import DeltaTable, write_deltalake
import pandas as pd
df = pd.DataFrame({"x": [1, 2, 3], "y": [4, 5, 6]})
write_deltalake("tmp", df, partition_by=["x"])
dt = DeltaTable("tmp")
dt.get_add_actions().to_pandas()
您将得到以下输出(导出为 tsv 以包含):
path size_bytes modification_time data_change partition_values num_records null_count min max
0 x=1/0-84bac732-65a4-4217-8782-14933373ad4b-0.parquet 1867 2023-03-28 23:28:25.634 True {'x': 1} 1 {'y': 0} {'y': 4} {'y': 4}
1 x=2/0-84bac732-65a4-4217-8782-14933373ad4b-0.parquet 1867 2023-03-28 23:28:25.634 True {'x': 2} 1 {'y': 0} {'y': 5} {'y': 5}
2 x=3/0-84bac732-65a4-4217-8782-14933373ad4b-0.parquet 1867 2023-03-28 23:28:25.634 True {'x': 3} 1 {'y': 0} {'y': 6} {'y': 6}
注意:每个统计量都将在DataFrame中拥有自己的列,例如num_records
、null_count
、min
和max
。