目的
JSON_AGG関数は、各入力パラメータから集約されたJSON文書を返します。入力パラメータは、列参照または式です。各入力パラメータは、返されるJSON文書で名前と値のペアになります。
構文
RETURNS句を指定した場合、関数呼び出しを括弧で囲む必要があります。
- param
- サポートされている任意のデータ型、列参照、定数、または式にすることができ、何らかの値に評価される入力パラメータ。可変個のパラメータが許可され、各入力パラメータは、返されるJSON文書で名前と値のペアになります。
- FORMAT 'format string'
- format stringは、Teradataで許可される任意の書式設定文字列です。
- AS name
- nameは、Teradataで許可される任意の名前です。
- RETURNS data_type
- data_typeが関数の戻り型になるように指定します。
- integer
- JSON型の文字の最大長を指定する正の整数値。指定する場合、長さは最小2文字で関数の絶対最大長を超えることはできません。短い方の長さが指定されます。
- CHARACTER SET UNICODE | LATIN
- RETURNS data_type句のデータ型の文字セット。
- RETURNS STYLE column_expr
- 関数の戻り型が指定列のデータ型と同じになるように指定します。列のデータ型はJSONである必要があります。
戻り値
デフォルトでは、JSON_AGGは、文字セットがUNICODEで、最大長が32,000のUNICODE文字(64,000バイト)のJSON文書を返します(オプションのRETURNS句で別の指定がない場合)。
{ name1 : data1, name2 : data2, ..., nameN : dataN, }
JSON文書を構成する値の1つがTeradata NULLの場合、その値はJSONインスタンスでJSON nullとして返されます。
ルールと制限
- Teradataの数値データ型は、JSONの数値にマップされます。
- Teradataのnull値はJSONのnullにマップされます。
- Teradataの他のすべてのデータ型は、JSONの文字列にマップされます。
LOB属性を入力として、構造化されたUDTを使用できません。
JSON_AGGは、括弧で囲まれたカンマ区切りリストにある構造化されたUDTのすべての属性の値を書き出します。例: (att1Val、att2Val、...、attNVal)。これを64,000バイトで実行できない場合は、SQLエラーが報告されクエリーは失敗します。
JSON構文に適合するように正しくエスケープされていないエスケープ文字を入力文字データに含めることができます。エスケープされていない文字が関数で検出されると、適切なJSON構文に適合するように入力データがエンコードされます。ただし、エスケープ後も切り捨てられたデータが正しくないJSON構文の結果を返す場合は構文エラーが返されます。
すべてのUDTなど、事前定義型以外のすべての型では、変換された値を使用して、結果として得られるJSON文書を生成します。適切に機能するように、有効なJSON構文のデータを出力する変換を指定する必要があります。そうしないと、JSONインスタンスの妥当性検査に失敗して関数がエラー メッセージを返します。ただし、前述のように、関数はエスケープされていない文字を受け取るので、この場合、エラーは返されません。
JSON値のデータ型は、変換結果の事前定義データ型に基づいて上記のマッピングに従って決定されます。すべての非LOB事前定義型は、特定の列に指定したオプションのFORMAT句、または特定のデータ型のデフォルトの形式(FORMAT句が存在しない場合)に従ってフォーマットされます。
param名は、各パラメータにオプションの"AS"句を使用して指定できます。オプション部分がNULLの場合、結果として得られるJSON文書を構成するパラメータの名前は、Teradataでの式の現在の命名規則に応じて与えられます。
使用上の注意
GROUP BY句は、JSON_AGG関数を呼び出すSELECT文で使用できます。GROUP BY句と集約関数の既存のルールは、JSON_AGGに適用されます。これが使用されると、結果として得られるJSON文書は、結果のグループのメンバーを表わす構成要素としてのオブジェクトを含む配列として構造化されます。各グループは異なる出力行になります。
JSONオブジェクトを構成する値の1つがTeradata NULLの場合、その値はJSONインスタンスでJSON nullとして返されます。