Hive多行转多列,多列转多行

本文详细介绍了Hive中四种数据转换方法:多行转多列、单行转多列、多列转多行和单列转多行。通过案例分析和SQL实现,展示了如何利用case语句、max函数、concat_ws函数、explode函数等进行数据转换。内容涵盖数据聚合、列值拼接、行合并和数据集合拆分等关键操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

hive中的行列转换包含单行、多行、单列、多列,所以一共有四种组和转换结果。

一、多行转多列

原始数据表
在这里插入图片描述
目标结果表
在这里插入图片描述
分析:目标表中的a和b是用分组形成,所以groupby字段选用原始表中col1,c、d、e是原始表中的行值,在目标表中成了列名,目标表中可以采用as做列名自定义,当原始表中的某一字段值等于某一特定值时,人为定义为结果表中的列名。

SQL实现

select
  col1 as col1,
  max(case col2 when 'c' then col3 else 0 end) as c,//当原始表中col2的字段为C时,取col3中的值,否则取0,然后取最大值,前提是原始表中没有比0更小的数,如果原始表中有比自定义的0值更小的数,else不能采用0,else的值要为原始表中最小数或比最小数还小。
  max(case col2 when 'd' then col3 else 0 end) as d,
  max(case col2 when 'e' then col3 else 0 end) as e
from
  row2col1
group by
  col1;

在这里插入图片描述
总结:多行转多列主要是条件函数,再取最大值,再用as自定义为新列名

二、单行转多列

原始数据表
在这里插入图片描述
目标数据表
**在这里插入图片描述
分析:结果表是将原始表按照col1和col2进行分组统计,将原始表中具有相同col2的col3值拼接到目标表col3的字段当中,所以要采用hive中的拼接函数,但是拼接函数只使用于字符串,所以要将目标表中的col3的值转换为字符串,同时指定拼接关系逗号

SQL语句

select
  col1,
  col2,
  concat_ws(',', collect_list(cast(col3 as string))) as col3
from
  row2col2
group by
  col1, col2;

总结:多行转单列主要知识点就是字符串拼接函数

三、多列转多行

原始表
在这里插入图片描述
目标表
在这里插入图片描述
分析:union all 是在结果的行后面增加,简单理解为:连接行记录,类似向MySQL数据库中增加行记录
而left join是将两个表的列全部放入一张表的列中,增加列记录。

SQL实现

select col1, 'c' as col2, col2 as col3 from col2row1
UNION ALL
select col1, 'd' as col2, col3 as col3 from col2row1
UNION ALL
select col1, 'e' as col2, col4 as col3 from col2row1;

在这里插入图片描述

四、单列转多行

原始表
在这里插入图片描述
目标表
在这里插入图片描述
分析:一列中包含多个数据如Map或array,一般使用explode函数,俗称炸裂函数,将数据集合切分出来展示
SQL实现

select
  col1,
  col2,
  lv.col3 as col3
from
  col2row2
    lateral view
  explode(split(col3, ',')) lv as col3;

结果
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值