Hive sql优化

hive sql 运行太慢,如何优化?

经验不丰富的数据分析或者BI工程师往往上来就看sql,调整sql内容,其实不然。

一.业务层面

first of all, 优先了解sql反应的业务,先把业务梳理清晰,去除掉不必要的表,关联。

这个只能泛泛而谈,但确是sql优化应该最先考虑的。在有一定业务经验后,根据实际情况进行优化。

 

二.每张数据表的性能

1.数据表的存储格式,存储硬盘(ssd or普通盘) 

数据表的存储格式可参考https://blog.csdn.net/sinat_17697111/article/details/81907185

目前主流的存储格式orc (列式) 和sequence(行式)。原则上orc在存储,查询性能上会更好。

如果使用数据表时大多数都是select *,sequence可能会比orc格式好。

存储硬盘,如果条件允许,ssd固态硬盘肯定会比普通硬盘好。

 

2.数据量过大的表,是否分区,分桶

超过千万,上亿的数据量的表,而在使用时大部分只会用到其中一小部分数据,则需要考虑对该表做分区了。退一步,如果不想做分区,只是想在做join时提高性能,分桶也是不错的选择,分桶可以简单理解为和分区效果相同,但更方便的一种方法。分桶的原理和示例可参考https://blog.csdn.net/u010003835/article/details/80911215

 

三.sql结构

1.子查询可否抽离

2.join太多表,一半来说,一个sql的join表个数不宜超过三到四个,太多的join

考虑拆解成多段sql

3.where条件尽量靠近主表

 

四.常见sql层面优化

1.Inner join 小表在前,大表在后

2.两张表之间的关联字段,不要有数据分布不均。

例如:select  from table a left join  table b  on   a.id=b.id,

如果a.id90%都是0,10%是其他值,则会存在数据倾斜,需要打散处理。具体参考https://blog.csdn.net/sinat_17697111/article/details/83793663

3.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章