高木のブログ

RedshiftのデータをS3にエクスポートする

· 130 words · 1 minutes to read
Tags: Redshift S3 AWS

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

参考 🔗

Categories


Tags