目的
JSON_TABLEは、JSONオブジェクトのすべてのデータまたはそのサブセットに基づいて一時テーブルを作成します。
構文
- json_documents_retrieving_expr
- 少なくとも2つの列を結果として提供する必要がある問合わせ式。最初の列はJSON文書を識別するIDです。このIDは、出力行を入力行に関連付ける出力行で返されます。エラーが発生した場合は、エラーの原因となった入力行を識別するために使用されます。2番目の列は、JSON文書自身です。他の列を含めることもできますが、JSON文書列の後にする必要があります。追加の列は、入力時から変更されずに出力行で返されます。
- row_expr_literal
- JSONPath構文に準拠するLATIN文字列リテラルまたはUNICODE文字列リテラル。
- column_expr_literal
- JSON配列を表わすLATINリテラルまたはUNICODEリテラル。この配列には1つ以上のJSONオブジェクトが含まれ、それぞれがJSON_TABLE演算子が生成する列を定義します。
- AS
- correlation_nameの前に指定するオプションのキーワード。
- correlation_name
- json_documents_retrieving_exprによって参照されるテーブルの別名。
- column_name
- 1つ以上の列名のオプション リスト。
機能の説明
JSON_TABLEはJSONインスタンスを受け取り、インスタンスのすべてのデータまたはそのサブセットに基づいた一時テーブルを作成します。JSONインスタンスは、SQL文を使用してテーブルから取得します。JSONPath構文は、JSONインスタンスの取得する部分を定義するために使用します。
戻り値
JSON_TABLEテーブル演算子は、column_expr_literalによって定義される行形式に従って出力行を生成します。そのリテラルは、出力行の列およびそのデータ型を説明します。
JSON_TABLEが返す行には、次の列が含まれます。
- 最初に返される列には、json_documents_retrieving_expressionの最初の列から取得されるJSON文書のIDが含まれます。
- 返される次のN列は、colexprパラメータに基づいて生成されます。Nはcolumn_expression_literalによって表わされるJSON配列のオブジェクトの数です。
- json_documents_retrieving_exprが3列以上を返す場合、3列目以降のすべての列は、変更されずに出力行に追加されます。
column_expr_literalパラメータには、row_expr_literalの列からこの関数の出力テーブルの列へのマッピングが必要です。column_expr_literalの各列は、次のいずれかの構造に従うJSONインスタンスによって定義されます。
- 順序列
- 序数列には整数の連番が含まれます。連番は、それ自体で固有になるようには保証されませんが、ID列と出力行の最初の列、そして順序列の組み合わせで固有になります。
- 行に対する通常列
- この列の値は、JSONPath問合わせを実行することによって決まります。この問合わせは、ROWEXPR JSONPath問合わせが返すオブジェクトをルート オブジェクトとして使用して評価されます。
- rootに対する通常列
- この列の値は、JSONPath問合わせを実行することによって決まります。この問合わせは、json_documents_retrieving_expressionの2番目の列が返すオブジェクトをルート オブジェクトとして使用して評価されます。この列型は、"fromRoot"をtrueに設定して識別します。
JSON_TABLEは出力におけるUDT型とLOB型をサポートしていないので、出力列の型をJSONデータ型にすることはできません。出力テーブルの列のデータ型は、LOB以外の任意の事前定義されたTeradata型にできます。次に、JSON_TABLE出力でサポートされているデータ型を示します。
サポートされるデータ型
次に、JSON_TABLE出力でサポートされているデータ型のリストを示します。角括弧は、型指定におけるオプションの値を示します。
CHAR(n) |
VARCHAR(n) |
BYTE(n) |
VARBYTE(n) |
BYTEINT |
SMALLINT |
INTEGER |
FLOAT/REAL |
DECIMAL/NUMERIC [(n,[m])] |
NUMBER |
DATE |
TIME [(fractional_seconds_precision)] |
TIME [(fractional_seconds_precision)] WITH TIME ZONE |
TIMESTAMP [(fractional_seconds_precision)] |
TIMESTAMP [(fractional_seconds_precision)] WITH TIME ZONE |
INTERVAL YEAR [(precision)] |
INTERVAL YEAR [(precision)] TO MONTH |
INTERVAL MONTH [(precision)] |
INTERVAL DAY[(precision)] |
INTERVAL DAY[(precision)] TO HOUR |
INTERVAL DAY[(precision)] TO MINUTE |
INTERVAL DAY [(precision)] TO SECOND |
INTERVAL HOUR [(precision)] |
INTERVAL HOUR [(precision)] TO MINUTE |
INTERVAL HOUR [(precision)] TO SECOND |
INTERVAL MINUTE [(precision)] |
INTERVAL MINUTE [(precision)] TO SECOND |
INTERVAL SECOND [(fractional_seconds_precision)] |
ルールと制限
この関数はTD_SYSFNLIBにあります。問合わせ結果のID列には、CLOBを除く任意の数値型または文字型を使用できます。ユーザーがID列を固有にする必要があります。固有ではない場合もJSON_TABLEは失敗しませんが、結果出力のどの行がどのJSON文書からもたらされているかを判別するのが困難になります。
結果は最大行サイズに依存し、問合わせは問合わせの最大許容サイズを超えることができません。
JSON値をシュレッドして CHAR、VARCHAR、またはVARBYTEの列を生成する場合、値のサイズがターゲット列のサイズより大きいと、値が列に合わせて切り捨てられます。