MapJoin是Hive的一種優化操做,其適用於小表JOIN大表的場景,因爲表的JOIN操做是在Map端且在內存進行的,因此其並不須要啓動Reduce任務也就不須要通過shuffle階段,從而能在必定程度上節省資源提升JOIN效率優化
SELECT /*+ MAPJOIN(smalltable)*/ .key,value FROM smalltable JOIN bigtable ON smalltable.key = bigtable.key
hive.auto.convert.join
hive.mapjoin.smalltable.filesize
hive.auto.convert.join=false(關閉自動MAPJOIN轉換操做)
hive.ignore.mapjoin.hint=false(不忽略MAPJOIN標記)
select /*+MAPJOIN(smallTableTwo)*/ idOne, idTwo, value FROM ( select /*+MAPJOIN(smallTableOne)*/ idOne, idTwo, value FROM bigTable JOIN smallTableOne on (bigTable.idOne = smallTableOne.idOne) ) firstjoin JOIN smallTableTwo ON (firstjoin.idTwo = smallTableTwo.idTwo)
hive.auto.convert.join.noconditionaltask:Hive在基於輸入文件大小的前提下將普通JOIN轉換成MapJoin,並是否將多個MJ合併成一個
hive.auto.convert.join.noconditionaltask.size:多個MJ合併成一個MJ時,其表的總的大小須小於該值,同時hive.auto.convert.join.noconditionaltask必須爲true