Hive多维分析
春雨惊春清谷天,夏满芒夏暑相连;秋处露秋寒霜降,冬雪雪冬小大寒。今天是2023年的最后一个节气:大雪。大雪节气之后,全国气温显著下降,北方冷空气越发活跃。大家注意防寒保暖
进入正题,本文主要对照Hive介绍Hive、Spark、Presto查询引擎中的增强
GROUP BY
及相关语法,并通过多维场景案例分析详解三个引擎增强多维聚合语法之间的区别,以及使用中的一些常见问题
1、多维分析概述
在多维分析场景下,我们可能会用到高阶聚合函数,例如
GROUPING SETS
、
CUBE
、
ROLLUP
等。Hive、Spark、Presto等引擎都提供了类似的高阶聚合函数,以对不同维度组合下的数据进行聚合统计
Hive官方将这种分析称为
GROUP BY
子句增强的聚合、多维数据集、分组和汇总
那么,什么是增强聚合和多维分析呢?
增强聚合是指在SQL中使用分组聚合查询时,使用
GROUPING SETS
、
CUBE
、
ROLLUP
等子句进行操作。常见的查询引擎基本都支持这种语法,例如Hive、Spark、Presto、FlinkSQL等。使用增强聚合不仅可以简化SQL代码,而且还能提高SQL语句的性能
多维分析则是指多种维度组合的分析,而不是多种维度的分析。在多维分析场景下,可以还原任意维度组合下的维度列簇名称,以支持图表民主化的使用筛选器
多维分析主要用于多维度聚合,即多种维度组合并聚合结果
2、GROUPING SETS多维分组
Hive官方对
GROUPING SETS
的描述如下:
GROUP BY
中的
GROUPING SETS
子句允许我们在同一记录集中指定多个
GROUP BY
选项。所有
GROUPING SET
子句都可以用由
UNION
连接的多个
GROUP BY
查询来逻辑表示
Hive官方文档:https://cwiki.apache.org/confluence/display/Hive/Enhanced+Aggregation%2C+Cube%2C+Grouping+and+Rollup
简单来说就是指定多组维度作为
GROUP BY
的分组规则,然后再将结果联合在一起。它的效果等同于先分别对这些组维度进行
GROUP BY
分组后,再通过
UNION
将结果联合起来
例如,
GROUPING SET
查询和等效的
GROUP BY
查询如下:
-- 示例1:SELECT a, b,SUM(c)FROM tab1 GROUPBY a, b GROUPING SETS ((a,b))-- 等效于SELECT a, b,SUM(c)FROM tab1 GROUPBY a, b
-- 示例2:SELECT a, b,SUM( c )FROM tab1 GROUPBY a, b GROUPING SETS ((a,b), a)-- 等效于SELECT a, b,SUM( c )FROM tab1 GROUPBY a, b
UNIONSELECT a,null,SUM( c )FROM tab1 GROUPBY a
-- 示例3:SELECT a,b,SUM( c )FROM tab1 GROUPBY a, b GROUPING SETS (a,b)-- 等效于SELECT a,null,SUM( c )FROM tab1 GROUPBY a
UNIONSELECTnull, b,SUM( c )FROM tab1 GROUPBY b
-- 示例4:SELECT a, b,SUM( c )FROM tab1 GROUPBY a, b GROUPING SETS ((a, b), a, b,())-- 等效于SELECT a
版权归原作者 对许 所有, 如有侵权,请联系我们删除。