RedshiftのデータをS3にエクスポートする
2021/08/03
RedshiftのデータをUNLOADコマンドを使ってテーブル単位でS3にエクスポートする手順
手順
バケット作成
特筆すること無いので省略
IAMロール作成
- [AWS servise]は[Redshift]を選択
- [Select your use case]は[Redshift - Customizable]を選択
- アクセス権限ポリシーポリシーを作成してアタッチする
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:PutObject"
],
"Resource": [
"arn:aws:s3:::mybucket/*",
"arn:aws:s3:::mybucket"
]
}
]
}
s3:ListBucket権限はUNLOADコマンドでALLOWOVERWRITEオプションを使う場合は不要
IAMロールをRedshiftクラスターに関連付けをする
Redshiftのコンソール画面から関連付けをする
UNLOADコマンドを実行
> unload ('select * from users') to 's3://mybucket/' iam_role 'arn:aws:iam::0123456789012:role/RedshiftUnloadToS3' CSV GZIP;
INFO: UNLOAD completed, 728635600 record(s) unloaded successfully.
UNLOAD
CSV形式かつGZIPで圧縮したかったので、末尾にオプションを付けた
約7億レコードくらいのテーブルで13分掛かった
limit句は使えない
少ないレコードで試したいと思ってlimit句で件数を絞っても効かない
件数を絞りたいときを以下のようなクエリにする
> unload ('select * from users where id in (select id from users limit 10)') to 's3://mybucket/' iam_role 'arn:aws:iam::0123456789012:role/RedshiftUnloadToS3';