JSON_TABLE - Teradata Database - Teradata Vantage NewSQL Engine - JSON_TABLEは、JSONオブジェクトのすべてのデータまたはそのサブセットに基づいて一時テーブルを作成します。

Teradata Vantage™ JSONデータ型

Product
Teradata Database
Teradata Vantage NewSQL Engine
Release Number
16.20
Published
2019年3月
Language
日本語
Last Update
2019-10-29
dita:mapPath
ja-JP/bgi1512081870828.ditamap
dita:ditavalPath
ja-JP/bgi1512081870828.ditaval
dita:id
evi1472243742653
Product Category
Software
Teradata Vantage

目的

JSON_TABLEは、JSONオブジェクトのすべてのデータまたはそのサブセットに基づいて一時テーブルを作成します。

構文



json_documents_retrieving_expr
少なくとも2つの列を結果として提供する必要がある問合わせ式。最初の列はJSON文書を識別するIDです。このIDは、出力行を入力行に関連付ける出力行で返されます。エラーが発生した場合は、エラーの原因となった入力行を識別するために使用されます。2番目の列は、JSON文書自身です。他の列を含めることもできますが、JSON文書列の後にする必要があります。追加の列は、入力時から変更されずに出力行で返されます。
これは、json_documents_retrieving_exprの例です。
SELECT id, jsonDoc FROM jsonTable;
これは、追加の列を使用するjson_documents_retrieving_expr問合わせの例です。テーブル演算子によって追加の列が返され、そのまま出力されます。
SELECT id, orderJson, orderDate, orderSite FROM orderJsnTable;
json_documents_retrieving_exprパラメータがNULLの場合、関数の結果は行を含まないテーブルになります。
row_expr_literal
JSONPath構文に準拠するLATIN文字列リテラルまたはUNICODE文字列リテラル。
このパラメータは、json_documents_retrieving_exprの2番目の列で返されるJSON文書に対して評価されるJSONPath問合わせです。
row_expr_literal問合わせは、オブジェクトの配列を返します。配列の各オブジェクトに対して1つの出力行が返されます。
row_expr_literalがNULLの場合は、エラーが報告されます。
column_expr_literal
JSON配列を表わすLATINリテラルまたはUNICODEリテラル。この配列には1つ以上のJSONオブジェクトが含まれ、それぞれがJSON_TABLE演算子が生成する列を定義します。
このパラメータがNULLの場合には、エラーが報告されます。
次の属性は、大文字小文字を区別し、以下と一致する必要があります。
  • ordinal
  • jsonpath
  • type
  • fromRoot
AS
correlation_nameの前に指定するオプションのキーワード。
correlation_name
json_documents_retrieving_exprによって参照されるテーブルの別名。
ANSI SQLでは、テーブル別名を相関名と呼びます。範囲変数とも呼ばれます。
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列と出力行の最初の列、そして順序列の組み合わせで固有になります。
{ "ordinal" : true}
行に対する通常列
この列の値は、JSONPath問合わせを実行することによって決まります。この問合わせは、ROWEXPR JSONPath問合わせが返すオブジェクトをルート オブジェクトとして使用して評価されます。
{“jsonpath” : “<jsonpath query string>”,
  “type” :  “<data type of output column>” }
rootに対する通常列
この列の値は、JSONPath問合わせを実行することによって決まります。この問合わせは、json_documents_retrieving_expressionの2番目の列が返すオブジェクトをルート オブジェクトとして使用して評価されます。この列型は、"fromRoot"をtrueに設定して識別します。
{“jsonpath” : “<jsonpath query string>”,
  “type” :  “<data type of output column>”,
  “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の列を生成する場合、値のサイズがターゲット列のサイズより大きいと、値が列に合わせて切り捨てられます。