2016-05-17 11 views
0

Ich habe zwei Tabellen in hive:

Tabelle 1:Hive tritt Abfrage

1,Nail,maher,24,6.2 
2,finn,egan,23,5.9 
3,Hadm,Sha,28,6.0 
4,bob,hope,55,7.2 

Tabelle 2:

1,Nail,maher,24,6.2 
2,finn,egan,23,5.9 
3,Hadm,Sha,28,6.0 
4,bob,hope,55,7.2 
5,john,hill,22,5.5 
6,todger,hommy,11,2.2 
7,jim,cnt,99,9.9 
8,will,hats,43,11.2 

Gibt es eine Möglichkeit in Hive die neuen Daten in Tabelle 2 abrufen das gibt es in Tabelle 1 nicht?

In anderen Datenbanken-Tools würden Sie eine innere links/rechts verwenden. Aber innen links/rechts existiert nicht in Hive und Vorschläge, wie dies erreicht werden könnte?

Antwort

1

Wenn Sie mit Hive-Version> = 0,13 Sie können diese Abfrage verwenden:

SELECT * FROM A WHERE A.firstname, A.lastname ... IN (SELECT B.firstname, B.lastname ... FROM B); 

Aber ich bin nicht sicher, ob Hive mehrere coloumns in der Klausel IN unterstützt. Wenn nicht so etwas wie dies funktionieren könnte:

SELECT * FROM A WHERE A.firstname IN (SELECT B.firstname FROM B) AND A.lastname IN (SELECT b.lastname FROM B) ...; 
+0

Das funktionierte perfekt alles, was ich tun musste, war ** nicht in **. FYI: der erste hat nicht funktioniert, aber der zweite tat. vielen dank –

+0

Danke für diese Information – ZeusNet

0

Es könnte klüger sein, die Felder zusammen NICHT IN vor der Prüfung zu verketten:

SELECT * 
FROM t2 
WHERE CONCAT(t2.firstname, t2.lastname, CAST(t2.val1 as STRING), CAST(t2.val2 as STRING)) NOT IN 
    (SELECT CONCAT(t2.firstname, t2.lastname, CAST(t2.val1 as STRING), CAST(t2.val2 as STRING)) 
    FROM t1) 

Ausführung einer Folge von NOT IN Unterabfragen können Sie fehlerhaften Ergebnissen führen .

Aus dem obigen Beispiel würde ein neuer Datensatz mit den Werten ('nail', 'egan', 28, 7.2) bei sequentiellen NOT IN-Anweisungen nicht als neu erscheinen.

Verwandte Themen