首页 > 数据库 >Hive列转行与行转列的区别

Hive列转行与行转列的区别

来源:互联网 2026-07-28 08:40:18

Hive中列转行通过CASEWHEN与GROUPBY将一列不同值转为新列,实现长格式转宽格式;行转列利用LATERALVIEW与EXPLODE将多列拆成多行,完成宽格式转长格式。两者互为逆操作,分别适用于横向对比与纵向分析场景。

Hive列转行与行转列:核心操作与实战案例

先说说Hive里两个特别容易绕晕的操作:列转行和行转列。简单来说,它们就是数据格式的“变形金刚”,一个把数据从“长条”变成“宽块”,另一个反过来把“宽块”拆成“长条”。但到底怎么用、用在什么场景?下面用两个实际案例一次性讲清楚。

Hive列转行与行转列的区别

长期稳定更新的攒劲资源: >>>点此立即查看<<<

列转行(Pivot)

列转行说白了,就是把某一列里不同的值拎出来,变成多个新列。比如原始表里date列记录着2021、2022、2023年的数据,你想按年份分成三列,每列只放对应年份的销售额。这在Hive里怎么干?核心思路就是用CASE WHEN配合GROUP BY和聚合函数(比如SUM)。这种操作通常把“长格式”数据变成“宽格式”,方便横向对比。

举个例子,有个sales_data表,字段是product_iddaterevenue。要是想按年份把收入拆成三列,代码长这样:

SELECT product_id, 
       SUM(CASE WHEN YEAR(date) = 2021 THEN revenue ELSE 0 END) AS revenue_2021,
       SUM(CASE WHEN YEAR(date) = 2022 THEN revenue ELSE 0 END) AS revenue_2022,
       SUM(CASE WHEN YEAR(date) = 2023 THEN revenue ELSE 0 END) AS revenue_2023
FROM sales_data
GROUP BY product_id;

行转列(Unpivot)

行转列方向反过来,把一行里多个列的值拆成多行。比如你有一张employee_data表,里面有employee_iddepartmentsalary,但你想把每个人的工资按年份拆成多条记录。在Hive里常用的办法是LATERAL VIEW加上EXPLODE。这个操作通常把“宽格式”数据变回“长格式”,方便做更细粒度的分析。

还是举个例子。假设employee_data表里每条记录包含多年的工资信息,你希望把2021、2022、2023年的工资都展开成独立行。SQL可以这么写:

SELECT employee_id,
       SUM(CASE WHEN YEAR(salary_date) = 2021 THEN salary ELSE 0 END) AS salary_2021,
       SUM(CASE WHEN YEAR(salary_date) = 2022 THEN salary ELSE 0 END) AS salary_2022,
       SUM(CASE WHEN YEAR(salary_date) = 2023 THEN salary ELSE 0 END) AS salary_2023
FROM employee_data
LATERAL VIEW INLINE(EXPLODE(ARRAY(STRUCT('2021', salary_date, salary),
                                     STRUCT('2022', salary_date, salary),
                                     STRUCT('2023', salary_date, salary)))) t AS year, month, salary
GROUP BY employee_id;

这里稍微复杂一点——利用LATERAL VIEW INLINE把数组里的结构体展开,生成多行数据,再按员工ID聚合。效果就是把原来宽表里的多列salary信息变成按年份拆分的行记录。

总结

总结一下:列转行(Pivot)是把一列里的多个值变成新列,典型场景是长格式转宽格式,方便横向比较;行转列(Unpivot)则是把多列拆成多行,宽格式转长格式,利于纵向分析。两者互为逆操作,选哪个取决于你最终要分析的数据结构。实战中,用CASE WHEN + GROUP BY做Pivot,用LATERAL VIEW + EXPLODE做Unpivot,基本能覆盖90%的需求。

侠游戏发布此文仅为了传递信息,不代表侠游戏网站认同其观点或证实其描述

热游推荐

更多
湘ICP备14008430号-1 湘公网安备 43070302000280号
All Rights Reserved
本站为非盈利网站,不接受任何广告。本站所有软件,都由网友
上传,如有侵犯你的版权,请发邮件给xiayx666@163.com
抵制不良色情、反动、暴力游戏。注意自我保护,谨防受骗上当。
适度游戏益脑,沉迷游戏伤身。合理安排时间,享受健康生活。