2017-08-17 6 views
0

Im Folgenden finden Sie die DatenVerbinden Sie mehrere Tabellen in Hive

gesetzt
Table1 
col1,col2 
key1,k1 
key2,k2 
key3,k3 


Table2 
col1,col3 
key1,k11 
key2,k22 
key4,k44 


Table3 
col1,col4 
key1,k111 
key2,k222 
key5,k555 

ich die 3 Tabellen auf col1 Basis beitreten müssen. Unten ist meine Abfrage

wählen a.col1, a.col2, b.col3, c.col4 von table1 eine volle äußere Join Tabelle2 b volle äußere Join Tabelle3 c;

Die erwartete Ausgabe unter

Erwartete Ausgabe angezeigt wird:

Sie tun
col1,col2,col3,col4 
key1,k1,k11,k111 
key2,k2,k22,k222 
key3,k3, , 
key4, ,k44, 
key5, , ,k555 
+0

Wollen Sie es ein Cross-Join sein? Vielleicht meinst du 'table1.col1 = table2.col1 und table1.col1 = table3.col1'? – Andrew

Antwort

2
  1. Basierend auf Ihrem gewünschten Ergebnis, müssen Sie alle Ihre Tabellen auf col1 verbinden.
  2. Um sicherzustellen, dass Sie immer einen Wert in col1 haben, müssen Sie coalesce sie zusammen (koaleszieren gibt Ihnen die erste nicht Null Wert).
  3. Ihre anderen Spalten zusammenheften (und ersetzen nulls mit einem leeren Raum, verbinden verschmelzen mit concat:

Putting, dass alle zusammen:

select 
coalesce(t1.col1,t2.col1,t3.col1) as col1, 
concat(coalesce(t1.col2,' '),',',coalesce(t2.col2,' '),',',coalesce(t3.col2,' ')) 
from 
table1 t1 
full join table2 t2 
    on t1.col1 = t2.col1 
full join table3 t3 
    on t1.col1 = t3.col1 
+0

key1 \t k1, k11, k111 key2 \t k2 , k22, k222 schlüssel3 \t k3, key4 \t, K44, key5 \t, K555 Nicht Komma Wert immer nach dem ersten Spalte –

+0

My bad .. Es ist mit den Veränderungen gearbeitet .. –

1

Da vollständige äußere Verknüpfung, wird es eine gute Idee sein COALESCE für Spalte col1

etwas zu tun :

select 
    COALESCE(a.col1, b.col1, c.col1) as col1, 
    a.col2, 
    b.col3, 
    c.col4 
from 
    table1 a 
    full outer join table2 b 
     on t1.col1 = t2.col1 
    full outer join table3 c 
     on t1.col1 = t3.col1; 

Wir brauchen t o haben Sie auch eine Join-Bedingung, um ein kartesisches Produkt in der Ergebnismenge zu vermeiden.

+0

Die obige Abfrage ergab 27 Zeilen .. wo die erwartete Ausgabe 5 Zeilen ist. –

Verwandte Themen