文章目录
前言
在一个GROUP BY 查询中,根据不同的维度组合进行聚合,等价于将不同维度的GROUP BY结果进行UNION ALL操作。
常规写法
SELECT a,b,sum(num) AS total_num
FROM DW_AAA.BBB
GROUP BY a,b
UNION ALL
SELECT a,sum(num) AS total_num
FROM DW_AAA.BBB
GROUP BY a
UNION ALL
SELECT b,sum(num) AS total_num
FROM DW_AAA.BBB
GROUP BY B
GROUPING SETS进行改写:
使用方法 :
select
A,
B,
C,
group_id,
count(A)
from
tableName
group by --declare columns
A,
B,
C
grouping sets
(
(A,C),
(A,B),
(B,C),
(C)
)
grouping_id在 hivesql 和 sparksql 里二进制的生成方法和规则
hive中的grouping_id的数字规则
select a,b,c,grouping__id from test group by a,b,c
grouping sets ((ab),(ac),(abc))
规则:根据group by 字段 ,从低到高,group sets中出现的字段是1没出现是0
如 (a,b)对应 011
(a,c)对应 101
spark中的grouping_id()的数字规则
select a,b,c,grouping__id() from test group by a,b,c
grouping sets ((ab),(ac),(abc))
规则:根据group by 字段 ,从高到低,group sets中出现的字段是0没出现是1
如 (a,b)对应 001
( a,c)对应 010
注 :在Hive2.3.0和之后的版本中,0和1的规则是相反的。
总结
如果此篇文章有帮助到您, 希望打大佬们能
关注
、点赞
、收藏
、评论
支持一波,非常感谢大家!
如果有不对的地方请指正!!!