DPP(Dynamic Partition Pruning, 动态分区剪裁)是Spark 3.0版本中第二个引人瞩目的特性, 它指的是在星型数仓的数据关联场景中, 可以充分利用过滤之后的维度表, 大幅削减事实表的数据扫描量, 从整体上提升关联计算的执行性能.
分区剪裁
对partition字段的过滤条件会只扫描符合条件的一类文件夹. 不会扫描全部的文件.
动态分区剪裁
将维度表中的结果发送到事实表中, 事实表根据这个子集做过滤, 从而减少数据扫描量, 提升I/O效率.
需要满足这三个条件才会触发动态分区剪裁
- 事实表必须是分区表, 而且分区字段(可以是多个)必须包含Join Key
- 仅支持等值Join, 对于不等值Join是不支持的.
- 维度表过滤之后的数据集要小于广播阈值
在对维度表过滤完之后, 会把这份数据封装为广播变量, 然后
- 发送给事实表中, 来减少事实表的数据扫描量.
- 发送给后续的Reduce Task来进行关联操作.
小结
没啥用, 因为需要限制Join Key为分区字段.