首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Spark sql逻辑执行计划优化器——EliminateOuterJoin【消除outerjoin】

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

作者头像
数据仓库践行者
发布2021-11-17 15:19:53
发布2021-11-17 15:19:53
7430
举报

所有优化器的前提:不影响查询结果,即要保证优化前和优化后两个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是等价的。

从优化器的顺序上来看:

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-11-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据仓库践行者 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 为啥要消除外链接呢?
  • 代码核心流程
  • 为啥可以做这样的转化呢?
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档