/*
相关函数
*/
-- 拼接字符串,输入多个字符串
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 版权协议,转载请附上原文出处链接和本声明。