学习 Hive(十二):分组集

分组集

分组集(Grouping Sets)实现了在一条 GROUP BY 语句多次 GROUP BY 操作。

SELECT  
  a,
  b,
  SUM(c)
FROM t1  
GROUP BY a, b  
GROUPING SETS((a, b))  

👆 的 SQL 语句 (a, b) 是一个分组集,其等价于

SELECT  
  a,
  b,
  SUM(c)
FROM t1  
GROUP BY a, b  
SELECT  
  a,
  b,
  SUM(c)
FROM t1  
GROUP BY a, b  
GROUPING SETS(a, b)  

👆 的 SQL 语句 ab 是两个分组集,相当于将两个 GROUP BY 通过 UNION 合并,其等价于:

SELECT  
  a,
  null,
  SUM(c)
FROM t1  
GROUP BY a  
UNION  
SELECT  
  null,
  b,
  SUM(c)
FROM t1  
GROUP BY b  

ROLLUP

上卷(Roll Up)也是一类分组集,按着分组条件逐层上卷,例如:GROUP BY a, b, c WITH ROLLUP 相当于 GROUP BY a, b, c GROUPING SETS((a, b, c), (a, b), (a), ())

CUBE

数据立方体(Cube)也是一类分组集,按着分组条件生成 2 的 n 次方种分组集组合,例如:GROUP BY a, b, c WITH CUBE 相当于 GROUP BY a, b, c GROUPING SETS((a, b, c), (a, b), (a, c), (b, c), (a), (b), (c), ())

GROUPING FUNCTION

grouping 函数可以用于查看分组集中的列是否参与了 GROUP BY 聚合,如果值为 0 则表示有,如果值为 1 则表示没有。

参考