我有一个由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???
如您所见,我不知道如何检查数组项目列表是否包含1而不是2。
你是怎么做到的? 如果有更有效的方法,请告诉我两种(或更多)方法吗?
答案 0 :(得分:23)
Hive中有一些集合函数(参见这里的集合函数:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF),可以在这里使用。
您可以使用array_contains(Array<T>, value)
函数检查项目1是否存在以及size(Array<T>)
函数以确保长度为1.如果满足这两个条件,您将获得所需的输出。 / p>