カテゴリ:

システム関数

SYSTEM$EXPLAIN_JSON_TO_TEXT

この関数は、 JSON からの EXPLAIN 出力をフォーマットされたテキストに変換します。

こちらもご参照ください。

SYSTEM$EXPLAIN_PLAN_JSONEXPLAIN_JSON

構文

SYSTEM$EXPLAIN_JSON_TO_TEXT( <explain_output_in_json_format> )

引数

json形式で説明出力

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,"parent":0,"operation":"InnerJoin","expressions":["joinKey: (Z2.ID = Z1.ID)"]},{"id":2,"parent":1,"operation":"TableScan","objects":["TESTDB.TEMPORARY_DOC_TEST.Z2"],"expressions":["ID"],"partitionsAssigned":1,"partitionsTotal":1,"bytesAssigned":512},{"id":3,"parent":1,"operation":"JoinFilter","expressions":["joinKey: (Z2.ID = Z1.ID)"]},{"id":4,"parent":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} |
|                                                                                                                                    |
+------------------------------------------------------------------------------------------------------------------------------------+