Hive聚合函数:Grouping set、Cube、Rollup

1、环境准备

首先,在hive上新建一张user_log的表,表示用户在某个时间点进行访问

use demo;
create table demo.user_log(
    month string, 
    day string, 
    userid string
);

准备数据如下,将其保存为user_log.txt

2015-03,2015-03-10,1
2015-03,2015-03-10,5
2015-03,2015-03-12,7
2015-04,2015-04-12,3
2015-04,2015-04-13,2
2015-04,2015-04-13,4
2015-04,2015-04-16,4
2015-03,2015-03-10,2
2015-03,2015-03-10,3
2015-04,2015-04-12,5
2015-04,2015-04-13,6
2015-04,2015-04-15,3
2015-04,2015-04-15,2
2015-04,2015-04-16,1

hive中加载数据

load data local inpath '/data/user_log.txt' into table demo.t_user;

2、需求

分别按照(month)、(day)、月和天(month,day)统计来访用户userid个数,并获取三者的结果集

2.1、使用union all的方式

-- 按月
select month,
       null,
       count(userid)
from demo.user_log
group by month

union all
-- 按天
select null,
       day,
       count(userid)
from demo.user_log
group by day

union all
-- 按月和天
select month,
       day,
       count(userid)
from demo.user_log
group by month,day;

查询结果如下:
在这里插入图片描述

执行完后,数据可以成功查询出来,但是暴露了个问题,执行的查询时间太慢了。解决方案:使用grouping set

2.2、使用grouping set的方式

使用grouping set的方式,效果与union all相同,但不同的是:
grouping set只会对表进行一次扫描,但是上述的union all写法是对表进行三次扫描
grouping sets (month,day,(month,day))相当于:按月、按天、按月和天进行查询

select 
    month,day,count(userid) 
from demo.user_log
    group by month,day 
grouping sets (month,day,(month,day));

运行结果如下:
在这里插入图片描述

2.3、使用cube的方式

cube函数可以实现任意维度的查询,是N个维度的组合,比如cube(month,day),等价于grouping sets ((month,day),month,day,());

写法如下

select month,day,count(userid)
from demo.user_log
group by
cube (month, day);

结果如下:
在这里插入图片描述

2.4、使用rollup的方式

rollup函数可以实现按照参数内从左到右递减的多级统计的效果
如:rollup((a),(b),©)等价于grouping sets((a,b,c),(a,b),(a),())。

select month,day,count(userid)
from demo.user_log
group by
    rollup (month,day);

结果如下:
在这里插入图片描述

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值