1.MapJoin
mapJoin的主要意思就是,當(dāng)連接的兩個表是一個比較小的表和一個特別大的表的時候,把比較小的table直接放到內(nèi)存中去,然后再對比較大的表格進行map操作。map端join的優(yōu)勢就是在于沒有shuffle。而且在hive1.2.0之后只需設(shè)置
set hive.auto.convert.join=true;
set hive.mapjoin.smalltable.filesize=300000000; ?
????hive就會自動的識別比較小且小于下面閾值的表,繼而用mapJoin來實現(xiàn)兩個表的聯(lián)合。
2.Common Join
common join也叫做shuffle join,reduce join操作。這種情況下兩個table的大小相當(dāng),但是又不是很大的情況下使用的。具體流程就是在map端進行數(shù)據(jù)的切分,一個block對應(yīng)一個map操作,然后進行shuffle操作,把對應(yīng)的block shuffle到reduce端去,再逐個進行聯(lián)合。
3.SMB Join
smb是指sort merge bucket操作,首先進行排序,繼而合并,然后放到所對應(yīng)的bucket中去,bucket是hive中和分區(qū)表類似的技術(shù),就是按照key進行hash,相同的hash值都放到相同的bucket中去。首先進行分桶,再join會大幅度提升性能。在聯(lián)合的時候,是table1中的一小部分和table1中的一小部分進行聯(lián)合,table聯(lián)合都是等值連接,相同的key都放到了同一個bucket中去了,那么在聯(lián)合的時候就會大幅度的減小無關(guān)項的掃描。








暫無數(shù)據(jù)