Элементы проверки верности в массиве

У меня есть таблица Hive, сделанная из user_id и item_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

В Hive есть несколько функций сбора (см. функции сбора здесь: https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF), которые можно использовать здесь.

Вы можете использовать функцию array_contains(Array<T>, value), чтобы проверить наличие элемента 1, и функцию size(Array<T>), чтобы убедиться, что длина равна 1. Если оба условия выполнены, вы получите желаемый результат.