2021SC@SDUSC
山大软工实践hive(14)-总结
回顾一下,虽然我前面几篇都去看别人的解析,看算法思想,没有解析源码,但这一部分是十分必要的,如果我不知道输入的OPTree是个什么结构,不知道优化器的一些优化思想,哪怕我从一开始直接搜索Optimizer找到了优化器,也会全程不知道该干什么。而如果我从总体流程上寻找逻辑优化从哪里开始,是更困难的。
而导致我一开始这么困难的原因是任务分工,小组人员彼此不能看同一部分,而hive恰恰是hql解析占大头,所以只能按照流程图一人拿一个流程,除了第一部分的输入很明确:hql,其他的输入以及从哪里开始都很模糊,特别是会涉及到数据结构,总得知道它用来干什么吧。而且相关的资料少,源码的注释在设计到算法思想时也很少能直观的get到表达的点。
说实话,读源码的确有益,因为能够知道别人怎么构建项目,能增强自己读代码的能力,但说实话,一方面这不符合这课原本的宣传:学习技术;另一方面,如果代码足够折磨人,反而干耗时间,效率很低。
话说回来,总结一下逻辑优化这部分的操作
- 输入是OPTree,比起说是Tree不如说是有向无环图DAG,简单的DAG会长这样:TS->FIL->SEL->FS,即 表读取->where->select->输出,逻辑优化是优化DAG结构以及储存的语句,来提高效率
- 当上一个流程把OPTree构建好后,会使用Optimizer的initialize方法,把满足条件的优化器加入列表,再用optimize方法依次调用优化器
- 单个优化器的操作流程是:定下自己的规则,用自己的walker在DAG上走,按特定顺序对节点一个一个dispatch,即对节点判断是否满足某条规则,找到最小cost的规则,调用相应的processor,对节点的谓语甚至结构进行改动。也有一些优化器不是这个流程,不过我就没看了
- 所有优化器优化完后结束这部分,输出也是DAG
顺便把第13篇博客的表复制过来
序号 | 做了什么 | 对应博客 |
---|---|---|
1 | 源码环境搭建 | 博客1 |
2 | 算法的数据结构 | 博客2 |
3 | 数据结构的详细原理 | 博客3-4 |
4 | 一些优化涉及的思想原理 | 博客5-6 |
5 | 逻辑优化的大体流程 | 博客5后半部分 |
6 | 详细的调用细节 | 博客7-11 |
7 | 逻辑优化过程的结构分析 | 博客12 |
8 | 逻辑优化在总体流程上的位置 | 博客13 |
软工实践就到此完结了