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.

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