Delta表统计信息

3

Delta表的日志记录了有关事务和统计信息(数据类型、最小值、最大值、列数等)的元数据。但是,当查看此日志的json文件时,我只能看到数据类型。是否有人知道如何获取此Delta表的最小值、最大值和列数,而无需计算任何内容(因为读取文件时Delta表应该具有此信息)?

2个回答

2

随着 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

我们将使用pandas和delta-rs创建一个虚拟的Delta表。然后,我们将使用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_recordsnull_countminmax


0
这取决于您使用的是开源版本还是Databricks版本。前者没有此功能,该功能仅存在于DB版本中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接