持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第11天,点击查看活动详情
作为本身就是服务于大数据开发的hive语言,在性能上对其肯定也是有所要求的,前面已经介绍了那么多的hive的函数应用,那么本文就来介绍一下hive性能优化的一些做法。
首先最最最简单基础的hive优化方式就是禁止全字段查询和没有分区的查询,这个在很多公司都会做要求的,俗称列裁剪和分区裁剪,如果你使用 select * from table_a ;并且不带分区字段,那就很不专业了,这样的写法无异于全表筛查,效率极低。
所以最好的方式就是直接查询需要的列字段名称,并且一定要加上分区字段筛查哦。
select name,id,age from student_table where pt_table='202202031100000000'
不要在表连接查询里面进行过多的数据条件查询,这样也会增加查询的负担,建议这种情况可以使用临时表进行查询。
多使用group by,不要再使用distinct啦。
尤其是在数据量非常大的时候,一定慎用distinct做数据去重复,会造成数据倾斜的问题。因为在count(distinct a)的逻辑中很少用到reducer处理,这时候最好都改用group by来进行数据去重复。当然这样的做法也不是绝对的,还是要视实际情况而定,比如在数据量没有很大,或者key的倾斜比较多的时候,也可以直接使用distinct会比group by的效率来的更高些。
使用join的时候一些优化措施:
hive当中用到比较频繁的就是join了吧,一般在一张主表后面跟join一些小表数据,主表一般会是这里面数据量和字段最多的,所以不能跟后面的小表顺序调换了,否则影响产出表的数据量,并且性能方面也是会收到影响。
最后一点是在生产数据时,肯定会有一些无意义或者为空的数据,这些数据都应该过滤出来,就比如null,deleted=1,' ',或者为默认值的数据,不要参与查询,以免无谓的消耗性能。