Comment puis-je utiliser la clause In dans Hive Je veux écrire quelque chose comme ceci dans Hive sélectionnez x de y où yz dans (sélectionnez z distinct de y), triez par ordre; x; Mais je ne trouve aucun moyen de le faire .. essayé Find_in_Set .. en utilisant find_in_set (yz, sous-requête) .. mais le travail échoue.
Je veux faire ça sur Hive. S'il vous plaît aidez-moi si quelqu'un sait comment faire cela dans la ruche ..
Merci et salutations, Atul
Selon https://cwiki.Apache.org/confluence/display/Hive/LanguageManual+Select :
"Hive ne prend pas en charge IN, EXISTS ou les sous-requêtes de la clause WHERE."
Vous voudrez peut-être regarder: https://issues.Apache.org/jira/browse/Hive-801
Vous pouvez utiliser semi join ( https://cwiki.Apache.org/Hive/languagemanual-joins.html ):
LEFT SEMI JOIN implémente la sémantique corrélée des sous-requêtes IN/EXISTS de manière efficace. Hive ne prenant actuellement pas en charge les sous-requêtes IN/EXISTS, vous pouvez réécrire vos requêtes à l'aide de LEFT SEMI JOIN. L'utilisation de LEFT SEMI JOIN est limitée par le fait que la table de droite ne doit être référencée que dans la condition de jointure (clause ON), mais pas dans les clauses WHERE ou SELECT, etc.
SELECT a.key, a.value
FROM a
WHERE a.key in
(SELECT b.key
FROM B);
peut être réécrit pour:
SELECT a.key, a.val
FROM a LEFT SEMI JOIN b on (a.key = b.key)
Hive 0.13 prend désormais en charge IN/EXISTS dans la clause WHERE .. Le problème https://issues.Apache.org/jira/browse/Hive-784 a été résolu après 4 ans :)
J'utilise Hive version 0.7.1
et SELECT * FROM MYTABLE WHERE MYCOLUMN IN ('thisThing','thatThing');
J'ai testé cela sur un type de colonne STRING
et je ne suis donc pas sûr que cela fonctionne de manière universelle sur tous les types de données car j'ai remarqué, comme Wawrzyniec l'a mentionné plus haut, que le manuel du langage Hive indique qu'il n'est pas pris en charge et qu'il utilise plutôt LEFT SEMI JOIN
tester.
assumer table t1(id,name)
et table t2(id,name)
répertoriant uniquement les identifiants de t1
qui existent dans le t2 (clause IN
essentiellement)
Hive>select a.id from t1 a left semi join t2 b on (a.id=b.id);
répertoriant uniquement les identifiants de t1
qui existent uniquement dans t1
mais pas dans le t2 (clause NOT IN
essentiellement)
Hive>select a.id from t1 a left outer join t2 b on(a.id=b.id) where b.id is null;
Hive prend en charge les instructions IN/EXISTS depuis Hive 0.13 avec peu de limitations. Veuillez consulter https://cwiki.Apache.org/confluence/display/Hive/LanguageManual+SubQueries pour plus de détails.
Hive supporte parfaitement l'IN ... il ne supporte pas la sous-requête de la clause WHERE
les ingénieurs de Facebook proposent depuis 4 ans un ticket pour les fonctionnalités ouvertes ... https://issues.Apache.org/jira/browse/Hive-784?focusedCommentId=13579059