クエリー式

Teradata® Database JSONデータ型

brand
Software
prodname
Teradata Database
vrm_release
16.20
category
プログラミング リファレンス
featnum
B035-1150-162K-JPN

クエリー式の変数を次に示します。

"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で許可されません。それらをこれらの句で使用すると、構文エラーが報告されます。