关于HIVE中UNION ALL后在使用group by去重和直接只用UNION去重的效率问题

需要注意的是HIVE1.2.0版本之前只有UNION ALL不支持UNION

Hive 1.2.0之前的版本仅支持UNION ALL,其中重复的行不会被删除。
Hive 1.2.0和更高版本中,UNION的默认行为是从结果中删除重复的行。

下面是官方的使用文档:

select_statement UNION [ALL | DISTINCT] select_statement UNION [ALL | DISTINCT] select_statement …

可以看到,如果使用union去重,去重方式是使用distinct,而distinct的去重规则是两两作比较,在数据量非常大的时候这个时间会花费非常大。

从我们掌握的知识预计来说先使用union all之后在使用group by来进行去重效率会相对较高。

实际测试中:

引擎:MR

数据量:615736301+615736301+615736301条数据

语法:UNION ALL后在group by去重

结果:

Map: 184  Reduce: 55   Cumulative CPU: 26154.84 sec   HDFS Read: 14030932860 HDFS Write: 14867769647 SUCCESS
INFO  : Total MapReduce CPU Time Spent: 0 days 7 hours 15 minutes 54 seconds 840 msec
Time taken: 1669.613 seconds

耗时:1669秒

引擎:MR

数据量:615736301+615736301+615736301条数据

语法:直接UNION去重

结果:

tage-Stage-1: Map: 59  Reduce: 27   Cumulative CPU: 10746.87 sec   HDFS Read: 6853568415 HDFS Write: 36377053007 SUCCESS
INFO  : Stage-Stage-2: Map: 284  Reduce: 171   Cumulative CPU: 31357.83 sec   HDFS Read: 43556220234 HDFS Write: 16704282606 SUCCESS
INFO  : Total MapReduce CPU Time Spent: 0 days 11 hours 41 minutes 44 seconds 700 msec
Time taken: 3448.166 seconds

耗时:3448秒

以上结果显示先union all在使用group by去重效率比直接使用union高一倍。
大数据量面前 distinct去重显得太鸡肋了。

我们从细节看:
先使用union all在进行group by去重:
job num:1
Map num:184
Reduce num:55
Time taken: 1669.613 seconds

直接使用union的去重方式:
job num:2
job1_Map num:59
job1_Reduce num:27
job1_Map num:284
job1_Reduce num:171
Time taken: 3448.166 seconds

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值