Hive Join的實現原理

2021-10-09 08:05:55 字數 926 閱讀 5640

join

hive執行引擎會將hql「翻譯」成為map-reduce任務,如果多張表使用同一列做join則將被翻譯成乙個reduce,否則將被翻譯成多個map-reduce任務。

如:hive執行引擎會將hql「翻譯」成為map-reduce任務,如果多張表使用同一列做join則將被翻譯成乙個reduce,否則將被翻譯成多個map-reduce任務。

eg:select a.val, b.val, c.val from a join b on (a.key = b.key1) join c on (c.key = b.key1)將被翻譯成1個map-reduce任務

select a.val, b.val, c.val from a join b on (a.key = b.key1) join c on (c.key = b.key2)

將被翻譯成2個map-reduce任務

這個很好理解,一般來說(map side join除外),map過程負責分發資料,具體的join操作在reduce完成,因此,如果多表基於不同的列做join,則無法在一輪map-reduce任務中將所有相關資料shuffle到統一個reducer

對於多表join,hive會將前面的表快取在reducer的記憶體中,然後後面的表會流式的進入reducer和reducer記憶體中其它的表做join.

為了防止資料量過大導致oom,將資料量最大的表放到最後,或者通過「streamtable」顯示指定reducer流式讀入的表

join的實現原理

統的說,hive中的join可分為common join(reduce階段完成join)和map join(map階段完成join)。本文簡單介紹一下兩種join的原理和機制。

common join

select u.name, o.orderid from order o join user u on o.uid = u.uid;

Hive JOIN實現過程

準備資料 語句 select a.uid,a.name,b.age from logs a join users b on a.uid b.uid 我們希望的結果是把users表join進來獲取age欄位。hive select from logs oka蘋果5 a橙子3 b燒雞1 hive sel...

Hive join中的模糊匹配(locate)

hive不支援非等值連線,但可以通過locate 函式進行功能轉換。locate string substr,string str int pos 查詢字串str中的pos位置後字串substr第一次出現的位置,若為找到,則返回0。hive select locate a abcd locate b...

實現原理 Vuex的實現原理

你知道vuex如何工作的嗎?先來看下圖了解下 了解圖之後看來下 的實現原理吧 let vue class store this.mutations this.actions this.vm new vue const options if getters if mutations if action...