Categorias:

Funções do sistema

SYSTEM$EXPLAIN_PLAN_JSON

Dado o texto de uma instrução SQL, esta função gera o plano EXPLAIN em JSON.

Consulte também:

SYSTEM$EXPLAIN_JSON_TO_TEXT , EXPLAIN_JSON

Sintaxe

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

Argumentos

sql_statement_expression

Uma cadeia de caracteres ou uma expressão que avalia como uma cadeia de caracteres, contendo a instrução SQL para a qual você quer o plano EXPLAIN. Se uma cadeia de caracteres literal for usada, ela deve ser delimitada por caracteres de aspas simples '.

sql_query_id_expression

Uma cadeia de caracteres ou uma expressão que avalia como uma cadeia de caracteres, contendo a ID da consulta para a qual você quer o plano EXPLAIN. Se uma cadeia de caracteres literal for usada, ela deve ser delimitada por caracteres de aspas simples '.

O Snowflake retém dados históricos para os IDs de consulta executados dentro dos 14 dias anteriores. Se você especificar o ID da consulta para uma consulta executada há mais de 14 dias, um erro é retornado. Para obter mais informações, consulte Monitoramento da atividade de consulta com o Histórico de consultas.

Retornos

A função retorna um VARCHAR contendo a saída EXPLAIN em formato compatível com JSON.

Notas de uso

  • Se uma cadeia de caracteres literal for passada como entrada, o delimitador ao redor da cadeia de caracteres pode ser o símbolo de aspas simples ' ou um sinal de dólar duplo $$. Se a cadeia de caracteres literal contiver aspas simples (e não contiver sinais de cifrão duplo), então a delimitação da cadeia de caracteres com sinais de cifrão duplo evitará a necessidade de escapar dos caracteres de aspas simples embutidos dentro da cadeia de caracteres.

  • Instruções SQL que falhariam se fossem executadas de forma autônoma não podem ser usadas como argumentos para essa função. Por exemplo, se uma instrução CREATE TABLE for especificada, ela não poderá ser executada novamente (o nome da tabela já existe). A função do sistema falha com um erro ao tentar recompilar a instrução.

  • Para pós-processar a saída deste comando, você pode:

    • Usar a função RESULT_SCAN, que trata a saída como uma tabela que pode ser consultada.

    • Inserir a saída JSON formatada em uma tabela para análise posterior. Se você armazenar a saída no formato JSON, você pode usar a função SYSTEM$EXPLAIN_JSON_TO_TEXT ou EXPLAIN_JSON para converter o JSON em um formato legível para humanos (seja tabular ou texto formatado).

Exemplos

Estes exemplos utilizam as tabelas mostradas abaixo:

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

Este exemplo usa uma cadeia de caracteres literal que contém uma instrução SQL como argumento de entrada:

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

Use $$ para delimitar as consultas que contenham aspas simples:

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

O código abaixo mostra como olhar para o plano EXPLAIN de uma consulta que você já executou.

Executar a consulta:

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

Executar EXPLAIN na consulta, chamando LAST_QUERY_ID() para procurar a ID da consulta:

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