Spark sql逻辑执行计划优化器——EliminateOuterJoin【消除outerjoin】

所有优化器的前提:不影响查询结果,即要保证优化前和优化后两个sql执行的效果相同

EliminateOuterJoin的主要作用是消除外连接(left,right,full),比如把left join、right join 转为inner join,full  join转为left join、right join or inner join 。

为啥要消除外链接呢?

能在一定程度上提高效率:

inner join 只保留左表和右表可以关联到的数据,left join 需要保留左表全表的数据,right join 需要保留右表全表的数据,full join左右表数据都需要保留,这四种join在数据处理上的效率:inner join>left/right join >full join 。

如果将一些和内连接逻辑等价的外连接转化为内连接,可以提前过滤很多不需要的记录,加速整个数据处理的过程。

EliminateOuterJoin优化器主要处理的是Filter的子节点为Join节点的情况

代码核心流程

为啥可以做这样的转化呢?

以【left outer类型,且右表有过滤条件,则left outer-->inner】为例

——left join 的特点是右表没有对应的数据时补null,现在右表有个条件a<1,这说明右表为null都会被a<1给过滤掉,此时和inner join是等价的。

从优化器的顺序上来看:

该优化器在谓词下推优化器之前执行

Hey!

我是小萝卜算子

每天学习一点点

知识增加一点点

思考深入一点点

在成为最厉害最厉害最厉害的道路上

很高兴认识你

推荐阅读:

spark sql非join情况的谓词下推优化器PushPredicateThroughNonJoin

Spark sql Expression的deterministic属性

json_tuple一定比 get_json_object更高效吗?

with as 语句真的会把查询的数据存内存嘛?

SparkSql LogicalPlan的resolved变量

Spark sql 生成PhysicalPlan(源码详解)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小萝卜算子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值