Catégories :

Fonctions système

SYSTEM$EXPLAIN_JSON_TO_TEXT

Cette fonction convertit la sortie EXPLAIN de JSON en texte formaté.

Voir aussi :

SYSTEM$EXPLAIN_PLAN_JSON , EXPLAIN_JSON

Syntaxe

SYSTEM$EXPLAIN_JSON_TO_TEXT( <explain_output_in_json_format> )

Arguments

expliquer_sortie_dans_format_json

Chaîne ou expression dont le résultat est une chaîne, contenant une sortie EXPLAIN en tant que chaîne compatible JSON. Si l’entrée est une chaîne, la chaîne doit être placée entre guillemets simples '.

Renvoie

La fonction renvoie un VARCHAR contenant la sortie EXPLAIN sous forme de texte qui a été formaté pour être relativement facile à lire par les humains.

Notes sur l’utilisation

  • Cette fonction convertit les informations EXPLAIN du format JSON vers du texte formaté. Souvent, la valeur JSON est produite directement ou indirectement à partir de la fonction SYSTEM$EXPLAIN_PLAN_JSON. Par exemple, la sortie de SYSTEM$EXPLAIN_PLAN_JSON peut être stockée dans une table, puis affichée ultérieurement à l’aide de cette fonction SYSTEM$EXPLAIN_JSON_TO_TEXT .

  • Si un littéral de chaîne est validé en entrée, le délimiteur autour de la chaîne peut être soit un guillemet simple ' soit un double signe dollar $$ . Si le littéral de chaîne contient des guillemets simples (et ne contient pas de signes dollar double), la délimitation de la chaîne avec des signes dollar double évite d’avoir à échapper les caractères de guillemet simple incorporés à l’intérieur de la chaîne.

Exemples

Les exemples ci-dessous utilisent ces tableaux :

CREATE TABLE Z1 (ID INTEGER);
CREATE TABLE Z2 (ID INTEGER);
CREATE TABLE Z3 (ID INTEGER);

Si vous souhaitez stocker la sortie EXPLAIN au format JSON , mais l’afficher sous forme de texte formaté, vous pouvez appeler SYSTEM$EXPLAIN_JSON_TO_TEXT() comme indiqué ci-dessous :

Tout d’abord, obtenez la sortie EXPLAIN au format JSON et stockez-la dans une table :

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;

Le fichier JSON ressemble à la sortie ci-dessous :

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}]]} |
+-----------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

Après avoir stocké le fichier JSON dans une table, vous pouvez transmettre le fichier JSON à la fonction SYSTEM$EXPLAIN_JSON_TO_TEXT pour le convertir en un format texte plus lisible par l’homme en appelant 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} |
|                                                                                                                                    |
+------------------------------------------------------------------------------------------------------------------------------------+