将字符串数组转换为整数数组

wh6knrhe  于 2021-06-28  发布在  Hive
关注(0)|答案(1)|浏览(558)

现在我遇到了此查询的性能问题:

select userid from table_x inner join table_y on array_contains(split(table_y.userids,','),cast(table_x.userid as string))

y上的userid表示为一个由数字“123、134、156”组成的字符串,这实际上意味着三个userid,即123134和156。表\ux有一个userid列,其中详细说明了每个用户的个人信息。我想选择包含在表y的userids列中的userid。
假设性能问题的原因是因为我必须使用split(table\u y.userids,,')将表y中的userid转换为字符串数组,并使用array\u contains作为字符串。如果是这样,有没有人知道如何将用户ID字符串转换成整数数组?
谢谢您!

s5a0g9ez

s5a0g9ez1#

似乎你在做笛卡尔积联接。Hive无法加入 array_contains -在Hive生成所有可能的组合后应用。
要真正加入,你需要使用 explode(split(table_y.userids,',')) 然后有一个正规的等式连接:

select x.uid from (select cast(table_x.userid as string) as uid from table_x) x 
inner join 
(select explode(split(table_y.userids,',')) as uid from table_y) y on 
x.uid=y.uid;

相关问题