Kategorien:

Systemfunktionen

SYSTEM$EXPLAIN_PLAN_JSON

Mit dieser Funktion wird aus dem Text einer SQL-Anweisung der EXPLAIN-Plan in JSON generiert.

Siehe auch:

SYSTEM$EXPLAIN_JSON_TO_TEXT, EXPLAIN_JSON

Syntax

SYSTEM$EXPLAIN_PLAN_JSON( { <sql_statement_expression> | <sql_query_id_expression> } )
Copy

Argumente

sql_statement_expression

Eine Zeichenfolge oder ein Ausdruck, die/der zu einer Zeichenfolge ausgewertet wird, die die SQL-Anweisung für den EXPLAIN-Plan enthält. Wenn eine Zeichenfolgenliteral verwendet wird, sollte dieses in einfache Anführungszeichen ' eingeschlossen sein.

sql_query_id_expression

Eine Zeichenfolge oder ein Ausdruck, die/der zu einer Zeichenfolge ausgewertet wird, die die Abfrage-ID für den EXPLAIN-Plan enthält. Wenn eine Zeichenfolgenliteral verwendet wird, sollte dieses in einfache Anführungszeichen ' eingeschlossen sein.

Snowflake speichert historische Daten für Abfrage-IDs, die in den letzten 14 Tagen ausgeführt wurden. Wenn Sie die Abfrage-ID für eine Abfrage angeben, die vor mehr als 14 Tage ausgeführt wurde, wird ein Fehler zurückgegeben. Weitere Informationen dazu finden Sie unter Abfrageaktivität mit Abfrageverlauf überwachen.

Rückgabewerte

Die Funktion gibt einen VARCHAR-Wert zurück, der die EXPLAIN-Ausgabe im JSON-kompatiblen Format enthält.

Nutzungshinweise

  • Wenn als Eingabe ein Zeichenfolgenliteral übergeben wird, kann das zum Umschließen der Zeichenfolge verwendete Trennzeichen entweder ein einfaches Anführungszeichen ' oder ein doppeltes Dollarzeichen $$ sein. Wenn das Zeichenfolgenliteral einfache Anführungszeichen (und keine doppelten Dollarzeichen) enthält, müssen Sie die in der Zeichenfolge enthaltenen einfachen Anführungszeichen nicht durch Trennen der Zeichenfolge mit doppelten Dollarzeichen umgehen.

  • Um die Ausgabe dieses Befehls nachzubearbeiten, können Sie Folgendes tun:

    • Verwenden Sie die Funktion RESULT_SCAN, die die Ausgabe wie eine abfragbare Tabelle behandelt.

    • Fügen Sie die JSON-formatierte Ausgabe zur späteren Analyse in eine Tabelle ein. Wenn Sie die Ausgabe im JSON-Format speichern, können Sie die Funktion SYSTEM$EXPLAIN_JSON_TO_TEXT oder EXPLAIN_JSON verwenden, um die JSON-Ausgabe in ein besser lesbares Format (entweder tabellarischer oder formatierter Text) zu konvertieren.

Beispiele

In den Beispielen werden folgende Tabellen verwendet:

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

In diesem Beispiel wird ein Zeichenfolgenliteral verwendet, das eine SQL-Anweisung als Eingabeparameter enthält:

SELECT SYSTEM$EXPLAIN_PLAN_JSON(
    'SELECT Z1.ID, Z2.ID FROM Z1, Z2 WHERE Z2.ID = Z1.ID'
    ) AS explain_plan;
+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| EXPLAIN_PLAN                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| {"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}]]} |
+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
Copy

Verwenden Sie $$, um Abfragen zu begrenzen, die einfache Anführungszeichen enthalten:

SELECT SYSTEM$EXPLAIN_PLAN_JSON(
    $$ SELECT symptom, IFNULL(diagnosis, '(not yet diagnosed)') FROM medical $$
    );
Copy

Der folgende Code zeigt, wie Sie den EXPLAIN-Plan für eine bereits ausgeführte Abfrage anzeigen:

Führen Sie die Abfrage aus:

SELECT Z1.ID, Z2.ID FROM Z1, Z2 WHERE Z2.ID = Z1.ID;
Copy

Führen Sie EXPLAIN für die Abfrage aus, und rufen Sie LAST_QUERY_ID() auf, um die Abfrage-ID zu ermitteln:

SELECT SYSTEM$EXPLAIN_PLAN_JSON(LAST_QUERY_ID()) AS explain_plan;
Copy