hive如何实现行列转换

1. 行转列

原始数据:

nameconstellationblood_type
孙悟空白羊座A
大海射手座A
宋宋白羊座B
猪八戒白羊座A
凤姐射手座A

现在需要把星座和血型一样的人归类到一起。结果如下:

射手座,A 大海|凤姐
白羊座,A 孙悟空|猪八戒
白羊座,B 宋宋
# vim person.txt
孙悟空,白羊座,A
大海,射手座,A
宋宋,白羊座,B
猪八戒,白羊座,A
凤姐,射手座,A


# 创建hive表
hive> create table person_info(
name string, 
constellation string, 
blood_type string) 
row format delimited fields terminated by ",";

# 加载数据
hive> load data local inpath "/root/person.txt" into table person_info;

# 转换sql
hive> select t.base, concat_ws('|', collect_set(t.name)) from (
select name, concat(constellation, ",", blood_type) as base from person_info) t
group by t.base;

# 运行结果
射手座,A        大海|凤姐
白羊座,A        孙悟空|猪八戒
白羊座,B        宋宋
2. 列转行

原始数据:

moviecategory
疑犯追踪悬疑,动作,科幻,剧情
Lie to me悬疑,警匪,动作,心理,剧情
战狼 2战争,动作,灾难

现在需要将电影分类中的数组数据展开。结果如下:

疑犯追踪 悬疑
疑犯追踪 动作
疑犯追踪 科幻
疑犯追踪 剧情
Lie to me 悬疑
Lie to me 警匪
Lie to me 动作
Lie to me 心理
Lie to me 剧情
战狼 2 战争
战狼 2 动作
战狼 2 灾难
vim movie_info.txt
疑犯追踪        悬疑,动作,科幻,剧情
Lie to me       悬疑,警匪,动作,心理,剧情
战狼2   战争,动作,灾难


# 创建hive 表
hive> create table movie_info(
 movie string, 
 category array<string>) 
row format delimited fields terminated by "\t"
collection items terminated by ",";

# 加载数据
hive> load data local inpath "/root/movie_info.txt" into table movie_info;

# 转换sql
hive> select
 movie,
 category_name
from 
 movie_info lateral view explode(category) table_tmp as category_name;

# 运行结果
疑犯追踪        悬疑
疑犯追踪        动作
疑犯追踪        科幻
疑犯追踪        剧情
Lie to me       悬疑
Lie to me       警匪
Lie to me       动作
Lie to me       心理
Lie to me       剧情
战狼2   战争
战狼2   动作
战狼2   灾难
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值