web-dev-qa-db-fra.com

Éléments de vérification de la ruche dans le tableau

J'ai une table Hive composée de user_id et item_id (id des articles qui ont été achetés par l'utilisateur). Je veux obtenir une liste de tous les utilisateurs qui ont acheté l'article 1 mais pas les articles 2 et 3.

Pour ce faire, j'ai écrit la requête simple:

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???

Comme vous pouvez le voir, je ne sais pas comment vérifier si la liste des éléments du tableau contient 1 et non 2.

Comment est-ce que tu fais ça? S'il existe un moyen plus efficace, pouvez-vous me dire les deux (ou plusieurs) méthodes?

13
lucacerone

Il y a quelques fonctions de collection dans Hive `(Voir fonctions de collection ici: https://cwiki.Apache.org/confluence/display/Hive/LanguageManual+UDF ) qui peuvent utiliser ici.

Vous pouvez utiliser la fonction array_contains(Array<T>, value) pour vérifier si l'élément 1 est présent et la fonction size(Array<T>) pour vous assurer que la longueur est 1. Si les deux conditions sont remplies, vous obtiendrez la sortie souhaitée.

25
Amar