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
    1
    前提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为小表
    ————————————————

    原文链接:https://blog.csdn.net/zixoa/article/details/108508959