美文网首页
hive 多行同时转列 lateral view explode

hive 多行同时转列 lateral view explode

作者: 一拳超疼 | 来源:发表于2020-12-23 15:51 被阅读0次

最近在写一个需求过程中遇到一个多行同时转列的问题,感受到HQL的强大之处
实验数据即sql:

-- 实验数据
1 2.0,3.0,6.0 2.0,3.0,6.0
3 8.0,9 8,9
-- 建表
create table laterview(
    id int,
    event_list array<DOUBLE>,
    res_list array<DOUBLE>
)
row format delimited 
fields terminated by ' '
collection items terminated by ',';
load data local inpath '/root/data/hive_data/laterview.dat' into table laterview;
-- 使用 lateral view explode 能得到一行的行转列,当不能多行使用,否则出现笛卡尔积。
-- 这相当于通过id进行了全连接,因此我们需要在id相同的前提下,能再有一个字段进行辅助关联
select 
    id,
    event,
    res
from laterview
lateral view explode(event_list) t1 as event
lateral view explode(res_list) t1 as res;
-----
a.id    a.event b.res
1       2.0     2.0
1       2.0     3.0
1       2.0     6.0
1       3.0     2.0
1       3.0     3.0
1       3.0     6.0
1       6.0     2.0
1       6.0     3.0
1       6.0     6.0
3       8.0     8.0
3       8.0     9.0
3       9.0     8.0
3       9.0     9.0


-- 使用lateral view posexplode,会生成一个pos列,这是一个排序的列,具体如下:
select 
    pos1,
    pos2,
    id,
    event,
    res
from laterview
lateral view posexplode(event_list) t1 as pos1,event
lateral view posexplode(res_list) t2 as pos2,res
where pos1=pos2;

-----
id      event   res
1       2.0     2.0
1       3.0     3.0
1       6.0     6.0
3       8.0     8.0
3       9.0     9.0

-- 如上结果所示,达到了多行同时转列的目的
image.png image.png

相关文章

网友评论

      本文标题:hive 多行同时转列 lateral view explode

      本文链接:https://www.haomeiwen.com/subject/tvtunktx.html