多字段同时列转多行(Hive版),即多字段,对应应的位置连接 (如 a-b 1-2 =>列转行后为两行,分别为 a-1,b-2) 注意:posexplode比 explode多返回一个pos

本文介绍了如何在Hive中使用SQL实现多字段同时转换为多行,特别是涉及字段位置连接的情况,如a-b转为a-1和b-2。文章提到了`posexplode`函数相对于`explode`的优势,但警告这种方式不适合字段数量不固定的场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

查询sql:

select 
    tmp.*,
    t1.t1_sku_id,
    t2.t2_order_num
from(
    select 1 as uid, 'a,b,c' as sku_id, '10,20,30' as order_num
    union all
    select 2 as uid, 'a,b,c,d' as sku_id, '10,20,30,40' as order_num
)tmp
lateral view outer posexplode( split( sku_id, ','))    t1 as pos, t1_sku_id
lateral view outer posexplode( split( order_num, ',')) t2 as pos, t2_order_num
where t1.pos = t2.pos
;

查询效果如下:

tmp.uid	tmp.sku_id	tmp.order_num	t1.t1_sku_id	t2.t2_order_num
1	a,b,c	10,20,30	a	10
1	a,b,c	10,20,30	b	20
1	a,b,c	10,20,30	c	30
2	a,b,c,d	10,20,30,40	a	10
2	a,b,c,d	10,20,30,40	b	20
2	a,b,c,d	10,20,30,40	c	30
2	a,b,c,d	10,20,30,40	d	40
Time taken: 1.396 seconds, Fetched: 7 row(s)

下面方式不推荐,因为字段对应的列不定,不能写死

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值