2016-05-10 4 views
0

Ich habe eine CSV, die eine variable Struktur hat, von der ich nur die ersten 4 Werte nehmen möchte. Die CSV in S3 gespeichert hat zwischen 7 und 8 Felder, und ich würde nur die erste 4. ich folgende vorbereitete Anweisung zu verwenden, haben versucht, zu übernehmen möchten:DataPipeline: Benutze nur die ersten 4 Werte von CSV in Pipeline

INSERT INTO locations (timestamp, item_id, latitude, longitude) VALUES (?, ?, ?, ?);

aber ich erhalte:

Parameter index out of range (5 > number of parameters, which is 4).

die ich glaube, bedeutet, dass es in den anderen Variablen in der CSV zu laden versucht. Ist es möglich, nur die ersten 4 Werte zu nehmen? Oder anders mit CSV mit variabler Länge umgehen?

Antwort

1

Verwenden Sie die Option transformSql. Sie haben nicht erwähnt, in was Sie laden möchten: redshift Dok:

Der SQL SELECT-Ausdruck, der zum Umwandeln der Eingabedaten verwendet wird. Wenn Sie Daten aus DynamoDB oder Amazon S3 kopieren, erstellt AWS Data Pipeline eine -Tabelle namens staging und lädt sie zunächst dort. Daten aus dieser Tabelle werden zum Aktualisieren der Zieltabelle verwendet. Wenn die transformSql-Option angegeben wird, wird eine zweite Staging-Tabelle aus der angegebenen SQL-Anweisung erstellt. Die Daten aus dieser zweiten Zwischenspeichertabelle werden dann in der endgültigen Zieltabelle aktualisiert. transformSql muss in der Tabelle staging ausgeführt werden, und das Ausgabeschema von transformSql muss dem endgültigen Schema der Zieltabelle entsprechen.

Verwandte Themen