欢迎投稿

今日深度:

Hive的行列转换,

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			灾难

www.htsjk.Com true http://www.htsjk.com/hive/38571.html NewsArticle Hive的行列转换, 1行转列 表结构 name constellationblood_type孙悟空 白羊座 A大海 射手座 A宋宋 白羊座 B猪八戒 白羊座 A凤姐 射手座 A UDAF多对一 行转列 selectt1.base,concat_ws("|",collect_set(t1.name...
相关文章
    暂无相关文章
评论暂时关闭