首页/数据/数据工程与 ETL 速查/分区裁剪 Partition Pruning
管道基础52 条

分区裁剪 Partition Pruning

查询只需读取命中的分区目录,是数仓查询性能的关键前提。前提是过滤条件直接作用于分区列;对分区列做函数变换会让裁剪失效。

原理按分区目录统计信息跳过无关目录
前提WHERE 中直接出现分区列等值/IN/范围
验证EXPLAIN 中查看 PartitionFilters 或扫描分区数

可裁剪与不可裁剪

可裁剪与不可裁剪
-- 可裁剪:分区列直接过滤
SELECT * FROM dwd_order WHERE dt = '2026-10-11';

-- 不可裁剪:对分区列做函数运算,退化为全分区扫描
SELECT * FROM dwd_order WHERE substr(dt, 1, 7) = '2026-10';
把日期从字符串改成函数计算(如 date_format)常导致裁剪失效,写 SQL 时保持分区列裸用。

易错点

  • 分区列类型不一致(dt 建为 int 却传字符串)可能触发隐式转换而无法裁剪
  • 动态分区写入未限制分区数,可能一次产生大量小分区

数据来源与参考

  • Apache Hive 官方文档:Partitioned Tables
  • Apache Spark 官方文档:Partition Discovery
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌