hive sql簡單優化方案

2021-10-03 08:00:27 字數 2133 閱讀 4161

這裡的優化方面只在sql【spark】層面,對於引數的調整,這裡不做介紹。

① 盡量使用分割槽表操作。

② 利用桶表優化

③ 選擇合適的檔案儲存格式

儘量減少每個階段的資料量,對於分割槽表能用上分割槽欄位的盡量使用,同時只選擇後面需要使用到的列,最大限度的減少參與join的資料量。

除了需要必須表裡所有的字段,否則禁止使用select *

小表join大表的時候應遵守小表join大表原則,原因是join操作的reduce階段,位於join左邊的表內容會被優先載入進記憶體,將條目少的表放在左邊,可以有效減少發生記憶體溢位的機率,join中執行順序是從左到右生成job,應該保證連續插敘中的表的大小從做到右依次增加。

盡量避免乙個sql包含複雜的邏輯,可以使用中間表來完成複雜的邏輯。

order by只能在乙個reduce程序中進行,所以如果對乙個大資料集進行order by,會導致乙個reduce程序中處理的資料相當大,造成查詢執行緩慢。

推薦:在最終結果上進行 order by ,不要在中間的大資料集上進行排序。如果最終結 果較少,可以在乙個reduce上進行排序時,那麼就在最後的結果集上進行 order by。

如果是去排序後的前n條資料,可以使用 distribute by 和 sort by 在各個 reduce上進行排序後前n條,然後再對各個reduce的結果集合合併後在乙個 reduce中全域性排序,再取前n條,因為參與全域性排序的 order by 的資料量最多 是 reduce個數 * n ,所以執行效率很高。

‐‐ 優化前(只有乙個reduce,先去重再count負擔比較大): 

select

count

(distinct id)

from tablename;

‐‐ 優化後(啟動兩個job,乙個job負責子查詢(可以有多個reduce),另乙個job負責 count(1

)):select

count(1

)from

(select

distinct id from tablename) tmp;

如邏輯允許,盡量使用join的方式,不要使用left join【外連線會導致謂詞下推失效】,

以下兩種方式會讓謂詞下推生效

1、

select a.id,a.value1,b.value2 from table1 a

join

(select b.value2,b.id from table2 b where b.dt>=

'2018-12-01'

and b.dt<

'2019-01-01'

) con

(a.id=b.id)

2、

select a.id,a.value1,b.value2 from table1 a

join table2 b on a.id=b.id

where b.dt>=

'2018-12-01'

and b.dt<

'2019-01-01'

但相對來說,更推薦第一種方式,存在優先過濾資料,並使謂詞下推生效。

謂詞下推:

hive謂詞下推(predicate pushdown)

關係型資料庫借鑑而來,關係型資料中謂詞下推到外部資料庫用以減少資料傳輸

基本思想:盡可能早的處理表示式

屬於邏輯優化,優化器將謂詞過濾下推到資料來源,使物理執行跳過無關資料

引數開啟設定:hive.

optimize

.ppd=

true

我們在join的過程中經常會出現資料傾斜的情況發生,例如null值資料過多,全部聚集到一端執行,會嚴重影響效率,所以這裡針對sql:

建議如果出現資料傾斜,可選擇hash方式將資料打散。

select id,merchant_id from trade_order distribute by id %

100

實際測試過程中,執行時間能提公升50%

建議使用 with table_name as ,原因:with會將這張表提前快取到記憶體中,防止多次讀取,全表掃瞄操作。

hive sql優化整理

hive sql優化方法引數一些整理,方便快速查詢使用 1.map數量與reduce數量的控制 輸入檔案大小指實際檔案大小,與檔案格式textfile,orc等無關,壓縮的檔案格式會小很多設定引數要適當調整 map數量控制 set hive.input.format org.apache.hadoo...

hivesql 效率優化

1.group by 資料傾斜問題 hive是根據group by 的key進行資料分發的,某個key相同的資料太多的會被分發到乙個reducer上,key的資料分布不均勻會導致大量資料被shuffle到某個或者某些reducer上,出現嚴重的資料傾斜,使得資料計算變慢 配置任務引數 set hiv...

HIVESQL優化方法

這是我2年前總結的東西,當時是用華為paas平台的大資料集群的時候,因為我們公司分配的資源較少,自己總結的部分優化方法,如有不足,望大家指正 1 set hive.map.aggr true false 當使用聚合函式時會在ma階段進行聚合 效率更高同時消耗更多資源 2 當join表的時候有乙個大表...