类别:

系统函数

SYSTEM$EXPLAIN_PLAN_JSON

给定 SQL 语句的文本,此函数会生成 JSON 格式的 EXPLAIN 执行计划。

另请参阅:

SYSTEM$EXPLAIN_JSON_TO_TEXTEXPLAIN_JSON

语法

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

实参

sql_statement_expression

字符串或计算结果为字符串的表达式,其中包含要为其生成 EXPLAIN 执行计划的 SQL 语句。如果使用字面量字符串,则应该放在单引号字符 ' 内。

sql_query_id_expression

字符串或计算结果为字符串的表达式,其中包含要为其生成 EXPLAIN 执行计划的查询 ID。如果使用字面量字符串,则应该放在单引号字符 ' 内。

Snowflake 可保留过去 14 天内执行的查询 IDs 的历史数据。如果您指定的查询 ID 对应于早于过去 14 天执行的查询,则会返回错误。有关更多信息,请参阅 使用 Query History 监控查询活动

返回

该函数返回 VARCHAR,其中包含 JSON 兼容格式的 EXPLAIN 输出。

使用说明

  • 如果字符串字面量作为输入传递,字符串周围的分隔符可以是单引号 ' 或双美元符号 $$。如果字符串字面量包含单引号(并且不包含双美元符号),则通过使用双美元符号分隔字符串,便无需将字符串中嵌入的单引号字符进行转义。

  • 若要对此命令的输出进行后处理,可以执行以下操作:

    • 使用 RESULT_SCAN 函数,该函数将输出视为可查询的表。

    • 将 JSON 格式化的输出插入到表格中,以便稍后进行分析。如果以 JSON 格式存储输出,则可以使用函数 SYSTEM$EXPLAIN_JSON_TO_TEXTEXPLAIN_JSON 将 JSON 转换为更易于阅读的格式(表格或格式化文本)。

示例

这些示例使用如下所示的表:

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

此示例使用包含 n SQL 语句的字面量字符串作为输入参数:

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

使用 $$ 来分隔包含单引号的查询:

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

以下代码演示了如何查看已执行的查询的 EXPLAIN 计划:

运行查询:

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

在查询中运行 EXPLAIN,调用 LAST_QUERY_ID() 以查找查询 ID:

SELECT SYSTEM$EXPLAIN_PLAN_JSON(LAST_QUERY_ID()) AS explain_plan;
Copy
语言: 中文