巧用Hive自带函数进行多字段分别去重计数统计

本文介绍了如何利用Hive的group by和collect_set函数进行多字段去重计数统计,避免数据倾斜问题。在面对大量数据时,传统的distinct操作可能导致效率低下,而通过group by与collect_set的组合,可以提高统计效率,特别是在需要对多个字段进行去重计数的场景下。同时,文章提醒注意,当去重后的结果数量较大时,仍可能引发数据倾斜。
摘要由CSDN通过智能技术生成

巧用Hive自带函数进行多字段分别去重计数统计

1-group by 和 distinct

大前提:大表统计能使用group by就不要使用distinct!!

尤其是在数据量非常大的时候,distinct会将所有的统计信息加载到一个reducer里取执行,这就是所谓的数据倾斜。而group by会把相同key的记录放到一个reducer区计算,因此效率会提高很多。

业务需要对一个分区内一百亿记录进行多个字段的去重统计。本着以上原则写出了以下代码:

SET hive.map.aggr=TRUE;
SET hive.optimize.skewjoin = TRUE;
SET hive.groupby.skewindata=TRUE;
SET mapreduce.input.fileinputformat.split.minsize=256000000;
SET mapreduce.input.fileinputformat.split.maxsize=512000000;
SET mapreduce.input.fileinputformat.split.minsize.per.node=512000000;
SET mapreduce.input.fileinputformat.split.minsize.per.rack=512000000
  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值