初次 Hive sql 的join調優

2021-09-22 08:36:57 字數 688 閱讀 2174

業務需要,要在hive裡把兩個表關聯起來,所以需要用到join語句,然後第一次隨手寫了join,直接跑。。然後跑了6個小時沒跑完,被管理員取消了。。於是想辦法改進

首先想的是不直接join兩個表的所有屬性,而是分別找到各自需要的屬性,用各自的where條件限制,用子巢狀語句完成,最後在group by一下。

試著跑了一下,跑了很久很久。。。。。無法忍耐!還要再想辦法

檢視一下表1裡乙個分割槽的資訊(有四個字段劃分分割槽)

58億條!!並且有42列!!怪不得跑不動!!

表2:

5萬多條,相比之下非常非常小。

很顯然資料傾斜非常嚴重,去找解決方法,大表join小表,很容易想到使用map join,在map端先做join,可以大大減輕reduce端的壓力。

set hive.auto.convert.join=true;
設定使用map join ,再跑一次

十幾分鐘結束!

Hive SQL調優方法總結

使用分割槽剪裁 列剪裁 hive common join 如果不主動指定 mapjoin 或者不符合 mapjoin 的條件,hive 解析器預設的 join 操作就是 common join,即在 reduce 階段完成 join。過程如下 hive map join mapjoin 通常用於乙個...

效能調優7 多表連線 join

在產品環境中,往往存在著大量的表連線情景,不管是inner join outer join cross join和full join 邏輯連線符號 在內部都會轉化為物理連線 physical join sql server共有三種物理連線 nested loop 巢狀迴圈 merge join 合併...

MySQL的JOIN(二) JOIN原理

nested loop join nlj 演算法 首先介紹一種基礎演算法 nlj,巢狀迴圈演算法。迴圈外層是驅動表,循壞內層是被驅動表。驅動表會驅動被驅動表進行連線操作。首先驅動表找到第一條記錄,然後從頭掃瞄被驅動表,逐一查詢與驅動表第一條記錄匹配的記錄然後連線起來形成結果表中的一條記。被驅動表查詢...