← 中文资源

简体中文版本

写入分区的 Parquet 数据集

按低基数列对 Parquet 分区,使下游查询能分区裁剪、显著减少扫描数据量。

阅读英文原文

目标

分析查询扫描整个数据集,因为所有数据都在一个大文件里。本配方将数据按日期列分区写入 Parquet,并设置合适的行组大小与压缩,使文件按日期目录组织、支持分区裁剪;提醒分区基数和粒度要合适,避免产生大量小文件。

步骤要点

  1. 按日期列分区写入 Parquet 并设置压缩。
  2. 检查分区布局与文件大小是否合理。
  3. 分区粒度过细时改用更粗的粒度(如按月)。
  4. 避免用唯一 id 等基数列做分区键。
import pandas as pd
df = pd.read_csv('events.csv')
df['event_date'] = pd.to_datetime(df['event_date'])
df.to_parquet('events.parquet', partition_cols=['event_date'], compression='zstd')

排错提示

  • 分区过细会产生大量小文件开销。
  • 高基数列做分区键会生成海量文件。
  • 分区裁剪依赖查询带过滤条件。

适用边界

  • 过度分区带来小文件开销。
  • 不优化分区内的排序。