2016-11-08 76 views
0

現在我有這個查詢性能問題的數組:將字符串數組按整數

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」,這實際上意味着三個用戶標識,即123,134和156. Table_x具有用戶標識列,其詳細描述了每個用戶的個人信息。我想選擇包含在table_y的userids列中的用戶標識。

我是否認爲perforamance問題的原因是因爲我必須將table_y中的userids轉換爲使用split(table_y.userids,',')的字符串數組並將array_contains用於字符串。如果是這樣,是否有誰知道如何將userid的字符串轉換爲整數數組?

謝謝!

回答

1

看來你正在做笛卡爾積連接。 Hive無法加入array_contains - 它在配置單元生成所有可能的組合後應用。

要真正加入,你需要使用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; 
+0

感謝您的幫助和解釋!這實際上幫助我實現更快的性能 – chrishendra93