一般爆炸函数explode是结合lateral view使用的,这周工作遇到一个场景类似:
表A:
结果表:
因为结果表含多列需爆炸源的不同字段,加上没用过多个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