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