您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“Hive中Join方式有哪些”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“Hive中Join方式有哪些”這篇文章吧。
Reduce Join在Hive中也叫Common Join或Shuffle Join
如果兩邊數(shù)據(jù)量都很大,它會進行把相同key的value合在一起,正好符合我們在sql中的join,然后再去組合,如圖所示。
1) 大小表連接:
如果一張表的數(shù)據(jù)很大,另外一張表很少(<1000行),那么我們可以將數(shù)據(jù)量少的那張表放到內(nèi)存里面,在map端做join。
Hive支持Map Join,用法如下
select /*+ MAPJOIN(time_dim) */ count(1) from store_sales join time_dim on (ss_sold_time_sk = t_time_sk)
3) MAPJOIN 結(jié)合 UNIONALL
原始sql:
select a.*,coalesce(c.categoryid,’NA’) as app_category from (select * from t_aa_pvid_ctr_hour_js_mes1 ) a left outer join (select * fromt_qd_cmfu_book_info_mes ) c on a.app_id=c.book_id;
數(shù)據(jù)分布如下:
NA 617370129 2 118293314 1 40673814 d 20151236 b 1846306 s 1124246 5 675240 8 642231 6 611104 t 596973 4 579473 3 489516 7 475999 9 373395 107580 10508
設(shè)置:
當(dāng)然也可以讓hive自動識別,把join變成合適的Map Join如下所示
注:當(dāng)設(shè)置為true的時候,hive會自動獲取兩張表的數(shù)據(jù),判定哪個是小表,然后放在內(nèi)存中
set hive.auto.convert.join=true; select count(*) from store_sales join time_dim on (ss_sold_time_sk = t_time_sk)
場景:
大表對小表應(yīng)該使用MapJoin,但是如果是大表對大表,如果進行shuffle,那就要人命了啊,第一個慢不用說,第二個容易出異常,既然是兩個表進行join,肯定有相同的字段吧。
tb_a - 5億(按排序分成五份,每份1億放在指定的數(shù)值范圍內(nèi),類似于分區(qū)表)
a_id
100001 ~ 110000 - bucket-01-a -1億
110001 ~ 120000
120001 ~ 130000
130001 ~ 140000
140001 ~ 150000
tb_b - 5億(同上,同一個桶只能和對應(yīng)的桶內(nèi)數(shù)據(jù)做join)
b_id
100001 ~ 110000 - bucket-01-b -1億
110001 ~ 120000
120001 ~ 130000
130001 ~ 140000
140001 ~ 150000
注:實際生產(chǎn)環(huán)境中,一天的數(shù)據(jù)可能有50G(舉例子可以把數(shù)據(jù)弄大點,比如說10億分成1000個bucket)。
原理:
在運行SMB Join的時候會重新創(chuàng)建兩張表,當(dāng)然這是在后臺默認做的,不需要用戶主動去創(chuàng)建,如下所示:
設(shè)置(默認是false):
set hive.auto.convert.sortmerge.join=true set hive.optimize.bucketmapjoin=true; set hive.optimize.bucketmapjoin.sortedmerge=true;
以上是“Hive中Join方式有哪些”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。