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

背景:

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

idage
a12_14_15
b12_14_15

 

将其拆分为:

idage
a12
a14
a15
b12
b14
b15

解决:

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

延伸:

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

idindexage
a012
a114
a215
b012
b114
b215

 

方案:

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

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值