2017-08-20 4 views
1

私はRedshiftにロードしたい約460,000のエントリ(すべてのS3ファイル)を含む大きなマニフェストファイルを持っています。私のコントロールできない問題のために、これらのエントリのいくつか(多分数十以上)が悪いJSONを含んでいるため、マニフェスト全体を一度に渡すとCOPYコマンドが失敗することになります。キー接頭辞付きのCOPYの使用も同じ方法で失敗します。複数のマニフェストファイルを使用してS3からRedshiftにロードしますか?

これを回避するには、一度に1つのURLをマニフェストファイルに書き込んで、psycopg2を使用してCOPYコマンドを発行するPythonスクリプトを作成しました。スクリプトはさらに、エラーをキャッチしてログに記録して、悪いファイルを見つけてもスクリプトが実行されるようにし、悪いファイルを見つけて修正できるようにします。

このスクリプトは、余分なEC2インスタンスでわずか1週間以上実行されており、約75%しか完了していません。このスクリプトは再び使用されるため、実行時間を短縮したいと考えています。

Redshiftについて私が理解しているのは、COPYコマンドが並行して実行されているということです。マニフェストファイルを小さなチャンクに分割してスクリプトを実行すると、すべてのロードにかかる時間が短縮されますファイル?

答えて

1

COPYコマンドは、複数のファイルを非常に高速かつ効率的に並列に読み込むことができます。そのため、Pythonファイル内の各ファイルに対して1つのCOPYコマンドを実行すると、並列ロードを利用していないため、時間がかかることになります。

マニフェストに悪いJSONを見つけ出し、それらを蹴飛ばして新しいクリーンマニフェストで1つのCOPYを実行するためのスクリプトを書くことができますか?

提案したように、一度に複数のファイルに対してCOPYを実行できるように、マニフェストファイルを小さなチャンクに分割することをおすすめします。 (各ファイルに対して単一のCOPYコマンドではない)

関連する問題