Presto RBO之broadcast join与partitioned join类型的选择优化

一. broadcast join和partitioned join的区别

      broadcast与partitioned join的主要区别见:

优点缺点适用场景
broadcast join内存表无Hash重分布的开销

内存表在每个worker都是一份完整的拷贝;

探测表在并行探测前需要重分布

join操作的2个表之中有一个表较小;
Inner Join和Left Join场景;
join无where条件
partition join内存表被Hash到各个worker,每个worker只有一部分内存表数据,因此可以支持超大内存表的Join操作内存表和探测表需要重分布join操作的2表均为大表,无法全部加载到单一worker的内存中时;
Right Join、Full Join场景;
2个表均大于join_max_broadcast_table_size场景

二. broadcast join和partitioned join选择

      在Presto中,是选择broadcast还是partitioned的Join类型实现非常简单,就是将A join B的所有组合情况罗列一遍,然后求取每种情况的代价,选择代价最小的执行计划书执行,其实现代码在DetermineJoinDistributionType中实现。实现流程与Presto RBO之调整表的join顺序_王飞活的博客-CSDN博客   基本一样。

三. broadcast join和partitioned join的代价计算

exchange cost数据cost
broadcast join网络:内存表(build表)大小 * 节点个数
cpu: 内存表大小
内存:内存表大小*节点个数
cpu:内存表大小*节点个数 + 探测表大小
partitioned join网络:内存表大小+探测表大小
cpu:内存表大小+ 探测表大小
内存:内存表大小
cpu:内存表的大小 + 探测表的大小

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值