DPP (Dynamic Partition Pruning,动态分区剪裁) : 过滤维度表后,能削减事实表的数据扫描量,提升关联计算的执行性能
需求 :统计所有头部用户贡献的营业额,并按照营业额倒序排序
select (orders.price * order.quantity) as income, users.name
from orders inner join users on orders.userId = users.id
where users.type = 'Head User'
group by users.name
order by income desc
逻辑计划 :
users.type = 'Head User'
,会用谓词下推,把过滤操作下推到数据源上,减少磁盘 I/O 开销当用户表支持分区剪裁(Partition Pruning),I/O 效率的提升就会更加显著
分区剪裁 :谓词下推的特例
分区表的存储方式:在文件系统中创建单独的子目录来存储相应的数据分片
谓词下推/分区剪裁:
DPP 实现逻辑 :
users.type = 'Head User'
条件过滤,再对维度表进行过滤列 idorders.userId = users.id
,把维度表 id 传到事实表的 userId 中利用 DPP 的条件: