背景・目的
Redshiftのドキュメントの手順に倣い、RedshiftのデータをS3にUNLOADする。
内容
概要
UNLOADの特徴
- クエリの結果をS3にエクスポートする。
- ファイルの形式には、テキスト、CSV、Parquet、JSON等指定が可能
- デフォルトではパイプ(|)で区切られる。
- Parquetでエクスポートすると、テキスト形式と比較し、最大2倍高速で、ストレージ使用量も最大6倍少なくなる。
構文
UNLOAD ('select-statement')
TO 's3://object-path/name-prefix'
authorization
[ option [ ... ] ]
where option is
{ [ FORMAT [ AS ] ] CSV | PARQUET | JSON
| PARTITION BY ( column_name [, ... ] ) [ INCLUDE ]
| MANIFEST [ VERBOSE ]
| HEADER
| DELIMITER [ AS ] 'delimiter-char'
| FIXEDWIDTH [ AS ] 'fixedwidth-spec'
| ENCRYPTED [ AUTO ]
| BZIP2
| GZIP
| ZSTD
| ADDQUOTES
| NULL [ AS ] 'null-string'
| ESCAPE
| ALLOWOVERWRITE
| CLEANPATH
| PARALLEL [ { ON | TRUE } | { OFF | FALSE } ]
| MAXFILESIZE [AS] max-size [ MB | GB ]
| ROWGROUPSIZE [AS] size [ MB | GB ]
| REGION [AS] 'aws-region' }
| IAM_ROLE { default | 'arn:aws:iam::<AWS アカウント-id>:role/<role-name>' }
事前準備
- なお、事前にこちらでRedshiftのデータベースやテーブル、データのロードは完了している。
- UNLOADの際には、IAMポリシーに以下の権限を付与しておく。
- s3:GetObject
- s3:PutObject
- s3:ListBucket
実践
- 上記を参考にUNLOADを試してみる。
パイプ区切りファイルへの VENUE のアンロード(デフォルト区切り文字)
実行前
- redshift上のデータ件数を確認する。
select COUNT(1) from venue
count
===
202
unload ('select * from venue')
to 's3://{バケット名}/unload/venue/'
iam_role 'arn:aws:iam::{アカウントID}:role/{ロール名}';
実行後
- s3コマンドでファイルが出来ているか確認する。12ファイルに分割されて出力されている。
% aws s3 ls {バケット名}/unload/venue/
2022-03-16 22:50:09 456 0000_part_00
2022-03-16 22:50:09 725 0001_part_00
2022-03-16 22:50:09 571 0002_part_00
2022-03-16 22:50:09 828 0003_part_00
2022-03-16 22:50:09 756 0004_part_00
2022-03-16 22:50:09 761 0005_part_00
2022-03-16 22:50:09 689 0006_part_00
2022-03-16 22:50:09 608 0007_part_00
2022-03-16 22:50:09 533 0008_part_00
2022-03-16 22:50:09 678 0009_part_00
2022-03-16 22:50:09 516 0010_part_00
2022-03-16 22:50:09 635 0011_part_00
%
- 件数を確認してみる。
- 合計すると202件でテーブルの出力結果と一致する。
% for i in `seq 0 11`;do PREFIX=`printf %04d $i`; aws s3 cp s3://{バケット名}/unload/venue/$PREFIX\_part_00 - | wc -l ;done
12
19
16
22
19
21
18
15
14
17
13
16
%
- データフォーマットも確認してみる。
- 確かに、デフォルトのパイプ区切りで出力されている。
% aws s3 cp s3://{バケット名}/unload/venue/0000_part_00 - | head -5
5|Gillette Stadium|Foxborough|MA|68756
33|Ford Center|Oklahoma City|OK|0
42|FedExForum|Memphis|TN|0
46|Nassau Veterans Memorial Coliseum|Uniondale|NY|0
66|HP Pavilion at San Jose|San Jose|CA|0
%
考察
- UNLOADコマンドを実行することで、簡単にロードができる。
- 基本的な書き方は理解できた。他にもオプションがあるので、今後確認していく。
参考