luc*_*one 13 arrays select hive filter
我有一个由user_id和item_id组成的Hive表(用户已购买的项目的ID).我想获得购买第1项而不是第2项和第3项的所有用户的列表.
为此,我编写了简单的查询:
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???
Run Code Online (Sandbox Code Playgroud)
如您所见,我不知道如何检查数组itemslist是否包含1而不是2.
你怎么做到这一点?如果有更有效的方法,请告诉我两种(或更多)方法?
Ama*_*mar 26
Hive中有一些集合函数(参见这里的集合函数:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF),可以在这里使用.
您可以使用该array_contains(Array<T>, value)
功能检查项目1是否存在以及size(Array<T>)
确保长度为1 的功能.如果满足这两个条件,您将获得所需的输出.