对于join操作,需要shuffle,在reduce端进行。所以对于数据量超大,比如两个表记录条数均在亿级别的,往往会导致计算时间过长。(在reduce 关联时 两个表的key也是需要通过增加标识区别的)
那如何可以高效的完成呢?也就是如果我们把标识去掉,就是两个表成为一个大表,中间会少些耗时的逻辑,那这个样也就是一个简单的groupby了。效果会如何呢?
具体做法:
select
uid,
COALESCE(a,null) as a,
COALESCE(b,null) as b
from(
select uid, a,null as b from table1 -- uid 唯一
union all
select uid , null as a,b from table2 -- uid 唯一
)t group by uid
效果将会提升10倍以上。