hive里 grouping sets用法
时间: 2025-06-06 12:25:42 AIGC 浏览: 43
### Hive 中 Grouping Sets 的用法
#### 基本概念
Grouping Sets 是一种在 Hive 查询中简化多维分组操作的功能。通过使用 `GROUPING SETS`,可以在一条 SQL 语句中实现多个不同维度的聚合逻辑,从而减少多次执行查询的需求[^1]。
#### 语法结构
以下是 `GROUPING SETS` 的基本语法:
```sql
SELECT column_list, aggregate_function(column)
FROM table_name
GROUP BY GROUPING SETS (
(column_set_1),
(column_set_2),
...
);
```
其中:
- `column_list`: 需要展示的结果列。
- `aggregate_function`: 聚合函数(如 `SUM`, `AVG`, `COUNT` 等)。
- `(column_set_n)`: 表示一组或多组需要进行分组的列集合。
#### 示例解析
假设有一个表名为 `tableName`,其字段包括 `class`(班级)、`sex`(性别)、`course`(课程)以及 `score`(分数)。我们希望按不同的维度组合来统计平均成绩。
创建临时表存储结果数据:
```sql
CREATE TABLE temp.score_grouping AS
SELECT
grouping__id,
class,
sex,
course,
AVG(score) AS avg_score
FROM tableName
GROUP BY
class, sex, course
GROUPING SETS (
(class, course),
(class, sex),
(sex, course),
(course)
);
```
上述代码实现了以下几种分组方式:
- 按照 `class` 和 `course` 组合分组;
- 按照 `class` 和 `sex` 组合分组;
- 按照 `sex` 和 `course` 组合分组;
- 单独按照 `course` 分组;
最终结果可以通过查看 `temp.score_grouping` 表获得。对于某些未参与特定分组的字段,在对应记录中会显示为 NULL 值[^3]。
#### 特殊字段 `grouping__id`
当使用 `GROUPING SETS` 时,Hive 自动生成了一个特殊字段 `grouping__id` 来表示当前行属于哪个具体的分组设置。该值是一个整数编码形式,能够帮助区分每条记录来源于哪种分组模式。
例如过滤部分类型的分组结果:
```sql
SELECT *
FROM temp.score_grouping
WHERE grouping__id IN ('2', '6');
```
此命令仅返回那些满足条件编号下的汇总信息。
#### 扩展功能
除了 `GROUPING SETS` 外,Hive 提供了其他类似的高级聚合工具,比如 CUBE 和 ROLLUP,它们分别代表全排列交叉分组与逐层累加式的层次化分组[^2]。
---
阅读全文
相关推荐




















