Redshiftにデータを投入する方法は色々用意されていまうが、一般的には(且つ推奨されている方法では)、RedshiftのCOPYコマンドを利用する方法です。
基本的にロードしたいファイルをS3上に置いておき、COPYすることになるのですが、COPYコマンドのみでの実行では、S3のフォルダ単位で指定はできるものの、ファイル単位での指定はできません。その場合に利用するのがマニュフェスト・ファイルとなります。マニュフェストファイルとは、COPY時にロードしたいファイルの情報をJOSN形式で記載したものになります。
マニュフェスト・ファイルのフォーマットは以下となります。 mandatory
フラグは、対象ファイルが見つからない場合での動作になります。trueではエラーを返してCOPY処理は実行されません。falseでは見つからないファイルを無視して、COPY処理が実行されます。
{ "entries":[ { "url":"s3://redshift-data/test/000001.csv","mandatory":true }, { "url":"s3://redshift-data/test/000002.csv","mandatory":true }, { "url":"s3://redshift-data/test/000003.csv","mandatory":true } ] }
上記のCOPYさせたいファイル情報を記載したファイルを、S3上の適当なパスに置いてあげます。そして、COPYコマンドを実行する際に、このマニュフェスト・ファイルを指定します。
COPYコマンド例はこちら。 MANIFEST
というオプションを付与しています。通常のCOPYコマンド実行時に指定できるその他オプション(GZIP, BLANKSASNULL等)も、指定できます。Redshiftから、ロードするファイルのみでなく、マニュフェスト・ファイルにもアクセスできるよう、必要権限をもったIAMロールを付与してあげてください。
COPY public.test_table FROM 's3://redshift-data/test.manifest' iam_role 'arn:aws:iam::XXXXXXXXXX:role/ServiceRoleForRedshift' MANIFEST;
公式のマニュアルはこちらです。