解释
描述
EXPLAIN
语句用于为输入语句提供逻辑/物理计划。
默认情况下,此子句仅提供关于物理计划的信息。
语法
EXPLAIN [ EXTENDED | CODEGEN | COST | FORMATTED ] 语句
参数
-
扩展
生成解析后的逻辑计划、分析后的逻辑计划、优化后的逻辑计划和物理计划。 解析的逻辑计划是从查询中提取的未解决计划。 分析后的逻辑计划转换将未解决的属性和未解决的关系转换为完全类型的对象。 优化后的逻辑计划通过一系列优化规则进行转换,最终形成物理计划。
-
代码生成
为语句生成代码(如果有的话)和物理计划。
-
成本
如果计划节点统计信息可用,生成逻辑计划和统计信息。
-
格式化
生成两个部分:物理计划概述和节点详细信息。
-
语句
指定要解释的 SQL 语句。
示例
-- 默认输出
EXPLAIN select k, sum(v) from values (1, 2), (1, 3) t(k, v) group by k;
+----------------------------------------------------+
| 计划|
+----------------------------------------------------+
| == 物理 计划 ==
*(2) HashAggregate(keys=[k#33], functions=[sum(cast(v#34 as bigint))])
+- 交换 hashpartitioning(k#33, 200), true, [id=#59]
+- *(1) HashAggregate(keys=[k#33], functions=[partial_sum(cast(v#34 as bigint))])
+- *(1) LocalTableScan [k#33, v#34]
|
+----------------------------------------------------
-- 使用扩展
EXPLAIN EXTENDED select k, sum(v) from values (1, 2), (1, 3) t(k, v) group by k;
+----------------------------------------------------+
| 计划|
+----------------------------------------------------+
| == 解析 逻辑 计划 ==
'Aggregate ['k], ['k, unresolvedalias('sum('v), None)]
+- '子查询别名 `t`
+- '未解析内联表 [k, v], [List(1, 2), List(1, 3)]
== 分析的逻辑计划 ==
k: int, sum(v): bigint
Aggregate [k#47], [k#47, sum(cast(v#48 as bigint)) AS sum(v)#50L]
+- 子查询别名 `t`
+- LocalRelation [k#47, v#48]
== 优化的逻辑计划 ==
Aggregate [k#47], [k#47, sum(cast(v#48 as bigint)) AS sum(v)#50L]
+- LocalRelation [k#47, v#48]
== 物理计划 ==
*(2) HashAggregate(keys=[k#47], functions=[sum(cast(v#48 as bigint))], output=[k#47, sum(v)#50L])
+- 交换 hashpartitioning(k#47, 200), true, [id=#79]
+- *(1) HashAggregate(keys=[k#47], functions=[partial_sum(cast(v#48 as bigint))], output=[k#47, sum#52L])
+- *(1) LocalTableScan [k#47, v#48]
|
+----------------------------------------------------+
-- 使用格式化
EXPLAIN FORMATTED select k, sum(v) from values (1, 2), (1, 3) t(k, v) group by k;
+----------------------------------------------------+
| plan|
+----------------------------------------------------+
| == 物理计划 ==
* HashAggregate (4)
+- 交换 (3)
+- * HashAggregate (2)
+- * LocalTableScan (1)
(1) LocalTableScan [codegen id : 1]
输出: [k#19, v#20]
(2) HashAggregate [codegen id : 1]
输入: [k#19, v#20]
(3) 交换
输入: [k#19, sum#24L]
(4) HashAggregate [codegen id : 2]
输入: [k#19, sum#24L]
|
+----------------------------------------------------+