2017-10-23 3 views
0

Ich versuche, eine Tabelle durch Zusammenführen von anderen 3 Tabellen zu überschreiben. In der folgenden Art und Weise:Hive - Beim Hinzufügen einer neuen Spalte zu einer Tabelle bekomme ich: SemanticException [Fehler 10002]: Ungültige Spaltenreferenz

  1. Ich werde alle Spalten aus der tabelle1
  2. ich nur zwei Spalten von table2
  3. nehmen werde ich eine neue Spalten hinzufügen, basierend auf den Werten einer Spalte in Tabelle 3

die drei Tabellen: Tabelle 1, Tabelle 2 und Tabelle 3 haben als Schlüssel-ID

Dies ist die Abfrage ich versuche (so weit ich es ohne die INSERT OVERWRITE TABLE final_table, nur mit der SELECT t versuch o die Ergebnisse sehen, die in die Tabelle eingefügt werden würde)

--INSERT OVERWRITE TABLE final_table 
select 
     t1.*, 
     t2.field1, 
     t2.field2, 
     CASE WHEN (t3.indicator = 'F' OR 
        t3.indicator = 'O' 
        ) THEN 'Y' ELSE 'N' END AS new_field3 
from 
table1 t1 
LEFT OUTER JOIN table2 t2 
ON (t1.id = t2.id) 
LEFT OUTER JOIN table3 t3 
ON (t1.id = t3.id); 

Aber im CASE WHEN ich die folgende Störung erhalte:

Error while compiling statement: FAILED: SemanticException [Error 10002]: Line 7:17 Invalid column reference 'new_field3'

Was mache ich falsch?

Antwort

1

Ich sehe ein semantischer Fehler nicht, sondern versuchen, die Abfrage wie das Schreiben:

select t1.*, t2.field1, t2.field2, 
     (case when t3.indicator in ('F', 'O') then 'Y' else 'N' 
     end) as new_field3 
from table1 t1 left outer join 
    table2 t2 
    on t1.id = t2.id left outer join 
    table3 t3 
    on t1.id = t2.id; -- ??? 

Die meisten Änderungen Kosmetik sind. IN wird anstelle von Listen der OR Ausdrücke empfohlen - wenn auch nur weil es einfacher zu schreiben und zu lesen ist.

Noch wichtiger ist, dass die join Bedingungen auf nicht enthalten.

Keines von beiden - nach meinem besten Wissen - würde eine semantische Ausnahme erzeugen. Das zweite bedeutet jedoch, dass die Abfrage nicht das tut, was Sie gerade tun.

+0

Danke, Sie beginnen zu antworten, bevor ich meine Bearbeitung in dem Teil abgeschlossen habe, auf den Sie hingewiesen haben: "Noch wichtiger ist, dass die Join-Bedingungen in Tabelle3 keine Tabelle3 enthalten". –

Verwandte Themen