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"
col