概要
S3上にあるParquetファイルをRedshift内部テーブルへインポートするためCOPYコマンドを実行。データ量が多く、COPYコマンド完了までに数時間かかった。その間、別のバッチが動き、COPYコマンド実行中のS3パスに対してのデータ出力とCOPYコマンド実行が走ってしまった。その際の挙動について記載します。
(2021/07/15時点の内容です。)
ケース
S3上にあるParquetファイルをRedshift内部テーブルへインポートするためCOPYコマンドを実行。(データ量が多く、完了に数時間かかる)
上記実行中に別のデータ処理バッチが動き以下のヤバそうな処理が実行される。(上記実行開始してから数分後です)
(1)上記COPYコマンドのFROM句に指定しているS3パス配下にParquetファイルを出力(Unloadコマンドによる)
(2)さらに(1)で出力されたファイルをRedshift内部テーブルへインポートするCOPYコマンドを実行(対象テーブルは上記COPYコマンドと同一)
挙動
まず(2)については、処理が開始されない(エラー終了するわけでもない)。最初に実行しているCOPYコマンドによって該当テーブルへの書き込み処理がロックされてる感じ? (コマンド実行は中断させたので放置していたらどうなっていたかはわかりません)
(1)については、出力は問題なくされました。気になるところは最初のCOPYで、この後から出力されたファイルがCOPYの対象になるかどうかですが、対象になりませんでした。タイミングによっては変な動きとかするかもしれませんが、基本的にCOPYコマンドを実行した時点でCOPY対象をファイル単位で確定させているという感じですかね。
感想
上記のケースは特殊ケースかつRedshiftの操作としてよろしくないものであり、本来防ぐべき事象だったかと思いますが、Redshift側の挙動は非常に助かる最善と言っていい動きだったと思います。