一.普通场景hivesql优化
1. 列裁剪
由于数仓底层存储大都采用列式存储,如ORC/PARQUET,所以可以采用列裁剪的方式减少扫描的字段。
2. 分区裁剪
即查询数据表时增加分区的条件,数仓通常是集团级的数据存储,数据量非常大,所以大多都采用分区,加速数据统计效率,所以分区裁剪必不可少
越早过滤越好where -- 减少下游处理的数据量
数据过滤
让关联的2张表数据变少
select t1.dim1,t1.measure1,t2.measure2 from (select dim1,measure1 from a where dt = '2019-01-01') t1 join (select dim1,measure2 from b where dt = '2019-01-01') t2 on t1.dim1 = t2.dim1
去重优化
一般禁止用distinct去重,除非数据量小到单台服务器可做去重无压力的情况下可使用。大表场景下可采用group by 去重
sort by代替order by
order by将结果按某字段全局排序,这会导致所有map端数据都进入一个reducer中
ort by,那么还是会视情况启动多个reducer进行排序,并且保证每个reducer内局部有序,
为了控制map端数据分配到