作为数据仓库的利器,大部分的数仓工作者大部分时间都在写Hive Sql,根据作者经验整理出单纯的Hive Sql调优。
一. 普通场景下的sql优化
1. 列裁剪
由于数仓底层存储大都采用列式存储,如ORC/PARQUET,所以可以采用列裁剪的方式减少扫描的字段。
2. 分区裁剪
即查询数据表时增加分区的条件,数仓通常是集团级的数据存储,数据量非常大,所以大多都采用分区,加速数据统计效率,所以分区裁剪必不可少。
3. 利用hive的优化机制减少job
不论是outer join还是inner join,如果join的key相同,不管有多少表都会合为一个Mapreduce。
4. job输入输出优化
善用multi-insert、union all,不同表的union all相当于multi-insert,相同表的union all则是map一次输出多条。
insert overwrite table tmp select from a where condition1;
insert overwrite table tmp select from a where condition2;
from a
insert overwrite table tmp select where condition1
insert overwrite table tmp select where condition2;
5. 数据过滤
在join之前过滤掉不需要的数据
select t1.dim1,t1.measure1,t