山大软工实践hive(14)-总结

2021SC@SDUSC

山大软工实践hive(14)-总结

回顾一下,虽然我前面几篇都去看别人的解析,看算法思想,没有解析源码,但这一部分是十分必要的,如果我不知道输入的OPTree是个什么结构,不知道优化器的一些优化思想,哪怕我从一开始直接搜索Optimizer找到了优化器,也会全程不知道该干什么。而如果我从总体流程上寻找逻辑优化从哪里开始,是更困难的。
而导致我一开始这么困难的原因是任务分工,小组人员彼此不能看同一部分,而hive恰恰是hql解析占大头,所以只能按照流程图一人拿一个流程,除了第一部分的输入很明确:hql,其他的输入以及从哪里开始都很模糊,特别是会涉及到数据结构,总得知道它用来干什么吧。而且相关的资料少,源码的注释在设计到算法思想时也很少能直观的get到表达的点。
说实话,读源码的确有益,因为能够知道别人怎么构建项目,能增强自己读代码的能力,但说实话,一方面这不符合这课原本的宣传:学习技术;另一方面,如果代码足够折磨人,反而干耗时间,效率很低。

话说回来,总结一下逻辑优化这部分的操作

  1. 输入是OPTree,比起说是Tree不如说是有向无环图DAG,简单的DAG会长这样:TS->FIL->SEL->FS,即 表读取->where->select->输出,逻辑优化是优化DAG结构以及储存的语句,来提高效率
  2. 当上一个流程把OPTree构建好后,会使用Optimizer的initialize方法,把满足条件的优化器加入列表,再用optimize方法依次调用优化器
  3. 单个优化器的操作流程是:定下自己的规则,用自己的walker在DAG上走,按特定顺序对节点一个一个dispatch,即对节点判断是否满足某条规则,找到最小cost的规则,调用相应的processor,对节点的谓语甚至结构进行改动。也有一些优化器不是这个流程,不过我就没看了
  4. 所有优化器优化完后结束这部分,输出也是DAG

顺便把第13篇博客的表复制过来

序号做了什么对应博客
1源码环境搭建博客1
2算法的数据结构博客2
3数据结构的详细原理博客3-4
4一些优化涉及的思想原理博客5-6
5逻辑优化的大体流程博客5后半部分
6详细的调用细节博客7-11
7逻辑优化过程的结构分析博客12
8逻辑优化在总体流程上的位置博客13

软工实践就到此完结了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值