map join 的定义:
map join 适用于一个大表和一个或多个小表执行join操作的场景。整个join过程包含map、shuffle和reduce三个阶段。通常情况下,join操作在reduce阶段执行表连接。map join操作是在map阶段执行的,大量缩短了数据传输的时间,提升了系统资源的利用率,从而起到了优化作业的作用。并且map join会将指定的小表全部加载到执行join操作的程序的内存中,从而加快join的速度。
map join 的操作限制:
-
指定的表只能是小表;
-
表被加载到内存后占用的总内存不得超过512MB;
-
最多支持指定128张小表;
map join 中 join 操作的限制:
-
left outer join 的左表必须是大表;
-
right outer join的右表必须是大表;
-
不支持full outer join;
-
inner join的左表或右表均可以是大表;
使用方法:
-
map join语句必须使用/*+ mapjoin(<table_name>) */格式才会执行;
-
引用小表或查询时,需要引用别名;
-
支持小表为子查询;
-
可以使用不等值连接或or连接多个条件。可以通过不写on语句而通过mapjoin on 1=1的形式,实现笛卡尔乘积的计算。例如 select /*+ mapjoin(a) */