mapjoin的使用方法以及注意事项
mapjoin的简介
MAPJION会把小表全部加载到内存中,在map阶段直接拿另外一个表的数据和内存中表数据做匹配,由于在map端是进行了join操作,省去了reduce运行的时间,算是hive中的一种优化
mapjoin的使用方法
例如:
select /*+ mapjoin(t)*/ f.a,f.b from A f join B t on f.a=t.a
前提b表是一张小表,默认25m的表是小表
注意事项
使用mapjoin时,一次性加载到内存中的表最多是8张,如果超过8张小表,应该嵌套一层子循环,将多余的表在外层中写入mapjion里面,代码实现如下:
select /*+ mapjoin(b1,b2)*/
b.*
from
(
select /*+ mapjoin(a1,a2,a3,a4,a5,a6,a7,a8)*/
a.*
from a
join a1 on a.id1=a1.id1
join a2 on a.id2=a2.id2
join a3 on a.id3=a3.id3
join a4 on a.id4=a4.id4
join a5 on a.id5=a5.id5
join a6 on a.id6=a6.id6
join a7 on a.id7=a7.id7
join a8 on a.id8=a8.id8) b
join b1 on b.id11=b1.id11
join b2 on b.id11=b2.id12
其中a1,a2,a3,a4,a5,a6,a7,a8,b1,b2为小表