shaomn (2013-08-01 13:39:06):
select/*+ mapjoin(a)*/ a.* from sma a left outer join smb b on a.k=b.k;
FAILED: Error in semantic analysis: MAPJOIN cannot be performed with OUTER JOIN
select/*+ mapjoin(b)*/ a.* from sma a left outer join smb b on a.k=b.k;
Total MapReduce jobs = 1
Execution log at: /tmp/dwapp/dwapp_20130801133737_5696fa81-3104-450d-a4f5-fb5358bdda46.log
从表就可以
主表mapjoin不行
求教原理
卓荦 (2013-08-01 13:40:41):
右表可以左表不行
因为left outer join 至少会包含左表所有结果
shaomn (2013-08-01 13:42:04):
包含左表所有结果, 是不是说主表如果做了mapjoin,数据就会翻翻
卓荦 (2013-08-01 13:42:33):
所以只能是分发左表,遍历左表在右查,不能反过来
切分左表,分发右表
所以只能是切分左表,分发右表,遍历左表在右查,不能反过来
所以一般情况下,left outer join 用于 事实 join 维度,左表全是大表,事实表
shaomn (2013-08-01 13:44:12):
学些了
学习了
劢熙 (2013-08-01 14:04:53):
jion左表是 小表吧,
李元 (2013-08-01 14:05:25):
荦爷威武
卓荦 (2013-08-01 14:07:38):
@劢熙 left join,右表小
劢熙 (2013-08-01 14:12:28):
荦爷 outer join 右表小, inner join 左表小?
卓荦 (2013-08-01 14:18:01):
reduce join的情况下,reduce端,按key分发后,左边n-1个表会在内存里,遍历第n个表,在内存 中匹配,这时,左表越均匀(越小)越好
map join不一样,小表直接全进内存,所以是右表小好些
刚才我们讨论的是left join在map join的情况,也就是第二种
玄木 (2013-08-01 16:37:12):
荦爷, 也就是说 map join 对于 left outer join 需要 右表小, 而对于reduce join 则是 最右边的表最大. 对不 ?
卓荦 (2013-08-01 16:39:29):
对的