Hive_6. 数据聚合 -- Group By & Grouping_SETS & RollUp & CUBE & Having

本文介绍了Hive中的数据聚合操作,包括基于Group By的基本聚合函数,如COUNT、SUM等,并详细讲解了高级聚合GROUPING SETS、ROLLUP和CUBE的使用,以及聚合条件HAVING的应用。通过示例展示了这些功能如何帮助在Hive中进行多级汇总和条件过滤。
摘要由CSDN通过智能技术生成

今天跟大家介绍一些 Hive 中的高级操作-数据聚合。这里主要根据以下三部分向大家介绍一下Hive 中常见的聚合:

  • 基于 Group By 的基本聚合函数
  • 高级聚合 -- GROUPING SETS  & ROLLUP and  CUBE
  • 聚合条件 -- Having

1. 基于 Group by 的基本聚合函数 

数据聚合是基于特定的条件使用数据汇总的形式来收集和表达更多的信息。Hive 提供了一些内置的聚合函数,如MAXMINAVG等等。Hive 还支持高级的聚合: GROUPING SETSROLLUPCUBE,分析函数[analytic functions],以及 windowing
Hive 的基本内置的聚合函数通常使用GROUP BY子句。如果没有GROUP BY子句指定,默认情况下它是对整个表进行聚合。除了聚合函数, 所有其他 select 的列也必须包含在GROUP BY子句中(分析函数除外)。以下是几个例子使用内置的聚合函数:
注意:关于窗口函数 & 分区表函数 请参考 SQL Windowing 项目: http://blog.csdn.net/mike_h/article/details/50245995

  • 没有GROUP BY字段的聚合:
<span style="font-size:12px;">jdbc:hive2://> SELECT count(*) AS row_cnt FROM employee;
+----------+
| row_cnt |
+----------+
| 5 |
+----------+
1 row selected (60.709 seconds</span>
  • 对 GROUP BY字段进行聚合:
<span style="font-size:12px;">jdbc:hive2://> SELECT sex_age.sex, count(*) AS row_cnt 
. . . . . . .> FROM employee 
. . . . . . .> GROUP BY sex_age.sex;
+--------------+----------+
| sex_age.sex | row_cnt |
+--------------+----------+
| Female | 2 |
| Male | 3 |
+--------------+----------+
2 rows selected (100.565 seconds)</span>

--select 字段名必须包含在 Group by 字段中 
<span style="font-size:12px;">jdbc:hive2://> SELECT name, sex_age.sex, count(*) AS row_cnt 
. . . . . . .> FROM employee GROUP BY sex_age.sex;
Error: Error while compiling statement: FAILED: SemanticException [Error 10025]: Line 1:7 Expression not in GROUP BY key 'name' (state=42000,code=10025) </span>

如果我们必须要 SELECT 一些 GROUP BY 中没有的字段, 我们有两种方法:

  • 使用[analytic functions],引入后, 完全避免使用GROUP BY子句 (该方法会稍后进行介绍)
  • 使用collect_set 函数,该函数返回一组对象和消除重复的元素

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值