sparksql中grouping sets的使用方法

1、关键字

GROUPING SETS: 根据不同的维度组合进行聚合,等价于将不同维度的GROUP BY结果集进行UNION ALL

GROUPING__ID:表示结果属于哪一个分组集合,属于虚字段

2、简单示例:

关于grouping sets的使用,通俗的说,grouping sets是一种将多个group by 逻辑写在一个sql语句中的便利写法,等价与多个group by 的语句union all 的结果 。

create table temp.score_grouping as
select
  grouping__id, ---grouping__id是两个下划线
    class,
    sex,
    course,
   avg(score)
from
    tableName
group by  --group by包含所需所有维度字段
    class,
    sex,
    course -------此处无逗号
grouping sets
(
   (class,  course),
   ( class,sex),
   (sex,course),
   (course)
)

3、关于一些维度设置为’ALL’

上述sql,我不关心grouping__id,我的需求是有些维度取不到时,用ALL代替,如何处理?

create table temp.score_grouping as
select
  grouping__id, ---grouping__id是两个下划线
  if(int(grouping__id)& 1=0,'ALL',class) as  class, ----  也可以 if((cast(grouping__id as int) & 1)=0,'ALL',class)  as class
  if(int(grouping__id)& 2=0,'ALL',sex) as  sex,
  if(int(grouping__id)& 4=0,'ALL',course) as  course,
  avg(score)
from
    tableName
group by  --group by包含所需所有维度字段
    class,
    sex,
    course -------此处无逗号
grouping sets
(
   (class,  course),
   ( class,sex),
   (sex,course),
   (course)
)

注意事项:
1、grouping__id,spark sql分组id是纬度被选中则为0,没被选中则为1,而hive则刚好相反,选中为1,没被选中为0
如果想保持一致,可通过设置 spark.grouping.sets.reference.hive=true 来产生与hive同样的效果;
2、1,2,4 分别对应group by 后的字段顺序,分别是2的0次方,2的1次方,2的2次方;

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
感谢您的提问。关于MySQLgrouping sets的使用,可以通过以下方式实现: 1. 在SELECT语句指定GROUPING SETS子句。 例如,假设我们有以下表格: 表格名称: sales 列名称: region, product, month, revenue 样例数据: East Product1 Jan 1000 East Product2 Jan 1500 East Product1 Feb 2000 East Product2 Feb 2500 West Product1 Jan 3500 West Product2 Jan 2000 West Product1 Feb 4500 West Product2 Feb 5500 如果我们想要按照月份和地区对销售数据进行汇总,可以使用以下语句: SELECT region, month, SUM(revenue) FROM sales GROUP BY GROUPING SETS((region, month), (region), (month), ()); 其GROUPING SETS子句用于指定不同的分组方式。上述语句会生成如下结果: region month revenue East Jan 2500 East Feb 4500 West Jan 5500 West Feb 10000 East 7000 West 15000 Jan 9000 Feb 14500 () 23500 2. 在ROLLUP或CUBE语法使用GROUPING SETS子句 在ROLLUP或CUBE语法,也可以使用GROUPING SETS子句指定多个分组方式。例如: SELECT region, product, month, SUM(revenue) FROM sales GROUP BY ROLLUP(GROUPING SETS((region, product, month), (region, product), (region), ())); 上述语句会生成如下结果: region product month revenue East Product1 Jan 1000 East Product1 Feb 2000 East Product1 3000 East Product2 Jan 1500 East Product2 Feb 2500 East Product2 4000 East 7000 West Product1 Jan 3500 West Product1 Feb 4500 West Product1 8000 West Product2 Jan 2000 West Product2 Feb 5500 West Product2 7500 West 15500 () 23500 希望能够帮助您理解GROUPING SETS的使用方式。如果您有其他问题,请随时提出。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值