目录
环境
Windows,VMware,Linux,hive-1.2.1
行列互转
题目 列转行
==>
create table ab(
a int comment '年份',
b varchar(3) comment '大写英文字母'
) comment '合并与拆分';
insert into ab
values
(2014,'A'),
(2014,'B'),
(2015,'C'),
(2015,'D');
解决 collect_list
select
a,
concat_ws('-',collect_list(b)) b -- 列转数组 输出格式
from ab
group by a;
题目 逆向 行转列
解决1 lateral view explode
with tmp as(-- 作为源表
select
a,
concat_ws('-',collect_list(b)) b -- 列转数组 输出格式
from ab
group by a
)
select a,b,val
from tmp -- 按行输出元素 关联范围笛卡尔积
lateral view explode(split(b,'-')) ex as val;
解决2 数组下标取元素
with tmp as(-- 作为源表
select
a,
concat_ws('-',collect_list(b)) b -- 列转数组 输出格式
from ab
group by a
)
select a,b,split(b,'-')[0] val from tmp union all
select a,b,split(b,&#