2017-01-05 6 views
1

Ich bin neu in Hive und mein SQL-Wissen ist etwas rostig daher Posting Frage auf SO.Hive: Fehlende Spalten ausfüllen

Ich habe Daten aus einer SAP-Tabelle, in denen Werte für eine Spalte fehlen. Ich würde gerne wissen, wie ich diese Spalten füllen kann.

Beispiel:

+----------+-----------+--------+ 
| EBELN | BELNR  | EBELP | 
|----------+-----------+--------| 
| 1  | 123  | 001 | 
|----------+-----------+--------| 
|   | 123  | 002 | 
|----------+-----------+--------| 
|   | 123  | 003 | 
+----------+-----------+--------+ 

In obiger Tabelle sind alle drei Reihen sind miteinander verwandt, aber Wert für EBELN Spalte ist nur in der ersten Reihe.

Wenn ich diese Tabelle mit anderen Tabelle unter Verwendung EBELN Spalte als Join-Schlüssel verbinden, nur die erste Zeile erscheint in der Join.Ich möchte alle drei Zeilen in der Ausgabe Join bringen.

Expected output: 
    +----------+-----------+--------+ 
    | EBELN | BELNR  | EBELP | 
    |----------+-----------+--------| 
    | 1  | 123  | 001 | 
    |----------+-----------+--------| 
    | 1  | 123  | 002 | 
    |----------+-----------+--------| 
    | 1  | 123  | 003 | 
    +----------+-----------+--------+ 

I-Ausgang erwarten, so etwas zu sein, so dass ich diese Tabelle mit anderer Tabelle unter Verwendung EBELN Spalt beitreten kann.

Die Tabelle, zu der ich mich verbinde, enthält keine BELNR oder EBELP Spalte, so dass ich diese Spalten nicht für den Beitritt verwenden kann.

Ich würde gerne wissen, ob ich self join verwenden kann oder gibt es noch etwas, das ich hier verwenden kann.


Hinzufügen weiterer Informationen. Ich habe andere Tabelle kann es "ABCD" nennen. Diese Tabelle hat EBELN Spalte.

+----------+-----------+--------+ 
    | EBELN | COL12 | COL13 | 
    |----------+-----------+--------| 
    | 1  | ABC  | LMN | 
    |----------+-----------+--------| 
    | 2  | DEF  | OPQ | 
    |----------+-----------+--------| 
    | 3  | GHI  | RST | 
    +----------+-----------+--------+ 

Ich habe versucht, diese „ABCD“ Tabelle mit „EKPF“ Tabelle EBELN Spalt zu verbinden.

Ich brauche alle Zeilen zu bekommen, wo BELNR Zahl gleich ist, aber da BELNR Spalte nicht in ABCD Tabelle ist, kann ich es nicht für die Verbindung verwenden.

Finale verbunden Ausgabe sollte so aussehen

+----------+-----------+--------+--------+--------+ 
    | EBELN | BELNR  | EBELP | COL12 | COL13 | 
    |----------+-----------+--------+--------+--------| 
    | 1  | 123  | 001 | ABC | LMN | 
    |----------+-----------+--------+--------+--------| 
    |   | 123  | 002 | ABC | LMN | 
    |----------+-----------+--------+--------+--------| 
    |   | 123  | 003 | ABC | LMN | 
    |----------+-----------+--------+--------+--------| 
    | 2  |   |  | DEF | OPQ | 
    |----------+-----------+--------+--------+--------| 
    | 3  |   |  | GHI | RST | 
    +----------+-----------+--------+--------+--------+ 
+0

Wie hängen Reihen? durch BELNR Spalte? Wie sollte die EBELN-Spalte berechnet werden? – leftjoin

+0

Sie können Self-Join oder eine andere Methode für die EBELN-Berechnung verwenden, aber Sie müssen zuerst die Regel definieren. – leftjoin

+0

Hallo, Danke für deine wertvolle Zeit. Ich habe die Fragedetails aktualisiert, um zu reflektieren, was ich vorhabe. – Shekhar

Antwort

0

Von Hive Sie eine der Conditional Functions Funktion können Sie Ihre Ausgabe zu erreichen.

einfach tun, um diese bei Verwendung von COALSCE:

SELECT COALESCE(EBELN, 1L) AS EBELN, BELNR,EBELP FROM your_table; 

Auch von Hive 0,11 ab können Sie

SELECT NVL(EBELN, 1) AS EBELN, BELNR,EBELP FROM your_table; 
0

NVL-Funktion verwenden Wenn Sie für alle Datensätze aus der ersten (linken) Tabelle erzeuge einen entsprechenden Datensatz im Ergebnis, auch wenn es in der zweiten (RECHTEN) Tabelle keine Übereinstimmung gibt, verwenden Sie LEFT beitreten. Für den umgekehrten Fall benutze man RIGHT beitreten. Da Sie Datensätze von beiden Seiten des Joins speichern möchten, müssen Sie FULL OUTER beitreten.

SELECT COALESCE(t1.EBELN, t2.EBELN), t1.BELNR, t1.EBELP , 
     t2.COL12, t2.COL13 
    FROM EKPF t1 
    FULL OUTER JOIN ABCD t2 ON t1.EBELN = t2.EBELN 

COALESCE hier garantiert Ihnen die Spalte bevölkerten beitreten wird (wie in Ihrem Beispiel).

würde der Ausgang sein:

+----------+-----------+--------+--------+--------+ 
| EBELN | BELNR  | EBELP | COL12 | COL13 | 
|----------+-----------+--------+--------+--------| 
| 1  | 123  | 001 | ABC | LMN | 
|----------+-----------+--------+--------+--------| 
|   | 123  | 002 | ABC | LMN | 
|----------+-----------+--------+--------+--------| 
|   | 123  | 003 | ABC | LMN | 
|----------+-----------+--------+--------+--------| 
| 2  |   |  | DEF | OPQ | 
|----------+-----------+--------+--------+--------| 
| 3  |   |  | GHI | RST | 
+----------+-----------+--------+--------+--------+ 
Verwandte Themen