/*
	相关函数
*/
-- 拼接字符串,输入多个字符串
select concat('a','b','c');

-- 拼接字符串并指定分隔符
select concat_ws(',','a','b','c');

-- 炸裂函数 拆分数组为一行多列 map为2行多列
select explode(array('a','b','c'));

-- 将一列(集合)转为数组 去重
collect_set()

-- 将一列(集合)转为数组 不去重
collect_list()

-- 侧写 用法:LATERAL VIEW udtf(expression) tableAlias AS columnAlias
-- 解释 用于和split, explode等UDTF一起使用,它能够将一列数据拆成多行数据,在此基础上可以对拆分后的数据进行聚合。
LATERAL VIEW udtf(expression) tableAlias AS columnAlias;


/*

行转列

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


需求 把星座和血型一样的人归类到一起 如下所示。
射手座,A            大海|凤姐
白羊座,A            孙悟空|猪八戒
白羊座,B            宋宋
... ...


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


导入数据
load data local inpath "/opt/module/datas/person_info.txt" into table person_info;

*/

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;
	
	
	
	
	
/*
列传行


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



将电影分类中的数组数据展开。结果如下:
《疑犯追踪》      悬疑
《疑犯追踪》      动作
《疑犯追踪》      科幻
《疑犯追踪》      剧情
《Lie to me》   悬疑
《Lie to me》   警匪
《Lie to me》   动作
《Lie to me》   心理
《Lie to me》   剧情
《战狼2》        战争
《战狼2》        动作
《战狼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 "/opt/module/datas/movie_info.txt" into table movie_info;

*/


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


版权声明:本文为dgqg1223原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/dgqg1223/article/details/107852356