You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何查询Arrow数据集元数据?是否支持按行分组分区?

Apache Arrow Dataset行组分区与元数据查询解决方案

能力支持说明

Apache Arrow Dataset完全支持按行组拆分分区,以及读取行组级别的最大值、最小值等统计元数据的需求,你之前的调用逻辑未正确获取子分片的元数据,因此未拿到预期结果。

现有代码问题说明

你调用的split_by_row_group()方法的作用是将单个文件分片(Fragment)拆分为多个对应文件内行组的子分片,本身不会直接返回元数据,需要遍历拆分后的子分片读取其metadata属性才能拿到行组统计信息。

正确实现示例

import pyarrow.dataset as ds

# 替换为你的数据集路径,格式根据实际存储调整为parquet/orc
dataset = ds.dataset("your_dataset_path", format="parquet")

for fragment in dataset.get_fragments():
    # 按行组拆分当前分片
    row_group_fragments = fragment.split_by_row_group()
    for rg_frag in row_group_fragments:
        # 获取当前行组的全量元数据
        rg_metadata = rg_frag.metadata
        print(f"当前行组总行数:{rg_metadata.num_rows}")
        # 遍历所有列获取最大最小值统计
        for col_name in dataset.schema.names:
            col_stats = rg_metadata.statistics[col_name]
            if col_stats.has_min_max:
                print(f"列{col_name} 最小值:{col_stats.min} 最大值:{col_stats.max}")

注意事项

  • 该能力仅支持Parquet、ORC等自带行组统计元数据的存储格式,CSV等纯文本格式无行组统计能力,无法使用该功能。
  • 自行写入数据集时需显式开启统计写入配置,并设置合理的行组大小,才能生成包含最大、最小值统计的行组元数据,写入配置示例如下:
    ds.write_dataset(
        data,
        base_dir="output_dataset_path",
        format=ds.ParquetFileFormat(write_statistics=True),
        min_rows_per_group=10000,
        max_rows_per_group=100000
    )
    
  • Arrow Dataset查询引擎默认支持行组裁剪能力,你无需手动拆分行组过滤,直接在查询时传入过滤条件即可自动跳过不满足条件的行组,大幅提升查询效率,示例:dataset.to_table(filter=ds.field("age")>18)。

内容的提问来源于stack exchange,提问作者Abhishek Malik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 14:06:03