在利用sql对数据进行累全量时,通常我们会使用两种方式:
方式一:(全量表 - 增量表) | 增量表
使用left join,t-2全量差集t-1增量数据,再union all增量数据(t-1),得到t-1的全量数据
方式二:使用union all + groupby 改写
相关计算耗时测试如下(hive引擎):
区别:
- left join方式,使用了两段MR,而groupby方式只有一段MR
- groupby方式每max一个字段都是在增加cpu开销,而left join实现方式不存在该问题
如果除了分组字段(唯一),其他字段1-3个,数据量不大,建议使用groupby方式;其他建议使用left join做差集再合并实现;
当数据量map端聚合没有什么效果时,应关闭该参数:set hive.map.aggr=false