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








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