2017-08-20 4 views
1

Ich habe eine große Manifest-Datei mit ungefähr 460.000 Einträgen (alle S3-Dateien), die ich nach Redshift laden möchte. Aufgrund von Problemen, auf die ich keinen Einfluss habe, enthalten einige (möglicherweise ein Dutzend oder mehr) dieser Einträge einen fehlerhaften JSON, der dazu führt, dass ein COPY-Befehl fehlschlägt, wenn ich das gesamte Manifest gleichzeitig übergebe. Die Verwendung von COPY mit einem Schlüssel-Präfix schlägt ebenfalls auf die gleiche Weise fehl.Verwenden mehrerer Manifest-Dateien zum Laden von Redshift von S3?

Um dies zu umgehen habe ich ein Python-Skript geschrieben, das die Manifest-Datei URL für URL durchläuft und einen COPY-Befehl für jeden unter Verwendung von psycopg2 ausgibt. Das Skript erfasst und protokolliert außerdem alle Fehler, um sicherzustellen, dass das Skript auch dann ausgeführt wird, wenn es auf eine fehlerhafte Datei stößt, und ermöglicht es uns, die fehlerhaften Dateien zu finden und zu beheben.

Das Skript läuft jetzt seit etwas mehr als einer Woche auf einer Ersatz-EC2-Instanz und ist nur zu ca. 75% abgeschlossen. Ich möchte die Laufzeit verringern, da dieses Skript erneut verwendet wird.

Mein Verständnis von Redshift ist, dass COPY-Befehle parallel ausgeführt werden, und damit hatte ich eine Idee - wird die Manifest-Datei in kleinere Stücke aufteilen und dann das Skript jeden dieser Stücke reduzieren die Zeit alle zu laden die Dateien?

Antwort

1

COPY-Befehl kann mehrere Dateien sehr schnell und effizient parallel laden. Wenn Sie also einen COPY-Befehl für jede Datei in Ihrer Python-Datei ausführen, wird dies viel Zeit in Anspruch nehmen, da Sie das parallele Laden nicht nutzen.

Also vielleicht können Sie ein Skript schreiben, um schlechte JSONs in Ihrem Manifest zu finden und sie rauswerfen und eine einzige Kopie mit dem neuen sauberen Manifest ausführen?

Oder wie Sie vorgeschlagen, würde ich empfehlen, Manifest-Datei in kleine Stücke zu teilen, so dass COPY für mehrere Dateien gleichzeitig ausgeführt werden kann. (KEIN COPY-Befehl für jede Datei)

Verwandte Themen