2017-10-20 39 views
0

Deux tables Table1 et tableau 2intérieur Ruche rejoint mauvais résultat

hive> select * from table1 where dt=20171020; 
OK 
a 1 1 p 10 20171020 
b 2 2 q 10 20171020 
c 3 3 r 10 20171020 
d 4 4 r 10 20171020 

hive> select * from table2 where dt=20171020; 
OK 
a 1 1 p 10 20171020 
b 2 2 t 10 20171020 
c 3 3 r 10 20171020 

hive> select * from table1 t1 
    > join table2 t2 
    > on t1.c1=t2.c1 
    > where 
    > t1.dt=20171020 and t2.dt=20171020 and 
    > t1.c2 <> t2.c2 or t1.c3 <> t2.c3 or t1.c4 <> t2.c4 or t1.c5 <> t2.c5; 

Result: 
a 1 1 p 20 20171016 a 1 1 p 10 20171015 
a 1 1 p 20 20171016 a 1 1 p 10 20171020 
b 2 2 q 20 20171016 b 2 2 t 10 20171015 
b 2 2 q 20 20171016 b 2 2 t 10 20171020 
c 3 3 r 20 20171016 c 3 3 r 10 20171015 
c 3 3 r 20 20171016 c 3 3 r 10 20171020 
b 2 2 q 10 20171020 b 2 2 t 10 20171015 
b 2 2 q 10 20171020 b 2 2 t 10 20171020 
a 19 19 p 20 20171019 a 1 1 p 10 20171015 
a 19 19 p 20 20171019 a 1 1 p 10 20171020 

Je veux suivant la ligne parce que cette ligne ont été changés, comment hive rejoint dans le code ci-dessus?

b 2 2 q 10 20171020 

Répondre

0

Essayez ceci.Votre jointure doit également être mis à jour.

SELECT * 
FROM table1 t1 
     JOIN table2 t2 
     ON t1.c1 = t2.c1 
      AND t1.dt = t2.dt 
WHERE t1.dt = 20171020 
     AND (t1.c2 <> t2.c2 
       OR t1.c3 <> t2.c3 
       OR t1.c4 <> t2.c4 
       OR t1.c5 <> t2.c5); 
+0

Quelle était l'erreur dans ma logique? – rajs

+0

en pratique, nous devons utiliser des dates différentes liket1.dt = 20171019 et t2.dt = 20171020. Quelle est l'utilité d'ajouter dt en condition? – rajs

+0

si vous n'ajoutez pas dt dans join, il s'appliquera OU condition pour toutes les dates. Vérifiez également les parenthèses pour OU. Pour différentes dates, vous pouvez exclure la date mais avoir OU en parrnthèses –