2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

RedshiftのUNLOADコマンドを試してみた

Posted at

背景・目的

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コマンドを実行することで、簡単にロードができる。
  • 基本的な書き方は理解できた。他にもオプションがあるので、今後確認していく。

参考

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?