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
相关推荐
茶海棠19 小时前
Hadoop+zookeeper+HBase+Kafka集群搭建全流程
hadoop·zookeeper·kafka·hbase
全栈陈序员21 小时前
【Git】从入门到精通(二)—— Git安装与初次配置
数据仓库·git
skywalk81631 天前
卡不等于分支:我用 TRAE 宝配合 Hive 跑三张任务卡的一天
运维·人工智能·hive·trae
程序员梅雨1 天前
【从零开始学习数据仓库 | 第三篇】: Flume——数据采集基石
java·大数据·数据仓库·后端·学习·flume
freejackman2 天前
【架构篇】双遍历 + 多栈协同:手撸 SQL 血缘引擎的架构思考
java·大数据·数据库·hive·sql·架构·spark
陈年老古董2 天前
ClickHouse 单机搭建记录
hive·笔记·学习·clickhouse·硬件架构
Gl�ria2 天前
Hadoop 速刷:HDFS / MR / YARN / Spark / Hive
hadoop·hdfs·mr
陈年老古董2 天前
Spark 3.1.3 集群搭建 + Spark-SQL 整合 Hive 记录
hive·sql·spark
FserSuN2 天前
Hive 分区表存储与查询优化学习总结
hive·hadoop·学习
注塑机数据采集联网3 天前
数据采集网关入门:ZK-D1/D3从零开始构建你的数据运用
大数据·数据仓库·人工智能·物联网·数据库架构·注塑机网关