Hive的Collect函数

本文介绍如何使用SQL的collect_list、concat_ws及explode等函数,实现数据的行列转换与聚合,包括如何将同一ID下的多个名称聚合为一个字符串列表,并探讨了处理重复值的方法。

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

版权声明:本文为博主原创文章,转载请注明出处。    https://blog.youkuaiyun.com/u014307117/article/details/52296757
有以下表

id    name
1001    A
1001    B
1001    C
实现以下功能

id    name
1001    A,B,C
即按照id 进行group by,将每个id的name组成一个list放到name字段中。

select id,collect_list(name) from table group by id
1
若name中有重复的值,可以用collect_set函数进行去重

collect_list函数返回的类型是array< ? >类型,?表示该列的类型 
怎么转为string类型?

我们可以使用concat_ws函数,但是该函数仅支持string和array< string > 所以对于该列不是string的列,先转为string

select id,concat_ws(',',collect_list(cast (name as string))) from table group by id
1
最终实现了我们需要的输出结果

concat_ws函数的意思是用逗号将所有的string组合到一起,用逗号分割显示

select concat_ws(',',"A","B");
1
上面代码的结果就是 
A,B

以上是行转列,列转行可用到explode

hive> select explode(split(concat_ws(',','1','2','3','4'),',')) from default.dual;
1
2
3
4
1
2
3
4
5
表示1,2,3,4拼接起来,然后再用逗号分隔成列,应用到表中如下面所示

hive> select * from tt  s  lateral view explode(split("a b c d"," "))  t3 as sp;                 ------需要起别名,tt表中只有一个字段有数据。
A  a
A  b
A  c
A  d
1
2
3
4
5
hive 通过split和collect_list进行特殊行列转换
我想通过SQL将下面这种情况 转换为下面这种情况 最后的实现SQL是 select bb.rq, split(concat_ws(',',collect_list(bb.w...
--------------------- 
作者:JNSimba 
来源:优快云 
原文:https://blog.youkuaiyun.com/u014307117/article/details/52296757?utm_source=copy 
版权声明:本文为博主原创文章,转载请附上博文链接!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值