- LATIN: JSON_SHRED_BATCHプロシージャを使用
- UNICODE: JSON_SHRED_BATCH_Uプロシージャを使用
データの文字セットの違いを除いて、2つのプロシージャの機能は同じです。
JSON_SHRED_BATCHの問合わせは、ソースJSONインスタンスとソース データがロードされるテーブルとの間に柔軟性をもたらします。この柔軟性によって、問合わせそのもの、およびマッピング(shred statement)の実行方法に応じて、効率的な問合わせと非効率的な問合わせを実行できます。
- row expressionとcolumn expressionsに基づいて、JSONオブジェクトを一時テーブルに断片化するために、shred statementごとに、JSON_TABLE関数の呼び出しが行なわれます。結果として生成された一時テーブルを使用して、ユーザーが適切な権限を持つテーブルの列に値を割り当てることができます。最適なパフォーマンスを発揮する問合わせによって、マッピングが最適化されるので、各shred statementは最大限の数の テーブルを更新します。マッピングの複雑さ(階層関係など)によってシュレッディングを実際の列にマップできない場合にだけ、別のshred statementを問合わせに含めてください。
- パフォーマンスは大部分が、プロシージャの使用方法によって決まります。マッピングによって、必要な個々の問合わせの数が最小限になると、パフォーマンスは最大限になります。必ずしも、すべてをshred statementに含めることができるとは限りません。そのため、複数の文が許可されています。
- このプロシージャでは、INSERT、UPDATE、MERGE、およびDELETE操作が許可されます。これらの操作は、文のメタデータ部分のoperationの部分に指定できます。metadata文のキーは、行式/列式で作成された一時テーブルとターゲット テーブルとの間の結合を実行するために使用されます。パフォーマンスに大きな影響が及ぶため、この処理は慎重に行なってください。MERGE操作では、ターゲット テーブルにプライマリ インデックスが作成されていて、プライマリ インデックスはメタデータのキーのメンバーになっている必要があります。
- テーブルの完全な結合を避けるには、結合条件がID列から作成できるように、そのID列をinput queryパラメータに指定する必要があります。
ターゲット テーブルの列には、行式と列式、定数、またはSQL式の結果によって作成される一時テーブルの値を割り当てることができます。SQL式を使用する場合は、適切なSQL文(構文および問合わせの実際の結果の点で)を実行依頼する必要があります。これは、ターゲット テーブルのデータを操作する上で強力かつ柔軟な方法ですが、問合わせを適切に構成しないと問題が生じることがあります。DBSによって報告される、SQL式が原因のエラーはユーザーに報告され、問合わせは失敗します。行式と列式によって作成された一時テーブルの列、input queryによって作成された余分の列は、SQL式で使用することができます。
シュレッディングの処理中、断片化された文それぞれで揮発テーブルが作成されます。テーブルの列は最大2048列まで可能ですが、すべてのテーブル マッピングの列を全部合わせたときに、2044列を超えないようにしてください(4つの内部列があります)。1個からN個のターゲット テーブルを持つことができ、各テーブルには1個からN個の列を指定できますが、すべての列の合計は2044列を超えることはできません。
断片化された文のキーワードはすべて小文字で指定する必要があります。
column expressionの出力テーブルで一時列のデータ型を指定する必要があります。データが適切に解釈され、ターゲット テーブルで使用できるように、この情報を指定することが必要です。
JSONIDとROWINDEX (大文字または小文字)はキーワードです。 これらはそれぞれ、入力JSON文書IDの値(input queryの最初の列)と入力行のインデックス番号を追跡するために使用されます。 JSONIDとROWINDEXは固定された一時列名なので、colexprとqueryexprで許可されません。 これらのキーワードをこれらの句で使用すると、構文エラーが報告されます。 ただし、シュレッディング操作のソース値として、table expression句で参照されることがあります。