2014-11-06 67 views
4

我有一個由user_id和item_id(用戶已購買的項目的id)組成的Hive表。 我想我寫了簡單的查詢所有誰購買第1項而不是項目2和3陣列中的Hive檢查元素

用戶要做到這一點的列表:

SELECT user_id, collect_set(item_id) itemslist FROM mytable 
WHERE item_id in (1, 2) 
GROUP BY user_id 
HAVING -- what should I put here??? 

正如你所看到的,我不t知道如何檢查數組itemslist是否包含1而不是2.

你是如何做到這一點的? 如果有一些更有效的方法可以請告訴我兩個(或更多)的方法?

回答

11

Hive`中有一些集合函數(參見集合函數:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF),可以在這裏使用。

您可以使用array_contains(Array<T>, value)函數來檢查項目1是否存在,並使用size(Array<T>)函數確保長度爲1.如果兩個條件都滿足,您將獲得所需的輸出。

+0

如果我想顯示select語句中找到的項目,該怎麼辦? – 2016-12-27 23:03:45

+0

array_contains不適用於正則表達式模式。例如,如果我想檢查數組中是否有任何具有子字符串foo。*的項目。你有什麼建議嗎? – 2018-02-15 00:11:41