hive聚合函数多行合并

在数据仓库和大数据处理的场景中,Hive提供了强大的SQL查询能力,其中包括聚合函数用于处理和合并多行数据。本文将深入探讨Hive中的几种常见聚合函数及其在多行合并中的应用。

一、Hive中的常见聚合函数

Hive提供了多种聚合函数,这些函数可以将多行数据合并成单行数据。常见的聚合函数包括:

  1. COUNT:统计行数
  2. SUM:求和
  3. AVG:计算平均值
  4. MAX:求最大值
  5. MIN:求最小值
  6. COLLECT_SET:将一列的值去重后合并为集合
  7. COLLECT_LIST:将一列的值合并为列表
  8. CONCAT_WS:将一列的字符串值按指定分隔符合并为单个字符串

二、具体应用实例

1. 基本聚合函数

假设有一个表 transactions,结构如下:

复制代码
CREATE TABLE transactions (
    user_id INT,
    amount DOUBLE,
    transaction_date STRING
);

表中的数据如下:

user_id amount transaction_date
1 100.0 2023-01-01
1 150.0 2023-01-02
2 200.0 2023-01-01
2 50.0 2023-01-03

通过以下查询语句,我们可以统计每个用户的交易总额、平均交易额、最大交易额和最小交易额:

复制代码
SELECT
    user_id,
    SUM(amount) AS total_amount,
    AVG(amount) AS average_amount,
    MAX(amount) AS max_amount,
    MIN(amount) AS min_amount
FROM
    transactions
GROUP BY
    user_id;

查询结果如下:

user_id total_amount average_amount max_amount min_amount
1 250.0 125.0 150.0 100.0
2 250.0 125.0 200.0 50.0
2. 使用COLLECT_SET和COLLECT_LIST

如果我们希望收集每个用户所有的交易日期,并去除重复的日期,可以使用 COLLECT_SET

复制代码
SELECT
    user_id,
    COLLECT_SET(transaction_date) AS transaction_dates
FROM
    transactions
GROUP BY
    user_id;

查询结果如下:

user_id transaction_dates
1 "2023-01-01", "2023-01-02"
2 "2023-01-01", "2023-01-03"

如果需要保留所有交易日期的顺序(包括重复),可以使用 COLLECT_LIST

复制代码
SELECT
    user_id,
    COLLECT_LIST(transaction_date) AS transaction_dates
FROM
    transactions
GROUP BY
    user_id;

查询结果如下:

user_id transaction_dates
1 "2023-01-01", "2023-01-02"
2 "2023-01-01", "2023-01-03"
3. 使用CONCAT_WS进行字符串合并

如果希望将每个用户的交易日期合并为一个字符串,可以使用 CONCAT_WS函数:

复制代码
SELECT
    user_id,
    CONCAT_WS(',', COLLECT_LIST(transaction_date)) AS transaction_dates
FROM
    transactions
GROUP BY
    user_id;
​

查询结果如下:

user_id transaction_dates
1 2023-01-01,2023-01-02
2 2023-01-01,2023-01-03
相关推荐
WhoAmI9 天前
MapReduce框架原理解析一:InputFormat
大数据·hadoop
WhoAmI9 天前
MapReduce框架原理解析三:OutputFormat
大数据·hadoop
WhoAmI9 天前
MapReduce框架原理解析二:Shuffle
大数据·hadoop
王小王-12314 天前
基于 Hive 的网易云音乐数据分析及可视化系统
hive·hadoop·数据分析·音乐数据分析·网易云音乐分析·hive音乐分析·hadoop网易云
极光代码工作室14 天前
基于数据仓库的电商数据分析平台
大数据·hadoop·python·spark·数据可视化
Database_Cool_14 天前
大规模数据分析降本指南:AnalyticDB Serverless 弹性架构实战
数据仓库·阿里云·架构·数据分析·serverless
Database_Cool_14 天前
什么是湖仓一体?和数据仓库的本质区别(附 AnalyticDB MySQL 湖仓一体方案)
数据库·数据仓库·mysql
Chris _data14 天前
WPF 学习第三天 — Modbus RTU 串口通信
hadoop·学习·wpf
知识分享小能手14 天前
Hadoop学习教程,从入门到精通,Flume日志采集系统 — 完整知识点与案例代码(9)
hadoop·学习·flume
递归尽头是星辰14 天前
AI 访问数据仓库:从直连到微服务化
数据仓库·人工智能·微服务·dataagent·ai数据治理