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