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