山大软工实践hive(5)-逻辑优化(1)

本文详细介绍了Hive的逻辑优化过程,包括谓词下推、常量折叠、RS算子合并、Join顺序优化、Select优化等策略,旨在减少时间、内存开销。例如,谓词下推能提前过滤数据,Join顺序优化则将大表置于最后以降低内存需求。此外,还探讨了如何通过sortby和groupby避免单个reducer处理所有数据,提高执行效率。Hive的逻辑优化涉及到多个类和方法,如Optimizer和LogicalPlanOptimizer,通过源码分析可进一步理解其实现机制。

2021SC@SDUSC

山大软工实践hive(5)-逻辑优化(1)

逻辑优化,顾名思义,就是通过调整语句的执行顺序,或者优化语句,减少时间、内存上的开销。许多思路与普通数据库的查询优化一样。根据这一阶段输入输出都是DAG,可以认为是用过调整DAG的结构达到目的。

几种方式

参考他人博客有以下几种方式

谓词下推

让选择运算优先执行,比如 select 1 from a join b on a.id=b.id where a.id=5 and b.id>10,会优先执行a.id=5与b.id>10,然后再进行join操作,因为join操作的时间复杂度是O(nlogn)的,选择运算为O(n),有理由减少JOIN的输入数据量。比如下图把过滤操作提前,让JOIN可以处理更少的数据,用更少的空间

常量折叠

在涉及常量的运算上简化
1.如果表达式全为常量,就可把结果先算出来替代表达式
2.and or运算的逻辑短路
3.表达式中的常量传递。如a=1,b=a,c=b,即可直接给b,c赋值为1

1,3和代码编译成汇编语言一个思路,把可以替代的替代了;2是在hql中的and or实现逻辑短路,是必须实现的

合并RS算子

DAG上同一路径上的符合条件的两个RS算子合并成一个
要同时满足排序,分组,升降序上,key元素组的包含关系(如a,b,c 包含a,b 不包含 a,d)然后
1.排序上合并为要求更精密的一个。比如算子分别以(a,b),(a)排序,则路径上前面的算子以(a,b)排序,后面的算子删除
2.分组上合并为要求更模糊的。比如以(a,b),(a)分组,则路径上前面

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值