この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
こんにちは!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されていました。中身は以下の通りです。
0000_part_00.json
{"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されていました。中身は以下の通りです。
0000_part_00.json
{"pref_code":13,"detail":{"code":13101,"name":"千代田区"}}
SUPER型の場合には、Nested-JSONの形で出力されていますね。
まとめ
以上、RedshiftでJSONファイル形式のUNLOADを試してみました。
JSONファイル形式でUNLOADできるようになったことで、他システム・サービスからのデータ利用がしやすくなったかなと思います。また、UNLOADしたものをSUPER型としても取り込めると思うので活用の幅が広がりそうですね。
どなたかのお役に立てば幸いです。それでは!