Hive检查数组中的元素

时间:2014-11-06 07:54:34

标签: arrays select filter hive

我有一个由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。

你是怎么做到的? 如果有更有效的方法,请告诉我两种(或更多)方法吗?

1 个答案:

答案 0 :(得分:23)

Hive中有一些集合函数(参见这里的集合函数:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF),可以在这里使用。

您可以使用array_contains(Array<T>, value)函数检查项目1是否存在以及size(Array<T>)函数以确保长度为1.如果满足这两个条件,您将获得所需的输出。 / p>