行转列函数
实现字符串拼接 concat() concat_ws(参数1(分隔符), str1, str2) 可指定分隔符
select concat(“haha”, “–”, “ll”, “–”, “tom”);
select concat(ename) from tb_emp; (函数是每行执行一次)
select concat(ename, “:”, job) from tb_emp;
select concat_ws ("_", “tom”, “cate”, “jim”)
cast(变量 AS 数据类型) 强制类型转换
select concat_ws(":" , ename ,job , cast(sal as string)) from tb_emp ;
collect_set()将内容收集成set集合
collect_list()将内容收集成list集合
select collect_set(deptno) from tb_emp ; --去重重复元素的数组
select collect_list(deptno) as deptno_list from tb_emp ; --不会去重数据
案例
孙悟空 白羊座 A
娜娜 射手座 A
宋宋 白羊座 B
猪八戒 白羊座 A
凤姐 射手座 A
create table if not exists tb_star(
name string,
star string,
dname string
)
row format delimited fields terminated by “\t”;
load data local inpath “/hive/data/tb_star.txt” into table tb_star;
行转列
select
concat(star,dname),
concat_ws("|",collect_list(name))
from
tb_star
group by star,dname;
列转行
关键函数
split(str, 分隔符) 返回一个数组
select split(“hello,jim,yongge,tom”, “,”)
explode()炸裂函数 将数组中的每个元素显示在每行中
explode(split(“hello,jim,yongge,tom”, “,”))
movie category
《疑犯追踪》 悬疑,动作,科幻,剧情
《Lie to me》 悬疑,警匪,动作,心理,剧情
《战狼2》 战争,动作,灾难
create table if not exists tb_movie (
movie string,
category string
)
row format delimited fields terminated by “\t”;
load data local inpath “/hive/data/movie.txt” into table tb_movie;
切割
select
split(category, “,”)
from tb_movie;
炸裂
select
explode(split(category, “,”)) as cate_name
from
tb_movie;
lateral view 侧窗口函数
select
movie,
cate_name
from
tb_movie
lateral view
explode(split(category,",")) t as cate_name;
案例
create table if not exists tb_business(
name string,
orderdate