EXPLAIN¶
返回指定 SQL 语句的逻辑执行计划。
解释计划会显示 Snowflake 为执行查询而执行的操作(例如,表扫描和联接)。
语法¶
参数¶
statement这是您需要解释计划的 SQL 语句。
USING output_format此可选子句指定输出格式。可能的输出格式包括:
JSON:JSON 输出更易于存储在表和查询中。
TABULAR:表格输出通常比 JSON 输出更易于人类阅读。
TEXT:格式化的文本输出通常比 JSON 输出更易于人类阅读。
默认为 TABULAR。
输出¶
输出包含以下信息:
列 |
描述 |
|---|---|
|
大多数查询均包含单独一个步骤,但有些查询会以多个不同步骤的形式执行。此列指示操作属于哪个步骤。 |
|
分配给查询计划中各操作的唯一标识符。 |
|
操作的父节点标识符构成的数组。在查询配置文件中,父项显示在其子项上方,并带有将两者相连的链接。 |
|
Name of the operation, for example, Result, Filter, TableScan, Join, or CreateTableFromArchiveData. |
|
Name of the object referenced by a table scan operation, for example, table, materialized view, secure view, or ARCHIVE OF <table>. |
|
所引用对象的别名(如果在查询中为该对象指定了别名)。 |
|
与当前操作相关的表达式列表,例如筛选、连接谓词、预测、汇总等。 |
|
所引用的数据库对象中的微分区总数。 |
|
在编译时修剪后,所引用对象中剩余的分区数,即查询可能扫描的分区数。 |
|
The number of bytes contained in the partitionsAssigned. |
使用说明¶
EXPLAIN 编译 SQL 语句,但不会执行此语句,因此 EXPLAIN 不需要正在运行的仓库。
EXPLAIN 计划可能因当前仓库的大小而异。如果您在现有仓库外 EXPLAIN,Snowflake 会根据 XSMALL 仓库的容量构建 EXPLAIN 计划。
尽管 EXPLAIN 不会耗费任何计算 Credit,但查询的编译确实会耗费云服务 Credit,就像其他元数据操作一样。
若要对此命令的输出进行后处理,可以执行以下操作:
使用 RESULT_SCAN 函数,该函数将输出视为可查询的表。
以 JSON 格式生成输出,并将 JSON 格式化的输出插入到表中,以便稍后进行分析。如果以 JSON 格式存储输出,则可以使用函数 SYSTEM$EXPLAIN_JSON_TO_TEXT 或 EXPLAIN_JSON 将 JSON 转换为更易于阅读的格式(表格或格式化文本)。
assignedPartitions 和 assignedBytes 值是查询执行的上限预估值。运行时优化(如联接修剪)可减少查询执行期间扫描的分区数和字节数。
EXPLAIN 计划是“逻辑”解释计划。它显示了要执行的操作,及其之间的逻辑关系。计划中操作的实际执行顺序与计划显示的逻辑顺序不一定相符。
如果 EXPLAIN 语句中的任何数据库对象为 INFORMATION_SCHEMA 对象,该语句将失败并显示错误
EXPLAIN command has insufficient privilege on object <objName>。
示例¶
此示例显示针对两个小型表的简单查询的 EXPLAIN 输出。
创建表:
以表格格式为查询生成 EXPLAIN 计划:
为查询生成格式化文本形式的 EXPLAIN 计划:
为查询生成 JSON 形式的 EXPLAIN 计划: