Hive旺旺讨论(关于mapjoin)

 

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):

对的

你可能感兴趣的:(Hive旺旺讨论(关于mapjoin))