目标
分析查询扫描整个数据集,因为所有数据都在一个大文件里。本配方将数据按日期列分区写入 Parquet,并设置合适的行组大小与压缩,使文件按日期目录组织、支持分区裁剪;提醒分区基数和粒度要合适,避免产生大量小文件。
步骤要点
- 按日期列分区写入 Parquet 并设置压缩。
- 检查分区布局与文件大小是否合理。
- 分区粒度过细时改用更粗的粒度(如按月)。
- 避免用唯一 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')
排错提示
- 分区过细会产生大量小文件开销。
- 高基数列做分区键会生成海量文件。
- 分区裁剪依赖查询带过滤条件。
适用边界
- 过度分区带来小文件开销。
- 不优化分区内的排序。