- カテゴリ:
SYSTEM$EXPLAIN_JSON_TO_TEXT¶
この関数は、 JSON からの EXPLAIN 出力をフォーマットされたテキストに変換します。
- こちらもご参照ください。
構文¶
SYSTEM$EXPLAIN_JSON_TO_TEXT( <explain_output_in_json_format> )
引数¶
explain_output_in_json_format
JSON 対応の文字列として EXPLAIN 出力を含む、文字列、または文字列に評価される式です。入力が文字列の場合、文字列は一重引用符
'
で囲む必要があります。
戻り値¶
この関数は、人にとって比較的読みやすい形式でフォーマットされたテキストとして、 EXPLAIN 出力を含む VARCHAR を返します。
使用上の注意¶
この関数は、 EXPLAIN 情報を JSON からフォーマットされたテキストに変換します。多くの場合、 JSON 値は SYSTEM$EXPLAIN_PLAN_JSON 関数から直接または間接的に生成されます。たとえば、 SYSTEM$EXPLAIN_PLAN_JSON からの出力は、テーブルに保存し、この SYSTEM$EXPLAIN_JSON_TO_TEXT 関数を使用した後で表示できます。
文字列リテラルが入力として渡される場合、文字列を囲む区切り文字は、一重引用符
'
または二重ドル記号$$
のいずれかです。文字列リテラルに一重引用符が含まれる(また二重ドル記号が含まれない)場合、二重ドル記号で文字列を区切ると、文字列内に埋め込まれた一重引用符文字をエスケープする必要がなくなります。
例¶
以下の例では、これらのテーブルを使用しています。
CREATE TABLE Z1 (ID INTEGER); CREATE TABLE Z2 (ID INTEGER); CREATE TABLE Z3 (ID INTEGER);
JSON 形式で EXPLAIN 出力を保存し、書式付きテキストとして表示する場合は、以下のように SYSTEM$EXPLAIN_JSON_TO_TEXT()
を呼び出すことができます。
最初に、 JSON 形式で EXPLAIN 出力を取得し、テーブルに保存します。
SET QUERY_10 = 'SELECT Z1.ID, Z2.ID FROM Z1, Z2 WHERE Z2.ID = Z1.ID'; CREATE TABLE json_explain_output_for_analysis ( ID INTEGER, query VARCHAR, explain_plan VARCHAR ); INSERT INTO json_explain_output_for_analysis (ID, query, explain_plan) SELECT 1, $QUERY_10 AS query, SYSTEM$EXPLAIN_PLAN_JSON($QUERY_10) AS explain_plan;JSON は次のような出力になります。
SELECT query, explain_plan FROM json_explain_output_for_analysis; +-----------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | QUERY | EXPLAIN_PLAN | |-----------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | SELECT Z1.ID, Z2.ID FROM Z1, Z2 WHERE Z2.ID = Z1.ID | {"GlobalStats":{"partitionsTotal":2,"partitionsAssigned":2,"bytesAssigned":1024},"Operations":[[{"id":0,"operation":"Result","expressions":["Z1.ID","Z2.ID"]},{"id":1,"parentOperators":[0],"operation":"InnerJoin","expressions":["joinKey: (Z2.ID = Z1.ID)"]},{"id":2,"parentOperators":[1],"operation":"TableScan","objects":["TESTDB.TEMPORARY_DOC_TEST.Z2"],"expressions":["ID"],"partitionsAssigned":1,"partitionsTotal":1,"bytesAssigned":512},{"id":3,"parentOperators":[1],"operation":"JoinFilter","expressions":["joinKey: (Z2.ID = Z1.ID)"]},{"id":4,"parentOperators":[3],"operation":"TableScan","objects":["TESTDB.TEMPORARY_DOC_TEST.Z1"],"expressions":["ID"],"partitionsAssigned":1,"partitionsTotal":1,"bytesAssigned":512}]]} | +-----------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+JSON をテーブルに保存した後、 JSON を SYSTEM$EXPLAIN_JSON_TO_TEXT 関数に渡し、 SYSTEM$EXPLAIN_JSON_TO_TEXT を呼び出して、より人に読みやすいテキスト形式に変換できます。
SELECT SYSTEM$EXPLAIN_JSON_TO_TEXT(explain_plan) FROM json_explain_output_for_analysis WHERE json_explain_output_for_analysis.ID = 1; +------------------------------------------------------------------------------------------------------------------------------------+ | SYSTEM$EXPLAIN_JSON_TO_TEXT(EXPLAIN_PLAN) | |------------------------------------------------------------------------------------------------------------------------------------| | GlobalStats: | | bytesAssigned=1024 | | partitionsAssigned=2 | | partitionsTotal=2 | | Operations: | | 1:0 ->Result Z1.ID, Z2.ID | | 1:1 ->InnerJoin joinKey: (Z2.ID = Z1.ID) | | 1:2 ->TableScan TESTDB.TEMPORARY_DOC_TEST.Z2 ID {partitionsTotal=1, partitionsAssigned=1, bytesAssigned=512} | | 1:3 ->JoinFilter joinKey: (Z2.ID = Z1.ID) | | 1:4 ->TableScan TESTDB.TEMPORARY_DOC_TEST.Z1 ID {partitionsTotal=1, partitionsAssigned=1, bytesAssigned=512} | | | +------------------------------------------------------------------------------------------------------------------------------------+