【hive】LATERAL VIEW explode()一行改写为多行

背景:

工作中遇见一个问题,需要再hive中,将表info.age_info中一个字段中的内容进行拆分为多行,比如:

id age
a 12_14_15
b 12_14_15

 

将其拆分为:

id age
a 12
a 14
a 15
b 12
b 14
b 15

解决:

select  temp.age_single
from info.age_info lateral view explode(split(age, '_')) temp as age_single

延伸:

我还需要age在拆分的过程中,保留索引,拆分成如下方式:

id index age
a 0 12
a 1 14
a 2 15
b 0 12
b 1 14
b 2 15

 

方案:

select temp.index, temp.age_single
from info.age_info lateral view posexplode(split(age, '_')) temp as index, age_single

备注:只能在hive引擎上运行,spark引擎上报错,不能运行。

延伸:再后来的工作中,一个表中会存在两个字段,需要将其拆分,并且要求拆分后两个字段index相同的,需要再一条记录中。

解决方案:

第一步:先拆解一个字段。

第二步:再拆解第二个字段,然后第一步的结果left join第二步的结果。

select
a.globlid, a.index, a.age_single, b.horner
from
(
select globalid, temp.index, temp.age_single
from info.age_info lateral view posexplode(split(age, '_')) temp as index, age_single
)a
left join
(
select globalid, temp.index, temp.horner
from info.age_info lateral view posexplode(split(horner, '_')) temp as index, horner
)b
on a.globalid = b.globalid and a.index = b.index

 

你可能感兴趣的:(基础技术)