Hive增强的聚合、多维数据集、分组和汇总




春雨惊春清谷天,夏满芒夏暑相连;秋处露秋寒霜降,冬雪雪冬小大寒。今天是2023年的最后一个节气:大雪。大雪节气之后,全国气温显著下降,北方冷空气越发活跃。大家注意防寒保暖

进入正题,本文主要对照Hive介绍Hive、Spark、Presto查询引擎中的增强GROUP BY及相关语法,并通过多维场景案例分析详解三个引擎增强多维聚合语法之间的区别,以及使用中的一些常见问题

1、多维分析概述


在多维分析场景下,我们可能会用到高阶聚合函数,例如GROUPING SETSCUBEROLLUP等。Hive、Spark、Presto等引擎都提供类似的高阶聚合函数,以对不同维度组合下的数据进行聚合统计

Hive官方将这种分析称为GROUP BY子句增强的聚合、多维数据集、分组和汇总

那么什么是增强聚合和多维分析呢?

增强聚合是指在SQL中使用分组聚合查询时,使用GROUPING SETSCUBEROLLUP等子句进行操作。常见的查询引擎基本都支持这种语法,例如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 GROUP BY a, b GROUPING SETS ( (a,b) )
-- 等效于
SELECT a, b, SUM(c) FROM tab1 GROUP BY a, b

-- 示例2:
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

-- 示例3:
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

-- 示例4:
SELECT a, b, SUM( c ) FROM tab1 GROUP BY a, b GROUPING SETS ( (a, b), a, b, ( ) )
-- 等效于
SELECT a

相关推荐

  1. Hive增强聚合数据分组汇总

    2023-12-07 18:56:06       66 阅读
  2. Elasticsearch聚合分析数据汇总与可视化奥秘

    2023-12-07 18:56:06       32 阅读
  3. 数据按日期周期分组聚合

    2023-12-07 18:56:06       41 阅读
  4. 数据分析 — Pandas 分组聚合

    2023-12-07 18:56:06       46 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-07 18:56:06       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-07 18:56:06       106 阅读
  3. 在Django里面运行非项目文件

    2023-12-07 18:56:06       87 阅读
  4. Python语言-面向对象

    2023-12-07 18:56:06       96 阅读

热门阅读

  1. Chart 6 Adreno GPUs内核优化建议

    2023-12-07 18:56:06       46 阅读
  2. 苍穹外卖--导出运营数据Excel报表

    2023-12-07 18:56:06       64 阅读
  3. 查看Hive表信息及占用空间的方法

    2023-12-07 18:56:06       60 阅读
  4. 虎牙C++技术面经

    2023-12-07 18:56:06       45 阅读
  5. Python-字典详解

    2023-12-07 18:56:06       56 阅读
  6. gitlab-ci.yml 同步https 仓库地址

    2023-12-07 18:56:06       54 阅读
  7. Dockerfile构建Python-Ubuntu-Opencv环境

    2023-12-07 18:56:06       56 阅读
  8. git概念及使用方式

    2023-12-07 18:56:06       43 阅读