前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spark sql 谓词下推之CombineFilters及可以改进的地方

Spark sql 谓词下推之CombineFilters及可以改进的地方

作者头像
数据仓库践行者
发布2021-11-26 15:18:44
6740
发布2021-11-26 15:18:44
举报
文章被收录于专栏:数据仓库践行者

CombineFilters优化器还可以再做一些改进呀

spark sql谓词下推逻辑优化器PushDownPredicates包含了三个规则:

CombineFilters是合并Filter节点的优化器,即处理Filter+Filter的情况

CombineFilters与PushPredicateThroughJoin、PushPredicateThroughNonJoin

搭配使用

代码

代码比较简单:如果是Filter+Filter的情况,判断是否可以合并Filter节点,如果可以的话,给合并

案例

代码语言:javascript
复制
select a,b from (select a,b from testdata2 where b>1) tmp
 where tmp.a>3

Analyzed logical plan:

这个sql产生的逻辑执行计划的两个filter节点本来是分开的

Optimized logical plan:

PushPredicateThroughJoin和CombineFilters两个优化器配合,完成下推合并操作

思考

CombineFilters只有在Filter中的condition都是确定性的时候才能合并:

case Filter(fc,nf@Filter(nc,grandChild))if fc.deterministic && nc.deterministic

下面这个sql,rand()<0.1 不满足确定性的条件,combineFilters 没有给做合并,但实际上a>3是可以提前做过滤的

代码语言:javascript
复制
select a,b from (select a,b from testdata2 where b>1) tmp 
where tmp.a>3 and rand()<0.1

改造代码

改造后的效果

改造后a>3合并成功

Hey!

我是小萝卜算子

欢迎关注公众号

每天学习一点点

知识增加一点点

思考深入一点点

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

很高兴认识你

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Analyzed logical plan:
  • Optimized logical plan:
  • 思考
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档