JSON 関数 - Amazon Redshift

JSON 関数

注記

JSON を操作するには、次の関数を使用することをお勧めします。

JSON_PARSE では、取り込み時に JSON テキストを SUPER 型の値に 1 回変換するだけで済みます。その後は、SUPER 値に対して操作を行うことができます。Amazon Redshift は、テキストベースの JSON 関数の出力である VARCHAR よりも、SUPER 値をより効率的に解析します。SUPER データ型の操作の詳細については、「Amazon Redshift 半構造化データの取り込みとクエリ」を参照してください。

相対的に小さい一連のキーと値のペアを格納する必要がある場合は、データを JSON 形式で格納すると、スペースを節約できます。JSON 文字列は単一の列に格納できるため、データを表形式で格納するより、JSON を使用する方が効率的である可能性があります。例えば、スパース表があるとします。その表では、すべての属性を完全に表すために列が多数必要ですが、指定された行または指定された列のほとんどの列値が NULL であるとします。格納に JSON を使用することによって、行のデータを単一の JSON 文字列にキーと値のペアで格納できる可能性があり、格納データの少ない表の列を除去できる可能性があります。

さらに、JSON スキーマの変更時に、テーブルに列を追加することなく、JSON 文字列を簡単に変更して追加のキーと値のペアを保存できます。

JSON の使用は控えめにすることをお勧めします。JSON では、単一の列にさまざまなデータが保存され、Amazon Redshift の列保存アーキテクチャが使用されません。したがってこの形式は、大きいデータセットの保存には適していません。Amazon Redshift は CHAR 列と VARCHAR 列で JSON 関数をサポートしていますが、JSON のシリアル化形式でデータを処理するには、SUPER を使用することをお勧めします。SUPER では、階層データを効率的にクエリできる、ポスト解析スキーマレス表現が使用されています。SUPER データ型の詳細については、Amazon Redshift 半構造化データの取り込みとクエリを参照してください。

JSON は UTF-8 でエンコードされたテキスト文字列を使用するため、JSON 文字列を CHAR データ型または VARCHAR データ型として格納できます。

JSON 文字列は、以下のルールに従って、正しくフォーマットされた JSON である必要があります。

  • ルートレベルの JSON には、JSON オブジェクトまたは JSON 配列を使用できます。JSON オブジェクトは、順序が設定されていない一連のキーと値のペアがカンマで区切られ、中括弧で囲まれたものです。

    例えば、{"one":1, "two":2}

  • JSON 配列は、順序付けられた一連のカンマ区切り値が角括弧で囲まれたものです。

    例は次のとおりです: ["first", {"one":1}, "second", 3, null]

  • JSON 配列は、0 から始まるインデックスを使用します。配列内の最初の要素の位置は 0 です。JSON のキーと値のペアでは、キーは二重引用符で囲まれた文字列です。

  • JSON 値には次のいずれかを指定できます。

    • JSON オブジェクト

    • array

    • string

      • 二重引用符で表される

    • 数値

      • 整数、小数、浮動小数点数を含む

    • ブール値

    • null

  • 空のオブジェクトおよび空の配列は、有効な JSON 値です。

  • JSON フィールドでは、大文字と小文字が区別されます。

  • JSON 構造要素 ({ }, [ ] など) は無視されます。

Amazon Redshift JSON 関数および Amazon Redshift COPY コマンドは、同じメソッドを使用して JSON 形式のデータを操作します。JSON の操作方法の詳細については、「JSON 形式からの COPY」を参照してください。