2021SC@SDUSC
山大软工实践hive(13)-查看逻辑优化在总体流程上的位置
Optimizer进行优化时是调用的optimize()方法,这次通过这个去看该方法在整体流程上的位置
另外提一下,网上搜的生成任务过程中,数据结构生成的流程是 HQL->AST->QB->OP Tree->OP Tree(逻辑优化后)->Task Tree->Task Tree
在SemanticAnalyzer里
查找optimize()方法的调用,在SemanticAnalyzer里
12292-12295行展示了逻辑优化的流程–创建Optimizer对象,设置pctx,进行initialize方法(产生优化器的list),然后调用optimize()方法
这个方法最上面,可以看到AST Tree与QueryBlock已经生成
向下,看到了pctx 的初始化
再向下,可以看到有两个优化器(也可以称为转化器,毕竟都继承的transform类)满足条件会直接先进行优化
接着可以看到对QueryBlock的调用
再向下就是逻辑优化
就在这之后,逻辑优化结束
接着向下,越过我进入此方法的地方,看到了QueryPlan与Task,根据我最初看的流程图,这一部分应该是物理优化部分,涉及到TaskTree
找到Driver
这个方法看完,然后去看它在哪里被调用
先在这个类下找到一个调用
再找调用,到BaseSemanticAnalyzer类
再找调用,去Driver里看看
在compile方法里
问了负责第一部分的同学,他说这个方法就是他涉及的内容。command就是输入的字符串
他涉及的部分到生成AST Tree结束,也就是这里
后面就是这个,包含了QB,OP Tree, Task Tree的处理
至此确定了逻辑优化在总体流程上的位置
结语
这13篇博客按顺序接触了下面部分
序号 | 做了什么 | 对应博客 |
---|---|---|
1 | 算法的数据结构 | 博客2 |
2 | 数据结构的详细原理 | 博客3-4 |
3 | 一些优化涉及的思想原理 | 博客5-6 |
4 | 逻辑优化的大体流程 | 博客5后半部分 |
5 | 详细的调用细节 | 博客7-11 |
6 | 逻辑优化过程的结构分析 | 博客12 |
7 | 逻辑优化在总体流程上的位置 | 博客13 |
描述地不一定准确,但是这部分该看的已经看过了
如果还有下一篇,那估计就是随便看看其他的,或者是结语Plus版本