0- 描述
Hive的优化主要分为:配置优化、SQL语句优化、任务优化等方案。其中在开发过程中主要涉及到的可能是SQL优化这块。
优化的核心思想是:
- 减少数据量(例如分区、列剪裁)
- 避免数据倾斜(例如加参数、Key打散)
- 避免全表扫描(例如on添加加上分区等)
- 减少job数(例如相同的on条件的join放在一起作为一个任务)
1- HQL语句优化
1.1- 使用分区剪裁、列剪裁
在分区剪裁中,当使用外关联时,如果将副表的过滤条件写在Where后面,那么就会先全表关联,之后再过滤。
select
a.*
from a
left join b on a.uid = b.uid
where
a.ds='2020-08-10'
and b.ds='2020-08-10'
上面这个SQL主要犯了两个错误:
- 副表(上方b表)的where条件写在join后面,会导致先全表关联在过滤分区。
- on的条件没有过滤null值的情况,如果两个数据表存在大批量null值的情况,会造成数据倾斜。
正确写法:
其一:
select
a.*
from a
left join b on (a.uid is not null and a.uid = b.uid and b.ds='2020-08-10')
where a.ds='2020-08-10'
如果null值也是需要的,那么需要在条件上转换,或者单独拿出来
select a.*
from a
left join b on (a.uid is not null and a

本文深入探讨了Hive SQL优化技巧,包括使用分区剪裁和列剪裁减少数据量,避免使用COUNTDISTINCT以降低计算复杂性,利用withas子查询提升效率,以及处理大小表join和数据倾斜问题。通过实例解析,展示了如何通过调整SQL语句和设置参数来优化Hive查询性能。
最低0.47元/天 解锁文章
829

被折叠的 条评论
为什么被折叠?



