爆炸函数使用提醒

本文通过一个实际案例,讲述了在处理数据时遇到的使用explode函数进行数据拆分的问题。原本期望通过多个lateral view同时炸裂多个字段,但实际操作中发现必须逐个字段进行,导致查询次数增加。最终,作者改写了HQL,使得每个文件类型需配合每个角色单独执行,揭示了explode在处理复杂情况时的限制。

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

一般爆炸函数explode是结合lateral view使用的,这周工作遇到一个场景类似:
表A:

表B:
结果表:
在这里插入图片描述
因为结果表含多列需爆炸源的不同字段,加上没用过多个lateral view连接,理所当然觉得是可以实现的,于是编写出下面的HQL(认为修改文件类型即只需要可获取结果表-即运行三次此HQL即可):

select count(distinct 角色1)count(distinct 角色2)count(distinct 角色3)
from (select 角色1列表,角色2列表,角色3列表
from A
where 文件类型=文件类型A) t
lateral view explode(split(',', t.角色列表1)) a as 角色1
lateral view explode(split(',', t.角色列表2)) b as 角色2
lateral view explode(split(',', t.角色列表3) b as 角色3;

查看数据结果却发现,角色列表1、2、3都没有被炸裂。
即只能一个个炸裂了。
HQL改写为(即需要跑9次此HQL-文件类型3种*角色3种):

select count(distinct 角色1)
from (select 角色1列表
from A
where 文件类型=文件类型A) t
lateral view explode(split(',', t.角色列表1)) a as 角色1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值