in redshift postgresql kann ich Spalten mit der Kopierfunktion überspringen

8
  • Ich habe eine .csv-Tabelle (t1) mit Spalten: c1, c2, c3 in Amazon S3-Speicher
  • Ich möchte das in amazon redshift
  • kopieren
  • Ich erstelle die Tabelle mit den Spalten: c1, c2, c3 wobei alle Spalten nullbar sind
  • Ich kopiere mit dem Befehl:

    kopiere t1a (c1, c3) von t1

  • Ich habe erwartet, dass c1 und c3 von t1 kopiert werden und der Standard-Null-Wert in c2 platziert wird, sodass eine Zeile in t1a aussehen könnte (c1_rowX, null, c3_rowX).

  • Stattdessen erhalte ich einen Typfehler, weil c2 (string type) von t1 in c3 (int type) von t1a umgewandelt wird.

  • Der Kopierbefehl funktioniert einwandfrei, wenn ich die Spalten nicht angeben:

    kopiere t1a von t1

  • Ich habe einen Link zur Dokumentation des redshift copy-Befehls eingefügt:

Ссылка

  • Hauptfrage ist ein Problem mit meiner Verwendung von Spalten angeben. Danke
Elm 11.06.2013, 23:57
quelle

2 Antworten

10

Wenn Sie den Vorverarbeitungsteil überspringen möchten, können Sie die zu überspringende Spalte als CHAR(1) definieren und dann einen TRUNCATECOLUMNS -Parameter für einen COPY -Befehl verwenden:

%Vor%

Das TRUNCATECOLUMNS ignoriert alle Daten, die länger als in einem Tabellenschema definiert sind, während des Imports, so dass alle Daten in dieser Spalte in 1 Zeichen gekürzt werden.

Das ist nur ein Hack, eine Vorverarbeitungs-Eingabedatei wird empfohlen, aber manchmal ist nur ein Hack nötig.

    
Tomasz Tybulewicz 12.06.2013 08:56
quelle
4

Detaillierte Spaltenzuordnungen werden nicht direkt in COPY unterstützt, es sei denn, Amazon / ParAccel fügt ihrer PostgreSQL-Verzweigung, die nicht in der Hauptlinie enthalten ist, etwas hinzu.

Was Sie in diesem Fall normalerweise tun, ist ein Skript, das die Daten massiert / packt - lesen Sie die CSV, transformieren Sie sie wie gewünscht, und senden Sie die Zeile durch die PostgreSQL-Verbindung an einen COPY ... FROM STDIN -Befehl.

Alternativ können Sie COPY die gesamte ursprüngliche CSV-Datei in eine Tabelle übernehmen und diese Daten dann mit INSERT INTO ... SELECT in die reale Zieltabelle transformieren.

    
Craig Ringer 12.06.2013 00:03
quelle

Tags und Links