Open6
Amazon Redshift の UNLOADについて
Redshiftのクエリ結果をS3に出力するための方法
Redshift ServerlessでUNLOADの検証を行う
検証項目
- 実行方法
- パラメータ
- 制限
- 権限
データ準備
利用データ
データはKaggleのデータセットを利用
Amazon Reviews: Unlocked Mobile Phones
データアップロード
S3にバケットを用意
データをアップロード
スキーマ定義
AWS Glueにデータベースを作成
Amazon Athena で外部テーブルを作成
CREATE EXTERNAL TABLE IF NOT EXISTS amazon_reviews (
`product_name` STRING,
`brand_name` STRING,
`price` STRING,
`rating` STRING,
`reviews` STRING,
`review_votes` STRING
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
WITH SERDEPROPERTIES (
'separatorChar' = ',',
'quoteChar' = '"',
'escapeChar' = '\\'
)
STORED AS TEXTFILE
LOCATION 's3://redshift-unload-verification/'
TBLPROPERTIES ('skip.header.line.count' = '1');
Redshift Serverlessからクエリ
Workgroup, Namaspaceを作成し、クエリを実行
NamaspaceにアタッチするIAMにはS3の書き込み権限を付与する。
UNLOAD の実行
最小限
UNLOAD ('SELECT * FROM "awsdatacatalog"."redshift-unload"."amazon_reviews";')
to 's3://redshift-unload-verification/redshift/'
IAM_ROLE default;
複数に分割されて出力された
デフォルトでは、ファイルの | 区切り、拡張子はない状態で出力される。
ファイルのフォーマットを指定
FormatにはCSV, PARQUET, JSONのどれかが利用できる。
UNLOAD ('SELECT * FROM "awsdatacatalog"."redshift-unload"."amazon_reviews";')
to 's3://redshift-unload-verification/redshift/'
IAM_ROLE default
FORMAT AS CSV;
CSVフォーマットで出力された。
拡張子を指定
拡張子はEXTENSIONで指定できる。
UNLOAD ('SELECT * FROM "awsdatacatalog"."redshift-unload"."amazon_reviews";')
to 's3://redshift-unload-verification/redshift/'
IAM_ROLE default
FORMAT AS CSV
EXTENSION 'csv'
PARALLEL
PARALLEL を OFF にするとファイルが散らばらない。しかし、実行時間は長くなる。
UNLOAD ('SELECT * FROM "awsdatacatalog"."redshift-unload"."amazon_reviews";')
to 's3://redshift-unload-verification/redshift/'
IAM_ROLE default
FORMAT AS CSV
PARALLEL OFF
EXTENSION 'csv'
Header, ALLOWOVERWRITE
Headerオプションを付けると、SELECT の 名前でheader が出力される。
UNLOAD ('SELECT * FROM "awsdatacatalog"."redshift-unload"."amazon_reviews";')
to 's3://redshift-unload-verification/redshift/'
IAM_ROLE default
FORMAT AS CSV
PARALLEL OFF
ALLOWOVERWRITE
HEADER
EXTENSION 'csv'
MAXFILESIZE
MAXFILESIZEを設定すると設定値を上限として、超えた場合には複数に分割される。
5MB ~ 6.2GB までで設定可能で、MBの時の小数点以下は無視される。
UNLOAD ('SELECT * FROM "awsdatacatalog"."redshift-unload"."amazon_reviews";')
to 's3://redshift-unload-verification/redshift/'
IAM_ROLE default
FORMAT AS CSV
PARALLEL OFF
ALLOWOVERWRITE
MAXFILESIZE 5MB
EXTENSION 'csv'
圧縮
圧縮方法を設定した場合、MAXFILESIZEと組み合わせると圧縮後のファイルサイズで分割され出力される。EXTENSIONを設定しなくても、圧縮方法の拡張子が付与されている。
UNLOAD ('SELECT * FROM "awsdatacatalog"."redshift-unload"."amazon_reviews";')
to 's3://redshift-unload-verification/redshift/'
IAM_ROLE default
FORMAT AS CSV
PARALLEL OFF
ALLOWOVERWRITE
MAXFILESIZE 0.1GB
GZIP
EXTENSION 'gz';
制約について
- UNLOADを使用する場合、LIIMTとの併用はできない
- 出力されるファイル数に制限をかけることはできない
- 出力されるファイル数自体に制限はなさそう(?)だが、Redshiftの読み出し量に制約がある
権限
Redshift serverlessを使用している場合、アタッチしている IAM RoleにS3への書き込みを行える権限が必要