分享好友 最新动态首页 最新动态分类 切换频道
Hive优化器原理与源码解析系列--优化规则FilterReduceExpressionsRule(二十二)
2024-12-26 21:56

目录

背景

优化规则FilterReduceExpressionsRule

总结

背景

这篇文章来讲优化规则FilterReduceExpressionsRule,主要功能减少不必要谓词表达式判断,如冗余cast转换移除,cast转换为字段本身的相同的数据类型;Filter内含有条件是常量,恒为True等等。和Filter减少不必要的Expression相似的优化规则,还有Calcite框架自带的ProjectReduceExpressionsRule、JoinReduceExpressionsRule是与Project投影和Join关联相关的减少不必要表达式的优化规则。

操作符表达式树,等价变换如下:

FilterReduceExpressionsRule是HiveReduceExpressionsRule优化规则中,实现一部分。其他都引用Calcite自带的ReduceExpressionsRule优化规则。

优化规则FilterReduceExpressionsRule

1)matches方法逻辑详解

matches方法返回此规则Rule是否可能与给定的操作数operands匹配,但是此方法的任何实现都可以给出误报,也就是说虽然规则与操作数匹配,但随后具OnMatch(ReloptRuleCall)而不生成任何后续任务。

判断由RelOptCall调用的优化规则Rule是否与输入参数RelNode关系表达式匹配,即此优化规则Rule能否应用到一个RelNode关系表达式树上。但此matches方法是继承自父类方法,默认返回true。

2)onMatch方法逻辑详解

接收有关一条规则匹配的通知。同时此方法被调用,call.rels保存了与规则Rule的操作数Operands匹配上的关系表达式RelNode集合;call.rels[0]是根表达式。通常一条规则Rule会检查这些节点是否有效匹配,创建一个新表达式RelNode(等价的)然后调用RelOptRuleCall.transformTo(org.apache.calcite.rel.RelNode, java.util.Map<org.apache.calcite.rel.RelNode, org.apache.calcite.rel.RelNode>)注册表达式。而RelOptRuleCall用一系列RelNode关系表达式集合作为参数,对RelOptRule优化规则的调用。

通过使用RelMetadataQuery HiveMeta元数据收集信息的访问对象getPulledUpPredicates方法提取Filter对象子输入RelNode上的谓词表达式列表RelOptPredicateList对象predicates。

RelOptPredicateList:

已知保存在特定关系表达式输出中的谓词。

谓词分两种:

例如,如果将Filter(x>1)应用于谓词y<10的关系表达式,则过滤器的上拉谓词为[y<10,x>1]。

先找到RelNode表达式的谓词表达式,为FilterReduceExpress移除不必要的表达式做准备。

上述boolean reduced是用来标识判断谓词是否可移除的。

reduceExpressions是从父类ReduceExpressionsRule继承的方法,主要功能返回是否已经成功地减少了一些表达式。

reduceExpressions方法说明:

减少一系列表达式

如果成功地减少谓词表达式,取expList.get(0)由方法已经修改的表达式(对filter.getCondition()返回RexNode的修改后的)。则是否可减少标识reduced=true。

如果没有减少,取filter.getCondition()过滤条件作为newConditionExp,仍然测试原始谓词,看看它是否已经是一个常量,在这种情况下,我们不需要任何关于筛选的运行时决策。则是否可减少标识reduced=false

对newConditionExp已经减少了表达式新谓词表达式或原始谓词的判断:

其他无缩减谓词表达式的情况下,判断是否为方法(RexCall方法调用对象)或表达式的调用。如果其RexCall是以NOT 开头,还有以去掉NOT 进行判断是否为RexCall方法调用或表达式调用。

去掉NOT后操作数若不是RexCall,则推出优化。否则取第一个操作数,即去掉NOT的操作数。

最后,优化器判定,新生成的执行计划绝对的好与旧执行计划。即缩减expression后的执行计划,一定没缩减的更优化。

对于一个静态模式Schema系统,Schema信息是从输入RelNode获取的,一个总是为False或NUll的Filter总是被一个不产生任何记录值操作符替代。对于动态模式Schema系统,Filter可能有unknown未知输入类型。在这些情况下,它们必须定义Values operator的系统特定替代项,例如插入LIMIT 0来替代在原始输入上Filter。

此方法的实现是调用RelBuilder的empty,是静态模式Schema可以被优化为一个空的Values操作。

对于不可为空的表达式为is[NOT]NULL,则可以移除筛选器或将其替换为空Empty。如对一个非空列上限制为IS NULL,谓词表达式肯定为False。

对于不可为空的列,结果恒为真True谓词表达式,Filter可移除;结果为未知的,可用空来替代。

总结

最新文章
网站百度收录和不收录 1. 揭秘!为何你的内容百度偏爱收录?2. 提升曝光!打造百度必收录的新媒体秘籍3. 内
在当今信息爆炸的时代,网站内容的百度收录情况对于网站运营者而言,无疑是衡量其传播力、影响力和商业价值的重要指标本文将深入探讨网站文章为何能被百度收录或不被收录的深层次原因,并提出一系列行之有效的策略,旨在帮助网站运营者提升
苏州吴中区alevel国际高中机构精选人气排行榜名单出炉
苏州吴中区alevel国际高中机构精选人气排行榜名单出炉,苏州的A-level培训机构众多,哪家排名比较好呢?在这里,我强烈推荐苏州新东方。苏州新东方专为IELTS/A-Level考试学员设置的集规划+培训+留学指导为一体的解决方案,多重环节包括课程
seo入门教程seo入门(SEO优化方法及技巧实训)
在写这篇文章的时候,SEO小也先挖掘了下什么网站关键词适合当标题,这篇文章分享如何做谷歌SEO优化,内容是谷歌推荐的SEO方法,本来想用SEO优化方案作为标题关键词,考虑了下这么零散的知识点不太适合,还是用SEO优化方法这个关键词吧,虽
词令怎么将链接生成关键词打开?
词令是一款关键词口令直达工具。打开词令,输入口令,直达该口令关联的目标。网址转成口令后,就可以通过词令,输入口令,打开口令关联的目标网址。口令打开网址体验口令是:vip88,请打开词令App或词令官网,输入口令【 vip88 】,搜索直
大学专业介绍:电气工程及其自动化专业
一、电气工程及其自动化专业介绍: 本专业培养具有良好的科学素养和文化修养,电工与电子技术、控制理论、信息处理、计算机硬软件和网络技术、电力工程和电气信息技术等基础理论及专业知识扎实,受到系统的科学研究与实
黑暗奇幻游戏推荐哪个 高人气黑暗奇幻游戏排行榜前十
探寻黑暗奇幻游戏世界,你是否在寻找那款能带你深入神秘、阴森又充满魅力的游戏?本文特别为你揭示高人气的黑暗奇幻游戏排行榜前十名,从经典到新兴力作,满足硬核玩家与幻想爱好者的好奇心。一探究竟,体验那些超越想象的冒险之旅吧!Aero
“管理赋能 共同成长”,2023复旦管院科创周正式启幕
2023年12月5日,2023复旦管院科创周正式启幕。开幕论坛上,陆雄文院长发表开幕演讲;2013年诺贝尔化学奖得主、斯坦福大学终身教授、复旦大学复杂体系多尺度研究院荣誉院长迈克尔莱维特(Michael Levitt)教授带来科技之光大讲堂科创周特别
金昌卫生间漏水维修电话〈免费上门〉金昌专业房屋漏水维修
不砸砖、不砸墙;免砸砖防水补漏技术,2小时快速解决漏水问题,超长保修期。漏水维修服务项目:卫生间墙面起皮、楼顶防水、窗台防水补漏、厨房间漏水、泳池渗水、漏水检测维修、楼顶漏水、房顶漏水、屋顶渗水、玻璃房漏水、防水堵漏、别墅房顶
库里自曝会在这2种情况下退役:因实力不足被淘汰!
目前效力于NBA金州勇士队的史蒂芬·库里,来到了他职业生涯的第16个赛季。目前他与勇士的合约还剩下3年,在2026-27赛季到期时,他将年满39岁。从库里的表态来看,他似乎认为自己距离真正告别球场的时刻还有很长的时间。目前服役于金洲的NBA
玩家必读“微乐跑得快免费挂”挂辅助教程
微乐小程序是一款可以让一直输的玩家,快速成为一个“必胜”的ai辅助神器,有需要的用户可以加我微下载使用。微乐小程序可以一键让你轻松成为“必赢”。其操作方式十分简单,打开这个应用便可以自定义微乐小程序系统规律,只需要输入自己想
相关文章
推荐文章
发表评论
0评