山大软工实践hive(7)-查看各优化器内容

2021SC@SDUSC

山大软工实践hive(7)-查看各优化器内容

1

这一次来看看优化器的源码,先看PointLookupOptimizer
在这里插入图片描述
翻译意思是此优化将采用一个筛选器表达式,如果其谓词包含其子级为常量相等表达式的OR运算符,它将尝试生成IN子句(这更有效)。如果OR运算符包含AND运算符子级,则优化可能会生成一个使用结构的IN子句。
首先老版hive是不支持in字句的,然后这里是对常量等值表达式的or字句转化为in字句
struct是hive的一种复杂数据类型,可以包含不同数据类型的元素。这里的structs应该指的是它
在这里插入图片描述
这个解释中的“点语法”让我产生联想,毕竟优化器名字是PointLookUp

暂时没头绪,先看它的transform方法
在这里插入图片描述
Rule
在这里插入图片描述
看意思是用于限定dispatcher向进程分发operator的规则,可以通过计算开销之类的,具体什么用不清楚

NodeProcessor
在这里插入图片描述
处理op的基类,实现没有特殊需求的op的通用处理流程,也不知道具体干啥,继续向下看

opRules.put的第一个参数,跳转过去
在这里插入图片描述
RuleRegExp类,说是处理各表达式的
看这个被调用的类,和正则表达式有关,它举的例子是TS.*RS,意思是TS后面跟着任意算子,最后跟一个RS(比如可以是TS FIL RS,可以是TS FIL LIM RS)

FilterOperator.getOperatorName(),连起来就是FIL%
在这里插入图片描述
再看正则表达式那边,第一个if语句里的方法,它的作用是看wildcards里有没有这个regExp,有返回true,无返回false
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
很明显没有%,应该返回false。所以会执行 this.patternWithoutWildCardChar = regExp;就说没有这个,所以这%目前加的莫名其妙。接着往下看
在这里插入图片描述
这个方法只做初始化

再看GraphWalker,第一印象感觉是用于游走DAG的,很明显是个接口
在这里插入图片描述
看到有多个startnode,和DAG相符

再看这里的FowardWalker
在这里插入图片描述
方法指向父类DefaultGraphWalker
在这里插入图片描述
类的注释说用户注册规则,然后最相符的进程的最接近的rule被激活。这里的概念很模糊(看不懂)

2

暂时没头绪,看另外一个ConstantPropagate(跳过了一个,那个实现的功能也看不懂,这个的好歹有对应)
在这里插入图片描述
这个意外地眼熟,对应的是常量折叠3种的逻辑优化(在第5篇提到),能看出它的优化形式是从根节点遍历DAG,看看它的transform方法
在这里插入图片描述
结构和PointLookUp的transform差不多(看了一下其他优化器也一样),也就是说结构大体是 创建opRules的Map->向其中放入算子,,,嗯,既然暂时不知道opRules干了啥,应该接着向下看才对,所以先返回 PointLookupOptimizer

3

在这里插入图片描述
回头看transform方法最后一段,接下来是建立一个Node的数组,添加pctx中的所有头结点,然后再用graphwalker开始walk
先看Node干什么用的
在这里插入图片描述
此接口定义了Walker和dispatchers所需的功能。由需要遍历的图的节点实现。
总之和图的遍历有关,接口的两个方法分别用于图遍历和分发器,getChildren就获得子节点,GetName得到的应该是“R1”这样的字符(猜测),然后突然意识到Operator
在这里插入图片描述
继承了Node,之前没看到,也就是说,DAG的节点的最抽象的描述就是Node

另外,pctx是ParseContext类的
在这里插入图片描述
看意思是和解析上下文与操作符树(DAG)有关,说parse context 包含DAG,所以可以认为成员变量包含DAG的节点记录
在这里插入图片描述
然后通过pctx调用的方法,找到返回的值(图中蓝色标记部分),记录了所有以TS节点开头的头结点!
除此之外,它还记录了一些特别的算子如SMBjoin,join,RS,可能是为了方便相关的优化?

所以最后一段代码的意思很明确了,就是获取所有DAG的头节点后启动walk,现在去看starkwalking方法,这是下一步的目的

可能的接下来

starkwalking方法
Rule,NodeProcessor干了啥
整理这个transform方法每一步做了什么,达到什么效果
知道这个优化器什么效果
横向查看其它优化器

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值