Hive
hive 元数据库查询表结构
hive 锁表解锁
Hive GROUPING SETS、CUBE与ROLLUP
hive 动态分区
Hive 用正则表达式筛选列名
hive查看db容量大小
hive collect_list/collect_set/sory_array排序
本站点使用 MrDoc 构建
-
+
首页
Hive GROUPING SETS、CUBE与ROLLUP
> `GROUPING SETS` 子句是 `SELECT` 语句的 `GROUP BY` 子句的扩展。通过 `GROUPING SETS` 子句,你可采用多种方式对结果分组,而不必使用多个 `SELECT` 语句来实现这一目的。这就意味着,能够减少响应时间并提高性能。 ## GROUPING SETS > `GROUP BY` 中的 `GROUPING SETS` 子句允许我们在同一记录集中指定多个 `GROUP BY` 选项。所有 `GROUPING SETS` 子句都可以逻辑表示为 `UNION` 连接的几个`GROUP BY`查询。 * 等价写法 ```sql SELECT a, b, SUM(c) FROM tab1 GROUP BY a, b GROUPING SETS ( (a,b) ) --等价于 SELECT a, b, SUM(c) FROM tab1 GROUP BY a, b ``` ```sql SELECT a, b, SUM( c ) FROM tab1 GROUP BY a, b GROUPING SETS ( (a,b), a) --等价于 SELECT a, b, SUM( c ) FROM tab1 GROUP BY a, b UNION SELECT a, null, SUM( c ) FROM tab1 GROUP BY a ``` ```sql SELECT a,b, SUM( c ) FROM tab1 GROUP BY a, b GROUPING SETS (a,b) --等价于 SELECT a, null, SUM( c ) FROM tab1 GROUP BY a UNION SELECT null, b, SUM( c ) FROM tab1 GROUP BY b ``` ```sql SELECT a, b, SUM( c ) FROM tab1 GROUP BY a, b GROUPING SETS ( (a, b), a, b, ( ) ) --等价于 SELECT a, b, SUM( c ) FROM tab1 GROUP BY a, b UNION SELECT a, null, SUM( c ) FROM tab1 GROUP BY a, null UNION SELECT null, b, SUM( c ) FROM tab1 GROUP BY null, b UNION SELECT null, null, SUM( c ) FROM tab1 ``` * GROUPING__ID > GROUPING SETS 会对 GROUP BY 子句中的列进行多维组合,结果整体展现,对于没有参与 GROUP BY 的那一列置为 NULL 值。如果列本身值就为 NULL,则可能会发生冲突。这样我们就没有办法去区分该列显示的 NULL 值是列本身就是 NULL 值,还是因为该列没有参与 GROUP BY 而被置为 NULL 值。所以需要一些方法来识别列中的NULL,GROUPING__ID 函数就是为了解决这个问题而引入的。 > 此函数返回一个位向量,与每列是否存在对应。用二进制形式中的每一位来标示对应列是否参与 GROUP BY。Hive2.3.0版本之前,如果某一列参与了 GROUP BY,对应位就被置为1,否则为0。在这一版本,GROUPINGID 与位向量之间的关系比较别扭,GROUPINGID实际为位向量先反转之后再转为十进制的值。这一点,在Hive2.3.0版本得到解决,如果某一列参与了 GROUP BY,对应位就被置为0,否则为1。所以在使用 GROUPING__ID 时注意一下版本号。 > GROUPINGID 的值与 GROUP BY 表达式中列的取值和顺序有关,所以如果重新排列,GROUPINGID 对应的含义也会变化。 ## CUBE > CUBE 简称数据魔方,可以实现 Hive 多个任意维度的查询。CUBE 创建集合中所有可能组合。 例如: ```sql GROUP BY a,b,c WITH CUBE --等价于 GROUP BY a,b,c GROUPING SETS((a,b,c),(a,b),(b,c),(a,c),(a),(b),(c),())。 ``` ## ROLLUP > ROLLUP 子句与 GROUP BY 一起使用用来计算维度上层次结构级别的聚合。ROLLUP 可以实现从右到左递减多级的统计。 例如: ```sql GROUP BY a,b,c WITH ROLLUP --等价于 GROUP BY a,b,c GROUPING SETS((a,b,c),(a,b),(a),()) ```
vleity
2025年6月26日 15:50
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
PDF文档(打印)
分享
链接
类型
密码
更新密码