select
t2.a,
t2.b
from
table t1 join table2 t2
on ( t1.a=t2.a and t2.dt=20180802)
该语句中B表有30亿行记录,t1表只有100行记录,而且t2表中数据倾斜特别严重,有一个key上有15亿行记录,在运行过程中特别的慢,而且在reduece的过程中遇有内存不够而报错。
MAPJION会把小表全部读入内存中,在map阶段直接拿另外一个表的数据和内存中表数据做匹配,而普通的equality join则是类似于mapreduce模型中的file join,需要先分组,然后再reduce端进行连接,使用的时候需要结合着场景;由于mapjoin是在map是进行了join操作,省去了reduce的运行,效率也会高很多
select
/*+ mapjoin(t1)*/ t2.a,
t2.b
from
table t1 join table2 t2
on ( t1.a=t2.a and t2.dt=20180802)
hive mapjoin:(使用场景)
1. 关联操作中有一张表非常小
2.不等值的链接操作