Hive之Grouping Sets函数

本文介绍了Hive中的GroupingSets函数,用于高效处理多维度聚合分析,避免多次UNIONALL操作。通过一个具体的建表和数据插入例子,展示了如何使用GROUPINGSETS进行分组,并解释了其结果中NULL作为占位符的含义。同时,针对大量GROUPINGSETS的情况,提出了设置`hive.new.job.grouping.set.cardinality`以优化执行效率。
摘要由CSDN通过智能技术生成

Hive之Grouping Sets函数

对于经常需要对数据进行多维度的聚合分析的场景,您既需要对a列做聚合,也要对b列做聚合,同时要按照a、b两列同时做聚合,因此需要多次使用UNION ALL。使用GROUPING SETS可以快速解决此类问题。并且能优化stage的个数,提高执行效率。

1.建表

create table test
(id string,
 os string,
 device string,
 city string);

2.准备数据

insert into test values
    (1, 'windows', 'PC', 'Beijing'),
    (2, 'windows', 'PC', 'Shijiazhuang'),
    (3, 'linux', 'Phone', 'Beijing'),
    (4, 'windows', 'PC', 'Beijing'),
    (5, 'ios', 'Phone', 'Shijiazhuang'),
    (6, 'linux', 'PC', 'Beijing'),
    (7, 'windows', 'Phone', 'Shijiazhuang')
;

3.使用GROUPING SETS进行分组

SELECT os,device, city ,COUNT(*)
FROM test
GROUP BY os, device, city GROUPING SETS((os, device), (city), ());

展示结果:

说明:分组集中不使用的表达式,会使用NULL充当占位符,使得这些结果集可以做UNION操作。例如结果第1-5行的city列

 

注:

hive中grouping sets 数量较多时如何处理? 

可以使用如下设置来

set hive.new.job.grouping.set.cardinality = 30;

这条设置的意义在于告知解释器,group by之前,每条数据复制量在30份以内。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值