web-dev-qa-db-fra.com

Comment utiliser NOT IN dans Hive

Supposons que j'ai 2 tableaux comme indiqué ci-dessous. Maintenant, si je veux obtenir le résultat que sql donnera en utilisant, insert into B where id not in(select id from A) qui insérera 3 George dans le tableau B.

Comment implémenter cela dans la ruche?

Tableau A

id  name      
1   Rahul     
2   Keshav    
3   George

Tableau B

id  name      
1   Rahul     
2   Keshav    
4   Yogesh   
7
user8167344

NOT IN dans la clause WHERE avec des sous-requêtes non corrélées est pris en charge depuis Hive 0.1 qui a été publié il y a plus de 3 ans, le 21 Avril 2014.

select * from A where id not in (select id from B where id is not null);

+----+--------+
| id |  name  |
+----+--------+
|  3 | George |
+----+--------+

Sur les versions antérieures, la colonne de la table externe doit être qualifiée avec le nom/l'alias de la table.

Hive> select * from A where id not in (select id from B where id is not null);
FAILED: SemanticException [Error 10249]: Line 1:22 Unsupported SubQuery Expression 'id': Correlating expression cannot contain unqualified column references.

Hive> select * from A where A.id not in (select id from B where id is not null);
OK
3   George

P.s.
Lorsque vous utilisez NOT IN , vous devez ajouter is not null à la requête interne, sauf si vous êtes sûr à 100% que la colonne appropriée ne contient pas de valeurs nulles.
Une valeur nulle suffit pour que votre requête ne renvoie aucun résultat.

11