Amazon RedshiftのUNLOADコマンド: PARALLELオプションで出力ファイルを一括化

2014.05.14

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

先日5/6に、Amazon RedshiftのUNLOADコマンドに関する機能改善が発表されました。UNLOADコマンドとは、Redshiftクラスタ内のテーブルに格納されているレコードをエクスポートする際に用いるコマンドになります。

このエントリでは、そのUNLOADコマンドに追加されたオプション機能『PARALLEL』についてその内容を確認してみたいと思います。

UNLOADコマンドでPARALLEL OFFコマンドを使う事によって出力ファイルを1つにまとめる事が出来るようになった

You can unload table data serially to a single file on Amazon S3 by running the UNLOAD command with the PARALLEL OFF option. (UNLOADコマンドをPARALLEL OFFオプションを付けて実行する事により、1つのファイルにテーブルアンロード結果をまとめる事が出来るようになりました。)

内容としては上記見出しのポイントに尽きます。では早速試してみましょう。まずは既存の状態から。テーブル容量=2.4GB程のテーブルに対して全件取得した内容を、所定のS3バケットにプレフィックスを付けてアンロードしてみます。

# \timing
タイミングは on です。
# UNLOAD ('SELECT * FROM sampletable') TO 's3://unload-files/sample-table-'
# CREDENTIALS 'aws_access_key_id=XXXXXXXXX;aws_secret_access_key=XXXXXXXXX'
# DELIMITER ',' ADDQUOTES GZIP;
UNLOAD
時間: XXXX.XXX ms

コマンド実行後のS3バケットを確認してみます。ファイルはこのような形で出力されました。

redshift-unload-00

次いでPARALLEL OFFオプションを付けて実行してみます。オプションを指定しない場合よりも時間は掛かっているようでした。

タイミングは on です。
# UNLOAD ('SELECT * FROM sampletable;') TO 's3://unload-files/sample-table-'
# CREDENTIALS 'aws_access_key_id=XXXXXXXXX;aws_secret_access_key=XXXXXXXXX'
# DELIMITER ',' ADDQUOTES GZIP
# PARALLEL OFF;
UNLOAD
時間: XXXX.XXX ms

実行のS3バケットの様子(上記処理で生成されたファイル群は削除した上で実行しています)。確かに1つにまとめられてますね!

redshift-parallel-option-01

テーブルデータサイズが所定の容量を超える場合は、追加でファイルが生成される

If the size of the data is greater than the maximum file size of 6.2 GB, UNLOAD creates additional files. (データサイズが6.2GBを超える場合、追加でファイルが作成されます)

一方で、上記の様にテーブルのサイズが一定量を超える場合は、これまで同様にファイルが分かれた形で生成されるようです。こちらも試してみましょう。

大きめの容量となっているテーブルに対し、UNLOADを実行してみます。

タイミングは on です。
# UNLOAD ('SELECT * FROM sample_big_table;') TO 's3://unload-files/sample-big-table-'
# CREDENTIALS 'aws_access_key_id=XXXXXXXXX;aws_secret_access_key=XXXXXXXXX'
# DELIMITER ',' ADDQUOTES GZIP
# PARALLEL OFF;
UNLOAD
時間: XXXX.XXX ms

実行後。確かに、指定の6.2GBを超えるファイルが生成される場合は追加でファイルが生成されていますね。

redshift-parallel-option-02

まとめ

以上、RedshiftのUNLOADコマンド新機能『PARALLELオプション』について試してみました。

正確な時間までは測っていないですが、このオプションを使わない時と使う時では、使った時の方がだいぶ時間が掛かる印象でした。従来であれば小さめのファイルを適宜出力していた所に対しファイルを連結する、大きなファイルを作成しているという点で処理に対してリソースを費やしているのでしょうか。ともあれ、エクスポートファイルの個数がコンパクトになるのは管理上嬉しい面でもあります。状況に応じてこれらのパラメータを上手く使って管理して行きたいところですね。