2017-08-28 4 views
1

Ich erzeuge mein usql-Skript dynamisch ein Tabellenschema zu lesen. Ich habe vorhandene tsv-Dateien, die auf dem Datensee-Speicher vorhanden sind, und ich muss die neuen Daten den vorhandenen tsv-Dateien anhängen. Wenn ich jedoch usql-Skript erzeuge, kann das Tabellenschema geändert werden, und in der Tabelle können zusätzliche Spalten hinzugefügt werden.Spalten mit Standardwerten - usql

Soweit ich weiß, müssen wir die gleiche Anzahl von Spalten in Usql-Skript wie die in tsv-Datei haben. Ist es möglich, diese neu hinzugefügten Spalten mit einigen Standardwerten zu versehen? für z.B.

@Result = EXTRACT id string,    
firstname string,    
lastname string,    
department string = "", 

emp_id int = 0 
    FROM @inputfile 
    USING Extractors.Tsv(); 

Wie Sie sehen können, Abteilung und emp_id Spalten neu hinzugefügt, und ich möchte, dass sie in der Ausgabedatei mit einigen Standardwerten einzufügen. Wenn Spalten bereits in der TSV vorhanden sind, nehmen Sie die Spaltenwerte auf, andernfalls fügen Sie einige Standardwerte für sie ein.

Danke.

Antwort

1

Sie können derzeit keine Standardspalten als Teil des Extrakt-Anweisungsschemas angeben. Die aktuellen empfohlenen Muster sind:

  1. die richtigen Spalten Ihrer TSV Versionen Extrakt (stellen Sie sicher, sie organisiert haben, so dass Sie wissen einfach, welche Spalten vorhanden sind) und dann UNION ALL BY NAME zur Vereinigung verwenden, um die Rowsets. Dadurch werden Null/Standardwerte zu den Rowsets hinzugefügt, die keine Spalten enthalten.

  2. Schreiben Sie einen benutzerdefinierten Extraktor, der eine SqlMap als Argument verwendet, um die fehlenden Spalten mit dem angegebenen Standardwert auszufüllen.

+0

Es funktioniert. Gibt es eine Möglichkeit, ein Löschspaltenszenario zu behandeln? Bestehende Tsv-Datei hat 5 Spalten und neue Tsv hat 4 Spalten. Wenn ich jetzt die Daten an die vorhandene tsv-Datei angehängt habe, sollte meine resultierende Datei nur 4 Spalten haben. – Lokesh

+0

Kannst du das als neue Frage stellen? Das macht es einfacher für später zu finden. –

+1

Ich habe einen Workaround dafür bekommen. Nehmen Sie die Ergebnismenge beider Dateien in separaten Variablen und OUTER UNION sie. Nehmen Sie nur die erforderlichen Spalten in der endgültigen Ergebnisvariablen zur Ausgabe. – Lokesh

Verwandte Themen