将字符串数组转换为整数数组
Converting array of string into array of integer
现在我遇到了这个查询的性能问题:
select userid from table_x inner join table_y on array_contains(split(table_y.userids,','),cast(table_x.userid as string))
y上的userids表示为一串数字“123,134,156”,实际上是三个userids,即123,134和156。Table_x有一个userid列,详细说明了每个用户的个人信息用户。我想要 select 包含在 table_y 的用户标识列中的用户标识。
我是否正确地假设性能问题的原因是因为我必须使用 split(table_y.userids,',') 将 table_y 中的用户 ID 转换为字符串数组并使用array_contains 为字符串。如果是这样,有没有人知道如何将用户标识字符串转换为整数数组?
谢谢!
您似乎在进行笛卡尔积连接。 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;
现在我遇到了这个查询的性能问题:
select userid from table_x inner join table_y on array_contains(split(table_y.userids,','),cast(table_x.userid as string))
y上的userids表示为一串数字“123,134,156”,实际上是三个userids,即123,134和156。Table_x有一个userid列,详细说明了每个用户的个人信息用户。我想要 select 包含在 table_y 的用户标识列中的用户标识。
我是否正确地假设性能问题的原因是因为我必须使用 split(table_y.userids,',') 将 table_y 中的用户 ID 转换为字符串数组并使用array_contains 为字符串。如果是这样,有没有人知道如何将用户标识字符串转换为整数数组?
谢谢!
您似乎在进行笛卡尔积连接。 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;