Hive的行列转换

1行转列
表结构

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

UDAF多对一 行转列

select
t1.base,
concat_ws("|",collect_set(t1.name)) name
from
(select name,concat(constellation,",",blood_type)base from person_info)t1
group by t1.base;

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

concat(“1”,“2”,“3”)将各个字符串连接在一起
collect_set(name) 将name里面的字段一个个取出来形成一个数组,例如
select collect_set(name) from person_info;
[“孙悟空”,“大海”,“宋宋”,“猪八戒”,“凤姐”]
concat_ws("|",collect_set(t1.name)) 将t1.name一个一个取出来并且用|连接

1UDTF列转行

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

create table movie_info( 
    movie string,  
    category array<string>)  
row format delimited fields terminated by "\t" 
collection items terminated by ","; 		//表示数组里面的分隔方式

注意:如果多个列含有多个数组,那么不能指定多个分隔符
load data local inpath “movie_info.tsv” into table movie_info;

select
movie,
category_name
from
movie_info lateral view explode(category) table_tmp as category_name;

table1 lateral view UDTF函数 临时表名 as 新列(存放的是炸开的数据)
explode(里面只能扔一个数组)

疑犯追踪			悬疑
疑犯追踪			动作
疑犯追踪			科幻
疑犯追踪			剧情
Lie to me		悬疑
Lie to me		警匪
Lie to me		动作
Lie to me		心理
Lie to me		剧情
战狼2			战争
战狼2			动作
战狼2			灾难
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值