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
相关推荐
Edingbrugh.南空6 小时前
Hadoop MapReduce 入门
大数据·hadoop·mapreduce
大数据CLUB1 天前
基于spark的奥运会奖牌变化数据分析
大数据·hadoop·数据分析·spark
Edingbrugh.南空1 天前
Hadoop高可用集群搭建
大数据·hadoop·分布式
无级程序员2 天前
hive2服务启动报错:/tmp/hive on HDFS should be writable(不是chmod 777能解决的)
hive·hadoop·hdfs
rui锐rui2 天前
大数据学习2:HIve
大数据·hive·学习
凌辰揽月2 天前
Servlet学习
hive·学习·servlet
weixin_307779133 天前
Hive集群之间迁移的Linux Shell脚本
大数据·linux·hive·bash·迁移学习
王小王-1233 天前
基于Hadoop的公共自行车数据分布式存储和计算平台的设计与实现
大数据·hive·hadoop·分布式·hadoop公共自行车·共享单车大数据分析·hadoop共享单车
王小王-1233 天前
基于Hadoop的大规模文本词频统计分析系统设计与实现
hadoop·mapreduce·hadoop词频统计·hadoop文本统计·mapreduce词频统计
陈敬雷-充电了么-CEO兼CTO3 天前
推荐算法系统系列>推荐数据仓库集市的ETL数据处理
大数据·数据库·数据仓库·数据挖掘·数据分析·etl·推荐算法