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

时间:2016-11-08 06:21:55

标签: hive hiveql

目前我的查询存在性能问题:

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

y上的用户ID表示为一串数字“123,134,156”,实际上表示三个用户ID,即123,134和156.Table_x有一个userid列,详细说明了每个用户的个人信息。我想选择table_y中userids列中包含的userid。

我是否正确地假设perforamance问题的原因是因为我必须使用split(table_y.userids,',')将table_y中的userid转换为字符串数组,并使用array_contains作为字符串。如果是这样,是否有人知道如何将userid字符串转换为整数数组?

谢谢!

1 个答案:

答案 0 :(得分:1)

您似乎正在进行笛卡尔积加入。 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;