はじめに
どうやらRedshiftにはJson型がない様子。でもどうしてもJSONを読みたいんだ!!
というときはSUPER型を使うみたいです。
やってみた
SUPER型のあるテーブル作成
CREATE TABLE json_sample(
id INT NOT NULL,
json_field SUPER
);
INSERTするときはJSON_PARSE関数を忘れずに
重要!! 投入するときJSON_PARSE関数が必要です。当関数が無いと単純な文字列として認識されちゃいます。
この例でいうと4番目の行がNG例です。
INSERT INTO json_sample
values
(1, JSON_PARSE('{"hoge":1,"piyo":2}')),
(2, JSON_PARSE('{"hoge":3,"piyo":4}')),
(3, JSON_PARSE('{"foo":"a","bar":"b"}')),
(4, '{"foo":"c","bar":"d"}')
;
結果
要素名で取得できるのが素敵
SELECT
id,
json_field,
json_field.hoge,
json_field.piyo,
json_field.foo,
json_field.bar
FROM
json_sample;
id | json_field | hoge | piyo | foo | bar |
---|---|---|---|---|---|
1 | {"hoge":1, "piyo":2} | 1 | 2 | NULL | NULL |
2 | {"hoge":3, "piyo":4} | 3 | 4 | NULL | NULL |
3 | {"foo":"a", "bar":"b"} | NULL | NULL | "a" | "b" |
4 | "{\"foo\":\"c\",\"bar\":\"d\"}" | NULL | NULL | NULL | NULL |
文献
RedshiftにJSONを格納してTableauで可視化してみた
https://dev.classmethod.jp/articles/visualize_json_from_redshift_with_tableau/