分享好友 最新动态首页 最新动态分类 切换频道
Hive优化器原理与源码解析系列--优化规则HiveJoinCommuteRule(十三)
2024-12-27 00:31

目录

背景

优化规则HiveJoinCommuteRule

总结

背景

此篇文章讲解HiveJoinCommuteRule优化规则,此优化规则Rule主要功能是通过改变Join左右两侧的输入RelNode的顺序来试图探索可优化的执行计划。但前提是对Join关联操作之上Project投影操作的RelNode树,形如:

亦可用SQL表示,有表TA和TB两张表,分别含有字段如下:

如:

SELECT a0,a1,b0,b1

FROM TA JOIN TB ON TA.a0 = TB.b0

转化为

SELECT a0,a1,b0,b1

(

SELECT b0,b1,a0,a1

FROM TB JOIN TA ON TA.a0 = TB.b0

)

上述SQL是对执行计划等价变换的描述。就可通过改变TA JOIN TB 为TB JOIN TA来优化逻辑执行计划,在物理实现的过程中,如果Join物理层算法实现是Nest Loop算法,改变了左右两表的顺序,是可以减少IO次数的,IO次数也是影响执行效率的因素之一,同时IO也是CBO基于成本优化器成本模型CostModel元素之一。如果Join物理层算法实现是Hash Join或Sort Merge Join算法改变顺序,将“小的”输入进行hash或进行分桶来减少计算成本。

此Hive优化规则是对Apache Calcite框架优化相关模块中的优化规则RelOptRule父类的实现,继承了matches方法,实现了onMatch方法,但是Calcite中是有JoinCommuteRule优化规则的,但是本规则没有完全继承它,只是使用了swap方法,改变了Join左右两侧的输入的顺序。

优化规则HiveJoinCommuteRule

优化器的优化规则Rule实现,都需实现两个方法matches和OnMatch两个方法。

1)matches方法逻辑详解

matches方法返回此规则Rule是否可能与给定的操作数operands匹配。优化器在匹配上规则Rule的所有操作数Operands之后和调用OnMatch(ReloptRuleCall)之前调用此方法。在优化器的实现中,它可能会在调用OnMatch(ReloptRuleCall)之前将匹配的ReloptRuleCall排队很长时间,matches方法提前判断这种方法是有好处的,因为优化器可以在处理的早期,把不满足匹配条件的规则放弃掉。

判断由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优化规则的调用。

讲解此方法实现逻辑之前,补一点《离散数学》置换和恒等置换的知识:

定义.

设M是一个非空的有限集合,M的一个一对一变换称为一个置换。设M={a1,a2,…,an},则M的置换σ可简记为

σ:

bi=σ(ai),i=1,2,…,n

结论:M的置换共有n!个。M上的置换称为n元置换。特别地, 若σ(ai)=ai, i=1,2,…,n,则σ为n元恒等置换。Sn: n!个置换作成的集合。

恒等置换:

置换在这里仅仅用来表示输入和输出字段索引序号的映射关系。接下来开始onMatcch方法实现逻辑讲解。

首先,用call.rel(0)获取顶层Project投影操作,其次,call.rel(1)获取子输入Join操作。

开始判断Project投影字段的置换topPermutation不为null,则说明它仅仅是输入字段的置换;值为null,则不做任何优化。同样,该字段索引的置换如果为恒等置换,也不做任何优化。

HiveJoinCommuteRule优化规则没直接使用Calcite的优化规则JoinCommuteRule的逻辑,仅仅只是使用了swap方法把Join左右两侧输入进行调换实现。

public static RelNode swap(Join join, boolean swapOuterJoins)

Returns a relational expression with the inputs switched round. Does not modify . Returns null if the join cannot be swapped (for example, because it is an outer join).

如果参数join的输入顺序没有改变则返回null。其次需要一个Project投影保证其字段的顺序,如果没project,将不做任何优化。

获取到改变Join的输入顺序后,对swapped的Project进行,同上的判断,如果返回Project不是输入字段索引的置换,或该字段索引的置换为恒等置换,则不做任何优化。

注意:JoinCommuteRule.swap(join,true),第二参数为true,说明这里支持外连接输入顺序的交换。

最后,顶层Project投影置换topPermutation与join变换输入顺序在顶层添加的Project投影的置换bottomPermutation的乘积的结果为恒等置换则说明可以做等价变换的优化。bottomProject.getInput(0)移除底部Project投影操作,产生新Join注册到优化器。

总结

最新文章
阿里携手UC推出神马搜索 移动搜索绝不会一家独大
  4月28日下午,UC公司与阿里巴巴合作共同推出移动搜索引擎“神马”,域名为sm.cn。UC董事长俞永福表示,UC在内部低调做移动搜索已有四年,去年整合阿里“一搜”团队和业务,以及原百度的技术专家团队后,才推出移动搜索业务。刚刚笔者访
跨境电商怎么查看其他店铺关键词?怎么查看其他同行?
在跨境电商的激烈竞争中,了解竞争对手的关键词策略以及发现优秀的同行店铺,是每位电商卖家提升业务、优化产品的重要步骤。今天将详细探讨如何查看其他店铺的关键词以及如何查找其他同行店铺,为跨境电商卖家提供实用的策略。一、跨境电商
超逼真美女写真生成:用AI打造你的AI女友!
限时免费,点击体验最近超火的AI生图神器,坐拥3000美女的大男主就是你! https://ai.sohu.com/pc/generate/textToImg?_trans_=030001_yljdaimn 在这个科技飞速发展的时代,人工智能的神奇之处已经渗透到我们生活的方方面面,甚至连美丽的
词令如何将长网址转成口令打开?
词令是一款关键词口令直达工具。打开词令,输入口令,直达该口令关联的目标。网址转成口令后,就可以通过词令,输入口令,打开口令关联的目标网址。口令打开网址体验口令是:vip88,请打开词令App或词令官网,输入口令【 vip88 】,搜索直
逾期通讯录消除攻略:如何有效处理不良记录,恢复信用?
1. 到相关的逾期联系人管理平台或应用。2. 找到逾期联系人的列表,常常这些列表会在“逾期管理”或“联系人管理”等板块中。3. 选中您想要撤销的逾期联系人。4. 点击“编辑”或“管理”按,进 系人的详细信息页面。5. 查找“撤销逾期”或“
长沙十大网络舆情公关公司排名揭晓:为城市形象护航
在当今信息高速传播的时代,网络舆情的影响力日益凸显。长沙,这座充满活力的城市,也有着一批专业的网络舆情公关公司,在维护城市形象和企业声誉方面发挥着重要作用。长沙网络舆情公关公司具备先进的舆情监测技术。他们能够实时监控各类网
超好用:免费好用的图床
经常写文章的小伙伴可能会头疼,图片需要一张一张的上传,费劲也耗时,今天就推荐几款超简单的图床工具。图床就是一个在网络上存储图片的地方,目的是为了节省本地服务器空间,加快图片打开速度。话不多说,进入正题。永久存储免注册,图片
探秘系统设计界面神器,打造精美交互界面
在当今数字化浪潮汹涌澎湃的时代,系统设计界面的质量直接关乎用户与软件、平台交互的顺畅性与愉悦感。一款出色的系统设计界面软件,犹如一位幕后的魔法大师,能够将设计师的创意灵感精准地转化为直观、实用且富有魅力的用户界面。无论是打
魔音工坊的文案制作过程融合了先进的人工智能技术和大数据分析,为客户提供了一种全新的文案创作体验。以下是具体步骤和优化后的
在数字化时代人工智能的应用已经渗透到各行各业文案创作也不例外。魔音工坊作为一家专注于音频制作和文案生成的企业凭借其特别的技术,为广大创作者提供了高效、便捷的文案生成解决方案。本文将深入探讨魔音工坊的文案制作过程,揭示其背后
相关文章
推荐文章
发表评论
0评