高木のブログ

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';

参考


Written by ytkg, Twitter, GitHub

Pixela