Hive(十一)函数 行转列

行转列指的是将多行的数据拼接之后放到一列上

在 Hive 中想实现按某字段分组,对另外字段进行合并,可通过collect_list()或者collect_set()实现。

collect_set()函数与collect_list()函数:列转行专用函数,都是将分组中的某列转为一个数组返回。有时为了字段拼接效果,多和concat_ws()函数连用。

collect_set()与collect_list()的区别:
collect_list()函数 - - 不去重
collect_set()函数 - - 去重

数据 game1.txt

超级玛丽 卡通

超级玛丽 横版

超级玛丽 单人

魂斗罗 动作

魂斗罗 横版

中国象棋 棋类

中国象棋 智力

建表语句:

create table game1(name string, gametype string) row format delimited fields terminated by ' ';

加载数据:

load data local inpath '/game1.txt' into table game1;

行转列:

select name,concat_ws('/', collect_set(gametype)) from game1 group by name;

多个数据行转列

数据 student1.txt

1 1 wj
1 2 fj
1 1 lm
1 1 sl
1 2 zy
1 3 tom
1 4 jack
1 2 lucy
1 1 hdh
1 2 rose
1 3 ben
1 1 charle
1 3 wend 

建表语句:

hive

create table student1(nianji int,banji int, name string) row format delimited fields terminated by ' ' ;

加载数据:

load data local inpath '/student1.txt' into table student1;

行转列:

select nianji,banji,concat_ws(',',collect_list(name))  from student1 group by nianji,banji;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Allen019

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值