跳到主要内容

grouping_id:分组级别

速查结论

grouping_id([col1[, col2 ..]]) 是 Spark SQL 中用于将多列的 grouping 值编码为位图整数,以标识分组汇总级别的聚合函数。

语法

grouping_id([col1[, col2 ..]])

参数说明

参数说明
col1, col2, ...GROUP BY 子句中指定的列名列表,顺序须与 GROUP BY 中的列顺序一致(或为空表示所有分组列)

函数返回一个整数,计算公式为 (grouping(c1) << (n-1)) + (grouping(c2) << (n-2)) + ... + grouping(cn),其中 n 是参数中的列数。返回值的二进制位图可以编码每列的汇总状态。

示例

> SELECT name, grouping_id(), sum(age), avg(height) FROM VALUES (2, 'Alice', 165), (5, 'Bob', 180) people(age, name, height) GROUP BY cube(name, height);
Alice 0 2 165.0
Alice 1 2 165.0
NULL 3 7 172.5
Bob 0 5 180.0
Bob 1 5 180.0
NULL 2 2 165.0
NULL 2 5 180.0

常见报错与避坑指南

  • 输入列顺序:输入列应与 GROUP BY 列顺序完全匹配,否则位图编码会错位。或者传入空参数列表(表示所有分组列),由系统自动匹配。
  • 位图含义:grouping_id 返回的是位图编码整数,例如两列场景中,3(二进制 11)表示两列均被汇总,0(二进制 00)表示两列均保留原始值。

提示: 输入列应与分组列完全匹配,或者为空(意味着所有的分组列)。

Since: 2.0.0

📱关注公众号

「数据仓库技术」文章同步更新,不错过每一篇干货

微信公众号二维码
💬加群交流

备注「数据仓库技术」加入社群,每日一道大厂SQL真题

交流微信二维码

你可能还想看