按不同维度组合并聚合

grouping sets 在一个 group by 查询中,根据不同的维度组合进行聚合,等价于将不同维度的 group by 结果集进行 union all

cube 根据 group by 的维度的所有组合进行聚合

rollup 是 cube 的子集,以最左侧的维度为主,从该维度进行层级聚合。

grouping sets 

select order_id, departure_date, count(*) as cnt 

from ord_test 

group by order_id, departure_date 

grouping sets (order_id,(order_id,departure_date)); ---- 等价于以下 

group by order_id union all group by order_id,departure_date

 

cube

select 
       order_id,
       departure_date,
       count(*) as cnt
  from ord_test
 group by order_id,
       departure_date
 with cube;
---- 等价于以下
select count(*) as cnt from ord_test
union all
group by order_id
union all
group by departure_date
union all
group by order_id,departure_date

rollup

select order_id,
       departure_date,
       count(*) as cnt
  from ord_test
 group by order_id,
       departure_date
 with rollup;
---- 等价于以下
select count(*) as cnt from ord_test
union all
group by order_id
union all
group by order_id,departure_date

grouping__id

当使用多维聚合后,如何知道当前行统计是基于哪些维度的呢?这时就需要 grouping__id了

grouping__id 是 hive 生成的,标识维度组合的十进制数字。规则如下:

  1. 将 group by 后的所有字段 倒序 排列。
  2. 对于每个字段,如果该字段出现在了当前粒度中,则该字段位置赋值为1,否则为0,形成一个二进制数据。
  3. 将2中的二进制数转为十进制,即为当前粒度对应的 grouping__id值 。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值