JSON_SHRED_BATCHおよびJSON_SHRED_BATCH_U構文 - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - JSONデータ型

Product
Advanced SQL Engine
Teradata Database
Release Number
17.05
17.00
Published
2020年9月
Language
日本語
Last Update
2021-03-30
dita:mapPath
ja-JP/gzn1554761068186.ditamap
dita:ditavalPath
ja-JP/gzn1554761068186.ditaval
dita:id
evi1472243742653
Product Category
Software
Teradata Vantage
[SYSLIB.] { JSON_SHRED_BATCH | JSON_SHRED_BATCH_U } (
  input_query,
  [ shred_statement [,...] ],
  :result_code
)
色付きまたは太字の角括弧を入力する必要があります。

構文要素

shred_statement
{ row_expression,
  column_expression,
  [ query_expression, ]
  table_expression
}
色付きまたは太字の中括弧を入力する必要があります。
row_expression
"rowexpr" : "JSONPath_expr"
column_expression
"colexpr" : [
  { "temp_column_name" : "JSONPath_expr" ,
    "type" : "data_type"
    [, "fromRoot" : true ]
  } [,...]
]
色付きまたは太字の角括弧および中括弧を入力する必要があります。
query_expression
"queryexpr" : [
  { "temp_column_name" : "column_type" } [,...]
]
色付きまたは太字の角括弧および中括弧を入力する必要があります。
table_expression
"tables" : [
  { "table_name" : { metadata , column_assignment } } [,...]
]
色付きまたは太字の角括弧および中括弧を入力する必要があります。
metadata
"metadata" : {
  "operation" : { "insert" | "update" | "merge" | "delete" }
  [, "keys" : [ "table_column_name" [,...] ] ]
  [, "filter" : "filter_expression" ]
}
色付きまたは太字の角括弧および中括弧を入力する必要があります。
column_assignment
"columns" : {
  "table_column_name" : {
    "temp_column_name" |
    "temp_expr" |
    numeric_constant |
    ["string_constant"] |
    boolean_constant |
    null
  }
}
色付きまたは太字の角括弧および中括弧を入力する必要があります。
CALL JSON_SHRED_BATCH
JSON_SHRED_BATCHおよびJSON_SHRED_BATCH_Uプロシージャ呼び出しで使用されるパラメータを次に示します。
input_query

文字列入力パラメータ。ユーザーによるシュレッディングの実行元となるJSONインスタンスのグループの結果をもたらすクエリーを指定します。追加の列が生じる場合がありshred_statementで参照されます。

このパラメータがNULLの場合には、エラーが報告されます。

input_queryパラメータは、ソース テーブル内の1つ以上のJSONオブジェクトを操作できます。JSON_SHRED_BATCHを呼び出すユーザーにはソース テーブルに対するSELECT権限が必要です。入力クエリーは、JSON_TABLE関数呼び出しにマップされます。JSON_TABLEでは指定された最初の2つの列がそれぞれID値とJSONオブジェクトになる必要があるので、input_queryパラメータでも最初の2つの列がID値とJSONオブジェクトになる必要があります。

以下にinput_query文字列の例を示します。

'SELECT id, empPersonalInfo, site FROM test.json_table'
'SELECT JSONDOCID, JSONDT1, a, b FROM jsonshred.JSON_TABLE3 WHERE JSONID=100'

JSONID(大文字または小文字)はキーワードです。JSON文書のID値に使用される一時列名です。JSONIDはinput_query句とtable_expression句で使用可能です。JSONIDは"colexpr"または"queryexpr"ではtemp_column_nameとして使用できません。

複数のJSONオブジェクトでのJSON_TABLEの実行には、1回の呼び出しの結果とソース テーブル間の結合が必要です。 テーブルの完全な結合を避けるには、結合条件がID列から作成できるように、そのID列をinput_queryパラメータに指定する必要があります。

queryexpr内のデータ型(詳しくは後述)は、input_queryで指定された列の実際のデータ型と一致する必要があります。明示的なキャストは追加されないので、絶対的なデータ型でない場合は、query_exprで定義されたデータ型に対してデータは暗黙的にキャスト可能である必要があります。エラーが発生するとシュレッド失敗となり、ユーザーに報告されます。

JSON_TABLEの実行中に問題が発生した場合は、エラー メッセージでID列を使用して、問題が生じた行を特定します。

shred_statement

断片化された文の構成要素は、input queryから得られるJSONインスタンスを、データがユーザー テーブルに読み込まれる場所にマッピングすることを定義します。

断片化された文がNULLの場合、エラーが報告されます。

断片化された文のキーワードはすべて小文字で指定する必要があります。

以下のセクションでは、断片化された文の構造と構文について解説します。複数の断片化された文を実行できますが、パフォーマンスへの影響があります。

result_code
シュレッド操作の結果を表わす出力パラメータ。0の値は成功を示します。ゼロ以外のすべての値は特定のエラー状況を示し、該当するエラー メッセージが返されます。
row_expression
次に、行式で使用される変数について説明します。
  • "rowexpr" :

    必須のリテラル入力。

    小文字でなければなりません。

  • JSONPath expr – JSONインスタンスの特定の部分についての情報を抽出するJSONPath構文の式。例えば、$.schools [*]はすべての学校を識別します。
column_expression
次に、列式の変数について説明します。
  • "colexpr" :

    必須のリテラル入力。

    小文字でなければなりません。

  • temp_column_name
    一時列の任意のユーザー定義による名前。一時列名は固有である必要があり、固有でないとエラーが報告されます。
    名前は大文字と小文字が区別されません。 例えば、col1とCOL1は、内部問合わせで使用され、固有ではないので失敗します。

    ここでは、JSONIDとROWINDEX(大文字または小文字)は使用できません。

  • JSONPath_expr – JSONオブジェクトの特定の部分についての情報を要求するJSONPath構文のJSONPath式。例えば、$.name。
  • "type"

    必須のリテラル入力。

    小文字でなければなりません。

  • data_type– 非LOBのVantage事前定義型、INTEGERまたはVARCHARなど。サポートされる型のリストについては、サポートされるデータ型を参照してください。
  • "fromRoot" : true

    オプション。 非相対パスにfromRoot属性を使用する必要があります。 それぞれのcolumn_expressionは、相対的でないという指定がない限り、row_expression("rowexpr":"JSONPATH式")に対して相対的であると想定します。 相対式は、行式の子のいずれかの名前で始まるのに対して、非相対式はJSONPathでのroot、$で始まります。

    trueはリテラルで必ず小文字で表記します。
    誤ったエラーの発生によりfromRootを設定しようとしました。

ユーザーには、column_expressionの構成要素を許容されるデータ型にマッピングする責任があります。明示的なキャストは必要なく、データは目的のデータ型に暗黙的にキャストされます。ただしデータが目的のデータ型に正しくキャストされないとエラーが報告されるので、column_expressionの構成要素とデータ型を確認するときは注意が必要です。式の結果が(単一の値でなく)配列またはオブジェクトの場合は、最適な長さのCHARまたはVARCHARが唯一の許容されるデータ型になります。

JSON_TABLEの出力テーブルに含まれる一時列のデータ型を指定する必要があります。これは、column_expressionのJSON_SHRED_BATCHとJSON_SHRED_BATCH _Uによって強制的に指定されます。ユーザーは、データが正しく解釈されターゲット テーブルで使用されるように、この情報を提供する必要があります。

query_expression
クエリー式の変数を次に示します。
  • "queryexpr" :

    必須のリテラル入力。

    小文字でなければなりません。

  • temp_column_name
    一時列の任意のユーザー定義による名前。一時列名は固有である必要があり、固有でないとエラーが報告されます。
    名前は大文字と小文字が区別されません。 例えば、col1とCOL1は、内部問合わせで使用され、固有ではないので失敗します。

    ここでは、JSONIDとROWINDEX(大文字または小文字)は使用できません。

  • "column_type" – temp_column_name列のデータ型。

ID値またはJSONオブジェクトではない列に対して、queryexprを使用して、input queryで選択されるデータのデータ型を定義します。queryexprで追加の列を参照し目的のデータ型を指定することが必須になります。

input_query内のすべての列は、3番目の列以降、queryexprで同じ順序で複製する必要があります。
列の順序は重要ですが、列の名前は重要ではありません。

queryexpr内のデータ型は、input_queryで指定された列の実際のデータ型と一致する必要があります。明示的なキャストは追加されないので、絶対的なデータ型でない場合は、queryexprで定義されたデータ型に対してデータは暗黙的にキャスト可能である必要があります。エラーが発生するとシュレッド失敗となり、ユーザーに報告されます。

次の例では、順序の重要度を示します。qrycol1qrycol2の両方の列が、queryexprに含まれることに注意してください。なお、queryexprqrycol2input_queryqrycol1を参照し、queryexprqrycol1input_queryqrycol2を参照します。前述のように、名前ではなく順序が重要です。

CALL SYSLIB.JSON_SHRED_BATCH(
'SELECT JSONDOCID, JSONDT1, qrycol1, qrycol2 FROM jsonshred.JSON_TABLE3 WHERE JSONID=100',
'[ { "rowexpr" : "$.population.profile",
     "colexpr" : [{"col1" : "$.name.first", "type" : "VARCHAR(30)"},
                   {"col2" : "$.address.zip", "type" : "NUMBER(5,0)"}],
     "queryexpr" : [{ "qrycol2" : "VARCHAR(20)"}, { "qrycol1" : "VARCHAR(20)"}],
     "tables" : [
                  {"jsonshred.JSON_SHRED_TABLE1" : {
                     "metadata" : { "operation" : "insert" },
                     "columns" : {"EmpID":"JSONID*10", "NAME":"col1","STATE":"qrycol1", "ZIP":"col2"}
                     }
                  }
                ]         
   }
]',res );

JSONIDROWINDEX(小文字または大文字)は固定された一時列名なので、colexprqueryexprで許可されません。それらをこれらの句で使用すると、構文エラーが報告されます。

table_expression
テーブル式の変数を次に示します。
  • "tables" :

    必須のリテラル入力。

    小文字でなければなりません。

  • "table_name" – 既存のデータベース テーブルの完全修飾名。JSON_SHRED_BATCHを呼び出すユーザーには、このテーブルに対する必須の権限(INSERT、UPDATEなど)が必要です。

JSONIDROWINDEX (大文字または小文字)はキーワードです。 これらはそれぞれ、入力JSON文書IDの値(input_queryの最初の列)と入力行のインデックス番号を追跡するために使用されます。 JSONIDROWINDEXは、シュレッディング操作のソース値として、table_expression句で参照されることがあります。

シュレッディングの処理中、断片化された文それぞれで揮発テーブルが作成されます。テーブルの列は最大2048列まで可能ですが、すべてのテーブル マッピングの列を全部合わせたときに、2044列を超えないようにしてください(4つの内部列があります)。1個からN個のターゲット テーブルを持つことができ、各テーブルには1個からN個の列を指定できますが、すべての列の合計は2044列を超えることはできません。
metadata
以下にメタデータ変数について説明します。
  • "metadata" :

    必須のリテラル入力。

    小文字でなければなりません。

  • "operation" – 必須のリテラル入力。
  • "insert" | "update" | "merge" | "delete"

    実行する操作。

    MERGE操作では、ターゲット テーブルにプライマリ インデックスが作成されていて、プライマリ インデックスはメタデータのキーのメンバーになっている必要があります。

  • "keys":

    キーの使用はオプションです。使用する場合、"keys":は必須のリテラル項目です。

    keys句に指定されるすべての名前をcolumn assignment句に含める必要があります。

    キーは、行式と列式で作成された一時テーブルとターゲット テーブルとの間の結合を実行するために使用されます。パフォーマンスに大きな影響が及ぶため、この処理は慎重に行なってください。MERGE操作では、ターゲット テーブルにプライマリ インデックスが作成されていて、プライマリ インデックスは指定されたキーのメンバーである必要があります。

  • "table_column_name" – table_nameによって参照されるテーブル内の列の名前。JSON_SHRED_BATCHを呼び出すユーザーには、この既存のテーブルにおける必須の権限(INSERT、UPDATEなど)が必要です。table_nameは、JSON_SHRED_BATCHのテーブル式で指定されます。
  • "filter": – フィルタリングはオプションです。使用する場合、"filter":は必須のリテラル項目です。
  • filter_expression

    列またはクエリー式の要素を参照するSQL文。

    フィルタ文の例: "filter" : "empId<5000"

column_assignment
次に、列の割り当て変数について説明します。
  • "columns" : – 必須のリテラル入力。
  • "table_column_name'" – table_nameによって参照されるテーブル内の列の名前。JSON_SHRED_BATCHを呼び出すユーザーには、この既存のテーブルにおける必須の権限(INSERT、UPDATEなど)が必要です。table_nameは完全修飾テーブル名でなければなりません。これは、JSON_SHRED_BATCHのテーブル式で指定されます。
  • temp_column_name – "colexpr"または"queryexpr"で定義されているtemp_column_name。一時列の名前は一意である必要があり、一意でないとエラーが報告されます。注意: 一時列の名前では文字の大小が区別されないので、col1とCOL1は一意ではなく、エラーの原因になります。
  • "temp_expr" –Teradata SQL式。
  • numeric_constant – JSONでサポートされる数値。
  • ["string_constant"]

    JSONでサポートされる文字列値。

    ストリング定数の例: "company" : ["Teradata"]

  • boolean_constant

    trueまたはfalse

    trueおよびfalseはJSONのキーワードで小文字にする必要があります。

  • NULL

    JSONはnullです。

    nullはJSONキーワードで小文字にする必要があります。