解释命令
该 EXPLAIN 命令返回指定的 SQL 语句的 逻辑计划 和 物理计划。
EXPLAIN [ANALYZE] [VERBOSE] statement
EXPLAIN
返回语句的逻辑计划和物理(执行)计划。
要输出更多详细信息,请使用 EXPLAIN VERBOSE。
EXPLAIN 不会执行语句。
要执行语句并查看运行时指标,请使用 EXPLAIN ANALYZE。
示例 EXPLAIN
EXPLAIN
SELECT
room,
avg(temp) AS temp
FROM home
GROUP BY room
查看 EXPLAIN 示例输出
| 计划类型 | 计划 |
|---|
| 0 | logical_plan | 投影: home.room, AVG(home.temp) AS temp |
| | 聚合: groupBy=[[home.room]], aggr=[[AVG(home.temp)]] |
| | 表扫描:家中投影=[房间, 温度] |
| 1 | physical_plan | 投影执行: expr=[room@0 as room, AVG(home.temp)@1 as temp] |
| | 聚合执行:模式=最终分区,分组=[room@0 as room],聚合=[AVG(home.temp)] |
| | 合并批次执行:目标批次大小=8192 |
| | 重新分区执行: partitioning=Hash([room@0], 8), 输入分区数=8 |
| | 聚合执行:模式=部分,分组键=[room@0 作为 room],聚合=[平均值(home.temp)] |
| | ParquetExec: file_groups={8 组: [[70434/116281/404d73cea0236530ea94f5470701eb814a8f0565c0e4bef5a2d2e33dfbfc3567/1be334e8-0af8-00da-2615-f67cd4be90f7.parquet, 70434/116281/b7a9e7c57fbfc3bba9427e4b3e35c89e001e2e618b0c7eb9feb4d50a3932f4db/d29370d4-262f-0d32-2459-fe7b099f682f.parquet], [70434/116281/c14418ba28a22a3abb693a1cb326a63b62dc611aec58c9bed438fdafd3bc5882/8b29ae98-761f-0550-2fe4-ee77503658e9.parquet], [70434/116281/fa677477eed622ae8123da1251aa7c351f801e2ee2f0bc28c0fe3002a30b3563/65bb4dc3-04e1-0e02-107a-90cee83c51b0.parquet], [70434/116281/db162bdd30261019960dd70da182e6ebd270284569ecfb5deffea7e65baa0df9/2505e079-67c5-06d9-3ede-89aca542dd18.parquet], [70434/116281/0c025dcccae8691f5fd70b0f131eea4ca6fafb95a02f90a3dc7bb015efd3ab4f/3f3e44c3-b71e-0ca4-3dc7-8b2f75b9ff86.parquet], …]}, projection=[房间, 温度] |
EXPLAIN ANALYZE
执行语句并返回该语句的执行计划和运行时指标。 报告包括带有执行计数器、生成的行数和在查询执行期间采样的运行时指标的逻辑计划和物理计划。
如果计划需要读取大量数据文件, EXPLAIN 和 EXPLAIN ANALYZE 可能会缩短报告中文件的列表。要输出更多信息,包括所有扫描的 Parquet 文件的中间计划和路径,请使用 EXPLAIN ANALYZE VERBOSE。
示例 EXPLAIN ANALYZE
EXPLAIN ANALYZE
SELECT
room,
avg(temp) AS temp
FROM home
WHERE time >= '2023-01-01' AND time <= '2023-12-31'
GROUP BY room
查看 EXPLAIN ANALYZE 示例输出
| 计划类型 | 计划 |
|---|
| 0 | 带指标的计划 | ProjectionExec: expr=[room@0 as room, AVG(home.temp)@1 as temp], metrics=[output_rows=2, elapsed_compute=4.768µs] |
| | 聚合执行:模式=最终分区,分组=[room@0 as room],聚合=[AVG(home.temp)],排序模式=已排序,度量=[输出行数=2,耗时计算=140.405µs] |
| | 合并批次执行: 目标批次大小=8192, 统计信息=[输出行=2, 已经过的计算时间=6.821µs] |
| | 重分区执行:分区=哈希([room@0],8),输入分区=8,保持顺序=true,排序表达式=room@0 ASC,指标=[输出行=2,经过计算=18.408µs,重分区时间=59.698µs,获取时间=1.057882762s,发送时间=5.83µs] |
| | 聚合执行:模式=部分,分组依据=[room@0 作为 room],聚合=[AVG(home.temp)],排序模式=已排序,指标=[输出行=2,计算时间=137.577µs] |
| | RepartitionExec: partitioning=RoundRobinBatch(8), input_partitions=6, preserve_order=true, sort_exprs=room@0 ASC, metrics=[output_rows=46, elapsed_compute=26.637µs, repart_time=6ns, fetch_time=399.971411ms, send_time=6.658µs] |
| | 投影执行:表达式=[room@0作为房间, temp@2作为温度], 统计=[输出行数=46, 计算耗时=3.102µs] |
| | CoalesceBatchesExec: target_batch_size=8192, metrics=[output_rows=46, elapsed_compute=25.585µs] |
| | 过滤执行:time@1 >= 1672531200000000000 AND time@1 <= 1703980800000000000, metrics=[输出行=46, 计算耗时=26.51µs] |
| | ParquetExec: file_groups={6 组: [[70434/116281/404d73cea0236530ea94f5470701eb814a8f0565c0e4bef5a2d2e33dfbfc3567/1be334e8-0af8-00da-2615-f67cd4be90f7.parquet], [70434/116281/c14418ba28a22a3abb693a1cb326a63b62dc611aec58c9bed438fdafd3bc5882/8b29ae98-761f-0550-2fe4-ee77503658e9.parquet], [70434/116281/fa677477eed622ae8123da1251aa7c351f801e2ee2f0bc28c0fe3002a30b3563/65bb4dc3-04e1-0e02-107a-90cee83c51b0.parquet], [70434/116281/db162bdd30261019960dd70da182e6ebd270284569ecfb5deffea7e65baa0df9/2505e079-67c5-06d9-3ede-89aca542dd18.parquet], [70434/116281/0c025dcccae8691f5fd70b0f131eea4ca6fafb95a02f90a3dc7bb015efd3ab4f/3f3e44c3-b71e-0ca4-3dc7-8b2f75b9ff86.parquet], …]}, projection=[房间, 时间, 温度], output_ordering=[房间@0 ASC, 时间@1 ASC], predicate=时间@6 >= 1672531200000000000 AND 时间@6 <= 1703980800000000000, pruning_predicate=时间最大@0 >= 1672531200000000000 AND 时间最小@1 <= 1703980800000000000, required_guarantees=[], metrics=[输出行=46, 计算耗时=6ns, 谓词评估错误=0, 扫描字节=3279, 剪枝行组统计=0, 文件打开错误=0, 文件扫描错误=0, 下推行过滤=0, 谓词创建错误数=0, 行组剔除布隆过滤器=0, 页面索引行过滤=0, 打开时间消耗=398.462968ms, 处理时间消耗=1.626106ms, 总扫描时间消耗=1.36822ms, 页面索引评估时间=33.474µs, 下推评估时间=14.267µs, 扫描直到数据的时间消耗=1.27694ms] |
EXPLAIN ANALYZE VERBOSE
执行一个语句并返回执行计划、运行时指标以及有助于调试该语句的其他详细信息。
报告包括以下内容:
- 逻辑计划
- 物理计划,带有执行计数器、生成的行数和在查询执行期间采样的运行时指标
- 在
EXPLAIN报告中信息被截断,比如,对于查询检索到的所有Parquet文件的路径。 - DataFusion和Querier在生成最终物理计划之前生成的所有中间物理计划——有助于调试,以查看何时添加或移除
ExecutionPlan节点,以及InfluxDB如何优化查询。
示例 EXPLAIN ANALYZE VERBOSE
EXPLAIN ANALYZE VERBOSE SELECT temp FROM home
WHERE time >= now() - INTERVAL '7 days' AND room = 'Kitchen'
ORDER BY time