RedshiftでJSONファイル形式のUNLOADを試してみた
こんにちは!DA(データアナリティクス)事業本部 サービスソリューション部の大高です。
先日、RedshiftのUNLOADがJSONファイルフォーマットに対応した旨のアナウンスがありました。
今回、この機能を実際に触りながら試してみたいと思います。
前提条件
今回試してみるRedshiftは、以下になります。
- リージョン
- ap-northeast-1
- クラスターバージョン
- 1.0.35649
なおアナウンスでは、「すべての商用リージョン」で利用可能との記載がされています。
Support for exporting JSON data using UNLOAD is available in all AWS commercial Regions.
このクラスタにはIAM Roleの設定を行い、S3のバケットへファイルを出力(UNLOAD)できるように設定した状態となっています。
テーブルとデータの準備
今回は2パターン用意してみます。1つは通常のテーブル、もう1つはSUPER型のカラムを含むテーブルとします。
CREATE TABLE prefecture ( code INTEGER, name VARCHAR ); INSERT INTO prefecture (code, name) VALUES (1, '北海道'); INSERT INTO prefecture (code, name) VALUES (13, '東京都'); INSERT INTO prefecture (code, name) VALUES (47, '沖縄県'); CREATE TABLE city ( pref_code INTEGER, detail SUPER ); INSERT INTO city (pref_code, detail) VALUES (13, JSON_PARSE('{"code": 13101, "name": "千代田区"}'));
通常のテーブルとしてprefecture
を、SUPER型を含むテーブルとしてcity
を用意してみました。
JSON形式でUNLOADしてみる
では、早速UNLOADをしてみます。他のファイル形式と同様にFORMAT
オプションにJSON
をつければ良さそうですね。
まずは、通常のテーブルprefecture
からやってみます。
UNLOAD (' SELECT code, name FROM prefecture ') TO 's3://foo-bar/redshift/unload/prefecture/' FORMAT JSON IAM_ROLE 'arn:aws:iam::123456789012:role/cm-ootaka-daisuke-redshift-role' ;
実行すると0000_part_00.json
というファイルが指定したパスにUNLOADされていました。中身は以下の通りです。
{"code":1,"name":"北海道"} {"code":13,"name":"東京都"} {"code":47,"name":"沖縄県"}
いわゆるJSONL(JSON Lines)の形式で出力されるようですね。
次に、SUPER型を含むテーブルcity
でも試してみます。
UNLOAD (' SELECT pref_code, detail FROM city ') TO 's3://foo-bar/redshift/unload/city/' FORMAT JSON IAM_ROLE 'arn:aws:iam::123456789012:role/cm-ootaka-daisuke-redshift-role' ;
こちらも実行すると0000_part_00.json
というファイルが指定したパスにUNLOADされていました。中身は以下の通りです。
{"pref_code":13,"detail":{"code":13101,"name":"千代田区"}}
SUPER型の場合には、Nested-JSONの形で出力されていますね。
まとめ
以上、RedshiftでJSONファイル形式のUNLOADを試してみました。
JSONファイル形式でUNLOADできるようになったことで、他システム・サービスからのデータ利用がしやすくなったかなと思います。また、UNLOADしたものをSUPER型としても取り込めると思うので活用の幅が広がりそうですね。
どなたかのお役に立てば幸いです。それでは!