This is an automated email from the ASF dual-hosted git repository.
github-bot pushed a commit to branch asf-site
in repository https://gitbox.apache.org/repos/asf/datafusion.git
The following commit(s) were added to refs/heads/asf-site by this push:
new ec725e3ab6 Publish built docs triggered by
41e7aed3a943134c40d1b18cb9d424b358b5e5b1
ec725e3ab6 is described below
commit ec725e3ab621fb1461a271b5bdfd0f2bbfe1099b
Author: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
AuthorDate: Sat Mar 15 12:19:55 2025 +0000
Publish built docs triggered by 41e7aed3a943134c40d1b18cb9d424b358b5e5b1
---
_sources/user-guide/sql/explain.md.txt | 232 ++++++++++++++++++++++++---
searchindex.js | 2 +-
user-guide/sql/explain.html | 280 ++++++++++++++++++++++++++++++---
user-guide/sql/index.html | 5 +-
4 files changed, 468 insertions(+), 51 deletions(-)
diff --git a/_sources/user-guide/sql/explain.md.txt
b/_sources/user-guide/sql/explain.md.txt
index 3f2c7de43e..f89e854ebf 100644
--- a/_sources/user-guide/sql/explain.md.txt
+++ b/_sources/user-guide/sql/explain.md.txt
@@ -21,41 +21,227 @@
The `EXPLAIN` command shows the logical and physical execution plan for the
specified SQL statement.
-See the [Reading Explain Plans](../explain-usage.md) page for more information
on how to interpret these plans.
+## Syntax
<pre>
-EXPLAIN [ANALYZE] [VERBOSE] statement
+EXPLAIN [ANALYZE] [VERBOSE] [FORMAT format] statement
</pre>
-## EXPLAIN
+## `EXPLAIN`
Shows the execution plan of a statement.
If you need more detailed output, use `EXPLAIN VERBOSE`.
+Note that `EXPLAIN VERBOSE` only supports the `indent` format.
+
+The optional `[FORMAT format]` clause controls how the plan is displayed as
+explained below. If this clause is not specified, the plan is displayed using
+the format from the [configuration value] `datafusion.explain.format`.
+
+[configuration value]: ../configs.md
+
+### `indent` format (default)
+
+The `indent` format shows both the logical and physical plan, with one line for
+each operator in the plan. Child plans are indented to show the hierarchy.
+
+See [Reading Explain Plans](../explain-usage.md) for more information on how
to interpret these plans.
+
+```sql
+> CREATE TABLE t(x int, b int) AS VALUES (1, 2), (2, 3);
+0 row(s) fetched.
+Elapsed 0.004 seconds.
+
+> EXPLAIN SELECT SUM(x) FROM t GROUP BY b;
++---------------+-------------------------------------------------------------------------------+
+| plan_type | plan
|
++---------------+-------------------------------------------------------------------------------+
+| logical_plan | Projection: sum(t.x)
|
+| | Aggregate: groupBy=[[t.b]], aggr=[[sum(CAST(t.x AS
Int64))]] |
+| | TableScan: t projection=[x, b]
|
+| physical_plan | ProjectionExec: expr=[sum(t.x)@1 as sum(t.x)]
|
+| | AggregateExec: mode=FinalPartitioned, gby=[b@0 as b],
aggr=[sum(t.x)] |
+| | CoalesceBatchesExec: target_batch_size=8192
|
+| | RepartitionExec: partitioning=Hash([b@0], 16),
input_partitions=16 |
+| | RepartitionExec: partitioning=RoundRobinBatch(16),
input_partitions=1 |
+| | AggregateExec: mode=Partial, gby=[b@1 as b],
aggr=[sum(t.x)] |
+| | DataSourceExec: partitions=1,
partition_sizes=[1] |
+| |
|
++---------------+-------------------------------------------------------------------------------+
+2 row(s) fetched.
+Elapsed 0.004 seconds.
+```
+
+### `tree` format
+
+The `tree` format is modeled after [DuckDB plans] and is designed to be easier
+to see the high level structure of the plan
+
+[duckdb plans]: https://duckdb.org/docs/stable/guides/meta/explain.html
+
+```sql
+> EXPLAIN FORMAT TREE SELECT SUM(x) FROM t GROUP BY b;
++---------------+-------------------------------+
+| plan_type | plan |
++---------------+-------------------------------+
+| physical_plan | ┌───────────────────────────┐ |
+| | │ ProjectionExec │ |
+| | │ -------------------- │ |
+| | │ sum(t.x): sum(t.x)@1 │ |
+| | └─────────────┬─────────────┘ |
+| | ┌─────────────┴─────────────┐ |
+| | │ AggregateExec │ |
+| | │ -------------------- │ |
+| | │ aggr: sum(t.x) │ |
+| | │ group_by: b@0 as b │ |
+| | │ │ |
+| | │ mode: │ |
+| | │ FinalPartitioned │ |
+| | └─────────────┬─────────────┘ |
+| | ┌─────────────┴─────────────┐ |
+| | │ CoalesceBatchesExec │ |
+| | └─────────────┬─────────────┘ |
+| | ┌─────────────┴─────────────┐ |
+| | │ RepartitionExec │ |
+| | │ -------------------- │ |
+| | │ output_partition_count: │ |
+| | │ 16 │ |
+| | │ │ |
+| | │ partitioning_scheme: │ |
+| | │ Hash([b@0], 16) │ |
+| | └─────────────┬─────────────┘ |
+| | ┌─────────────┴─────────────┐ |
+| | │ RepartitionExec │ |
+| | │ -------------------- │ |
+| | │ output_partition_count: │ |
+| | │ 1 │ |
+| | │ │ |
+| | │ partitioning_scheme: │ |
+| | │ RoundRobinBatch(16) │ |
+| | └─────────────┬─────────────┘ |
+| | ┌─────────────┴─────────────┐ |
+| | │ AggregateExec │ |
+| | │ -------------------- │ |
+| | │ aggr: sum(t.x) │ |
+| | │ group_by: b@1 as b │ |
+| | │ mode: Partial │ |
+| | └─────────────┬─────────────┘ |
+| | ┌─────────────┴─────────────┐ |
+| | │ DataSourceExec │ |
+| | │ -------------------- │ |
+| | │ bytes: 224 │ |
+| | │ format: memory │ |
+| | │ rows: 1 │ |
+| | └───────────────────────────┘ |
+| | |
++---------------+-------------------------------+
+1 row(s) fetched.
+Elapsed 0.016 seconds.
+```
+
+### `pgjson` format
+
+The `pgjson` format is modeled after [Postgres JSON] format.
+
+You can use this format to visualize the plan in existing plan visualization
+tools, such as [dalibo]
+
+[postgres json]: https://www.postgresql.org/docs/current/sql-explain.html
+[dalibo]: https://explain.dalibo.com/
+
+```sql
+> EXPLAIN FORMAT PGJSON SELECT SUM(x) FROM t GROUP BY b;
++--------------+----------------------------------------------------+
+| plan_type | plan |
++--------------+----------------------------------------------------+
+| logical_plan | [ |
+| | { |
+| | "Plan": { |
+| | "Expressions": [ |
+| | "sum(t.x)" |
+| | ], |
+| | "Node Type": "Projection", |
+| | "Output": [ |
+| | "sum(t.x)" |
+| | ], |
+| | "Plans": [ |
+| | { |
+| | "Aggregates": "sum(CAST(t.x AS Int64))", |
+| | "Group By": "t.b", |
+| | "Node Type": "Aggregate", |
+| | "Output": [ |
+| | "b", |
+| | "sum(t.x)" |
+| | ], |
+| | "Plans": [ |
+| | { |
+| | "Node Type": "TableScan", |
+| | "Output": [ |
+| | "x", |
+| | "b" |
+| | ], |
+| | "Plans": [], |
+| | "Relation Name": "t" |
+| | } |
+| | ] |
+| | } |
+| | ] |
+| | } |
+| | } |
+| | ] |
++--------------+----------------------------------------------------+
+1 row(s) fetched.
+Elapsed 0.008 seconds.
+```
+
+### `graphviz` format
+
+The `graphviz` format uses the [DOT language] that can be used with [Graphviz]
to
+generate a visual representation of the plan.
+
+[dot language]: https://graphviz.org/doc/info/lang.html
+[graphviz]: https://graphviz.org/
```sql
-EXPLAIN SELECT SUM(x) FROM table GROUP BY b;
-
-+---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| plan_type | plan
|
-+---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| logical_plan | Projection: #SUM(table.x)
|
-| | Aggregate: groupBy=[[#table.b]], aggr=[[SUM(#table.x)]]
|
-| | TableScan: table projection=[x, b]
|
-| physical_plan | ProjectionExec: expr=[SUM(table.x)@1 as SUM(table.x)]
|
-| | AggregateExec: mode=FinalPartitioned, gby=[b@0 as b],
aggr=[SUM(table.x)]
|
-| | CoalesceBatchesExec: target_batch_size=4096
|
-| | RepartitionExec: partitioning=Hash([Column { name:
"b", index: 0 }], 16)
|
-| | AggregateExec: mode=Partial, gby=[b@1 as b],
aggr=[SUM(table.x)]
|
-| | RepartitionExec: partitioning=RoundRobinBatch(16)
|
-| | DataSourceExec: file_groups={1 group:
[[/tmp/table.csv]]}, projection=[x, b], has_header=false
|
-| |
|
-+---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------+
+> EXPLAIN FORMAT GRAPHVIZ SELECT SUM(x) FROM t GROUP BY b;
++--------------+------------------------------------------------------------------------------------------------------------------------------+
+| plan_type | plan
|
++--------------+------------------------------------------------------------------------------------------------------------------------------+
+| logical_plan |
|
+| | // Begin DataFusion GraphViz Plan,
|
+| | // display it online here:
https://dreampuf.github.io/GraphvizOnline
|
+| |
|
+| | digraph {
|
+| | subgraph cluster_1
|
+| | {
|
+| | graph[label="LogicalPlan"]
|
+| | 2[shape=box label="Projection: sum(t.x)"]
|
+| | 3[shape=box label="Aggregate: groupBy=[[t.b]],
aggr=[[sum(CAST(t.x AS Int64))]]"] |
+| | 2 -> 3 [arrowhead=none, arrowtail=normal, dir=back]
|
+| | 4[shape=box label="TableScan: t projection=[x, b]"]
|
+| | 3 -> 4 [arrowhead=none, arrowtail=normal, dir=back]
|
+| | }
|
+| | subgraph cluster_5
|
+| | {
|
+| | graph[label="Detailed LogicalPlan"]
|
+| | 6[shape=box label="Projection: sum(t.x)\nSchema:
[sum(t.x):Int64;N]"] |
+| | 7[shape=box label="Aggregate: groupBy=[[t.b]],
aggr=[[sum(CAST(t.x AS Int64))]]\nSchema: [b:Int32;N, sum(t.x):Int64;N]"] |
+| | 6 -> 7 [arrowhead=none, arrowtail=normal, dir=back]
|
+| | 8[shape=box label="TableScan: t projection=[x,
b]\nSchema: [x:Int32;N, b:Int32;N]"] |
+| | 7 -> 8 [arrowhead=none, arrowtail=normal, dir=back]
|
+| | }
|
+| | }
|
+| | // End DataFusion GraphViz Plan
|
+| |
|
++--------------+------------------------------------------------------------------------------------------------------------------------------+
+1 row(s) fetched.
+Elapsed 0.010 seconds.
```
-## EXPLAIN ANALYZE
+## `EXPLAIN ANALYZE`
-Shows the execution plan and metrics of a statement.
-If you need more information output, use `EXPLAIN ANALYZE VERBOSE`.
+Shows the execution plan and metrics of a statement. If you need more
+information output, use `EXPLAIN ANALYZE VERBOSE`. Note that `EXPLAIN ANALYZE`
+only supports the `indent` format.
```sql
EXPLAIN ANALYZE SELECT SUM(x) FROM table GROUP BY b;
diff --git a/searchindex.js b/searchindex.js
index db30d4cd7b..860af7148c 100644
--- a/searchindex.js
+++ b/searchindex.js
@@ -1 +1 @@
-Search.setIndex({"alltitles":{"!=":[[52,"op-neq"]],"!~":[[52,"op-re-not-match"]],"!~*":[[52,"op-re-not-match-i"]],"!~~":[[52,"id19"]],"!~~*":[[52,"id20"]],"#":[[52,"op-bit-xor"]],"%":[[52,"op-modulo"]],"&":[[52,"op-bit-and"]],"(relation,
name) tuples in logical fields and logical columns are
unique":[[12,"relation-name-tuples-in-logical-fields-and-logical-columns-are-unique"]],"*":[[52,"op-multiply"]],"+":[[52,"op-plus"]],"-":[[52,"op-minus"]],"/":[[52,"op-divide"]],"2022
Q2":[[10,"q2"]] [...]
\ No newline at end of file
+Search.setIndex({"alltitles":{"!=":[[52,"op-neq"]],"!~":[[52,"op-re-not-match"]],"!~*":[[52,"op-re-not-match-i"]],"!~~":[[52,"id19"]],"!~~*":[[52,"id20"]],"#":[[52,"op-bit-xor"]],"%":[[52,"op-modulo"]],"&":[[52,"op-bit-and"]],"(relation,
name) tuples in logical fields and logical columns are
unique":[[12,"relation-name-tuples-in-logical-fields-and-logical-columns-are-unique"]],"*":[[52,"op-multiply"]],"+":[[52,"op-plus"]],"-":[[52,"op-minus"]],"/":[[52,"op-divide"]],"2022
Q2":[[10,"q2"]] [...]
\ No newline at end of file
diff --git a/user-guide/sql/explain.html b/user-guide/sql/explain.html
index 2c05137a5e..f69ea77a39 100644
--- a/user-guide/sql/explain.html
+++ b/user-guide/sql/explain.html
@@ -522,14 +522,72 @@
<nav id="bd-toc-nav">
<ul class="visible nav section-nav flex-column">
+ <li class="toc-h2 nav-item toc-entry">
+ <a class="reference internal nav-link" href="#syntax">
+ Syntax
+ </a>
+ </li>
<li class="toc-h2 nav-item toc-entry">
<a class="reference internal nav-link" href="#id1">
- EXPLAIN
+ <code class="docutils literal notranslate">
+ <span class="pre">
+ EXPLAIN
+ </span>
+ </code>
</a>
+ <ul class="nav section-nav flex-column">
+ <li class="toc-h3 nav-item toc-entry">
+ <a class="reference internal nav-link" href="#indent-format-default">
+ <code class="docutils literal notranslate">
+ <span class="pre">
+ indent
+ </span>
+ </code>
+ format (default)
+ </a>
+ </li>
+ <li class="toc-h3 nav-item toc-entry">
+ <a class="reference internal nav-link" href="#tree-format">
+ <code class="docutils literal notranslate">
+ <span class="pre">
+ tree
+ </span>
+ </code>
+ format
+ </a>
+ </li>
+ <li class="toc-h3 nav-item toc-entry">
+ <a class="reference internal nav-link" href="#pgjson-format">
+ <code class="docutils literal notranslate">
+ <span class="pre">
+ pgjson
+ </span>
+ </code>
+ format
+ </a>
+ </li>
+ <li class="toc-h3 nav-item toc-entry">
+ <a class="reference internal nav-link" href="#graphviz-format">
+ <code class="docutils literal notranslate">
+ <span class="pre">
+ graphviz
+ </span>
+ </code>
+ format
+ </a>
+ </li>
+ </ul>
</li>
<li class="toc-h2 nav-item toc-entry">
<a class="reference internal nav-link" href="#explain-analyze">
- EXPLAIN ANALYZE
+ <code class="docutils literal notranslate">
+ <span class="pre">
+ EXPLAIN
+ </span>
+ <span class="pre">
+ ANALYZE
+ </span>
+ </code>
</a>
</li>
</ul>
@@ -581,38 +639,210 @@
<section id="explain">
<h1>EXPLAIN<a class="headerlink" href="#explain" title="Link to this
heading">¶</a></h1>
<p>The <code class="docutils literal notranslate"><span
class="pre">EXPLAIN</span></code> command shows the logical and physical
execution plan for the specified SQL statement.</p>
-<p>See the <a class="reference internal" href="../explain-usage.html"><span
class="std std-doc">Reading Explain Plans</span></a> page for more information
on how to interpret these plans.</p>
+<section id="syntax">
+<h2>Syntax<a class="headerlink" href="#syntax" title="Link to this
heading">¶</a></h2>
<pre>
-EXPLAIN [ANALYZE] [VERBOSE] statement
+EXPLAIN [ANALYZE] [VERBOSE] [FORMAT format] statement
</pre>
+</section>
<section id="id1">
-<h2>EXPLAIN<a class="headerlink" href="#id1" title="Link to this
heading">¶</a></h2>
+<h2><code class="docutils literal notranslate"><span
class="pre">EXPLAIN</span></code><a class="headerlink" href="#id1" title="Link
to this heading">¶</a></h2>
<p>Shows the execution plan of a statement.
-If you need more detailed output, use <code class="docutils literal
notranslate"><span class="pre">EXPLAIN</span> <span
class="pre">VERBOSE</span></code>.</p>
-<div class="highlight-sql notranslate"><div
class="highlight"><pre><span></span><span class="k">EXPLAIN</span><span
class="w"> </span><span class="k">SELECT</span><span class="w"> </span><span
class="k">SUM</span><span class="p">(</span><span class="n">x</span><span
class="p">)</span><span class="w"> </span><span class="k">FROM</span><span
class="w"> </span><span class="k">table</span><span class="w"> </span><span
class="k">GROUP</span><span class="w"> </span><span class="k">BY</span><sp [...]
+If you need more detailed output, use <code class="docutils literal
notranslate"><span class="pre">EXPLAIN</span> <span
class="pre">VERBOSE</span></code>.
+Note that <code class="docutils literal notranslate"><span
class="pre">EXPLAIN</span> <span class="pre">VERBOSE</span></code> only
supports the <code class="docutils literal notranslate"><span
class="pre">indent</span></code> format.</p>
+<p>The optional <code class="docutils literal notranslate"><span
class="pre">[FORMAT</span> <span class="pre">format]</span></code> clause
controls how the plan is displayed as
+explained below. If this clause is not specified, the plan is displayed using
+the format from the <a class="reference internal" href="../configs.html"><span
class="std std-doc">configuration value</span></a> <code class="docutils
literal notranslate"><span
class="pre">datafusion.explain.format</span></code>.</p>
+<section id="indent-format-default">
+<h3><code class="docutils literal notranslate"><span
class="pre">indent</span></code> format (default)<a class="headerlink"
href="#indent-format-default" title="Link to this heading">¶</a></h3>
+<p>The <code class="docutils literal notranslate"><span
class="pre">indent</span></code> format shows both the logical and physical
plan, with one line for
+each operator in the plan. Child plans are indented to show the hierarchy.</p>
+<p>See <a class="reference internal" href="../explain-usage.html"><span
class="std std-doc">Reading Explain Plans</span></a> for more information on
how to interpret these plans.</p>
+<div class="highlight-sql notranslate"><div
class="highlight"><pre><span></span><span class="o">></span><span class="w">
</span><span class="k">CREATE</span><span class="w"> </span><span
class="k">TABLE</span><span class="w"> </span><span class="n">t</span><span
class="p">(</span><span class="n">x</span><span class="w"> </span><span
class="nb">int</span><span class="p">,</span><span class="w"> </span><span
class="n">b</span><span class="w"> </span><span class="nb">int</span><span clas
[...]
+<span class="mi">0</span><span class="w"> </span><span
class="k">row</span><span class="p">(</span><span class="n">s</span><span
class="p">)</span><span class="w"> </span><span class="n">fetched</span><span
class="p">.</span>
+<span class="n">Elapsed</span><span class="w"> </span><span
class="mi">0</span><span class="p">.</span><span class="mi">004</span><span
class="w"> </span><span class="n">seconds</span><span class="p">.</span>
-<span class="o">+</span><span
class="c1">---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------+</span>
-<span class="o">|</span><span class="w"> </span><span
class="n">plan_type</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span class="n">plan</span><span
class="w">
</span><span class="o">|</span>
-<span class="o">+</span><span
class="c1">---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------+</span>
-<span class="o">|</span><span class="w"> </span><span
class="n">logical_plan</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span
class="n">Projection</span><span class="p">:</span><span class="w">
</span><span class="o">#</span><span class="k">SUM</span><span
class="p">(</span><span class="k">table</span><span class="p">.</span><span
class="n">x</span><span class="p">)</span><span class="w">
[...]
-<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span
class="k">Aggregate</span><span class="p">:</span><span class="w"> </span><span
class="n">groupBy</span><span class="o">=</span><span class="p">[[</span><span
class="o">#</span><span class="k">table</span><span class="p">.</span><span
class="n">b</span><span class="p">]],</span><span class="w"> </span><span
class="n">aggr</span><span class="o">=</span><span class="p">[[</ [...]
-<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span
class="n">TableScan</span><span class="p">:</span><span class="w"> </span><span
class="k">table</span><span class="w"> </span><span
class="n">projection</span><span class="o">=</span><span
class="p">[</span><span class="n">x</span><span class="p">,</span><span
class="w"> </span><span class="n">b</span><span class="p">]</span><span
class="w"> [...]
-<span class="o">|</span><span class="w"> </span><span
class="n">physical_plan</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span
class="n">ProjectionExec</span><span class="p">:</span><span class="w">
</span><span class="n">expr</span><span class="o">=</span><span
class="p">[</span><span class="k">SUM</span><span class="p">(</span><span
class="k">table</span><span class="p">.</span><span class="n">x</span><span
class="p">)</span><span class="o">@</span><s [...]
-<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span
class="n">AggregateExec</span><span class="p">:</span><span class="w">
</span><span class="k">mode</span><span class="o">=</span><span
class="n">FinalPartitioned</span><span class="p">,</span><span class="w">
</span><span class="n">gby</span><span class="o">=</span><span
class="p">[</span><span class="n">b</span><span class="o">@</span><span
class="mi">0</span><span class [...]
-<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span
class="n">CoalesceBatchesExec</span><span class="p">:</span><span class="w">
</span><span class="n">target_batch_size</span><span class="o">=</span><span
class="mi">4096</span><span class="w">
</span><span class="o">|</span>
-<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span
class="n">RepartitionExec</span><span class="p">:</span><span class="w">
</span><span class="n">partitioning</span><span class="o">=</span><span
class="n">Hash</span><span class="p">([</span><span
class="k">Column</span><span class="w"> </span><span class="err">{</span><span
class="w"> </span><span class="n">name</span><span class="p">:</span><span
class="w"> </span>< [...]
-<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span
class="n">AggregateExec</span><span class="p">:</span><span class="w">
</span><span class="k">mode</span><span class="o">=</span><span
class="k">Partial</span><span class="p">,</span><span class="w"> </span><span
class="n">gby</span><span class="o">=</span><span class="p">[</span><span
class="n">b</span><span class="o">@</span><span class="mi">1</span><span
class="w [...]
-<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span
class="n">RepartitionExec</span><span class="p">:</span><span class="w">
</span><span class="n">partitioning</span><span class="o">=</span><span
class="n">RoundRobinBatch</span><span class="p">(</span><span
class="mi">16</span><span class="p">)</span><span class="w">
[...]
-<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span
class="n">DataSourceExec</span><span class="p">:</span><span class="w">
</span><span class="n">file_groups</span><span class="o">=</span><span
class="err">{</span><span class="mi">1</span><span class="w"> </span><span
class="k">group</span><span class="p">:</span><span class="w"> </span><span
class="p">[[</span><span class="o">/</span><span class="n">tmp</span>< [...]
-<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w">
</span><span class="o">|</span>
-<span class="o">+</span><span
class="c1">---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------+</span>
+<span class="o">></span><span class="w"> </span><span
class="k">EXPLAIN</span><span class="w"> </span><span
class="k">SELECT</span><span class="w"> </span><span class="k">SUM</span><span
class="p">(</span><span class="n">x</span><span class="p">)</span><span
class="w"> </span><span class="k">FROM</span><span class="w"> </span><span
class="n">t</span><span class="w"> </span><span class="k">GROUP</span><span
class="w"> </span><span class="k">BY</span><span class="w"> </span><span class=
[...]
+<span class="o">+</span><span
class="c1">---------------+-------------------------------------------------------------------------------+</span>
+<span class="o">|</span><span class="w"> </span><span
class="n">plan_type</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span class="n">plan</span><span
class="w">
</span><span class="o">|</span>
+<span class="o">+</span><span
class="c1">---------------+-------------------------------------------------------------------------------+</span>
+<span class="o">|</span><span class="w"> </span><span
class="n">logical_plan</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span
class="n">Projection</span><span class="p">:</span><span class="w">
</span><span class="k">sum</span><span class="p">(</span><span
class="n">t</span><span class="p">.</span><span class="n">x</span><span
class="p">)</span><span class="w">
</span><span class="o">|</span>
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span
class="k">Aggregate</span><span class="p">:</span><span class="w"> </span><span
class="n">groupBy</span><span class="o">=</span><span class="p">[[</span><span
class="n">t</span><span class="p">.</span><span class="n">b</span><span
class="p">]],</span><span class="w"> </span><span class="n">aggr</span><span
class="o">=</span><span class="p">[[</span><span class="k">sum</sp [...]
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span
class="n">TableScan</span><span class="p">:</span><span class="w"> </span><span
class="n">t</span><span class="w"> </span><span
class="n">projection</span><span class="o">=</span><span
class="p">[</span><span class="n">x</span><span class="p">,</span><span
class="w"> </span><span class="n">b</span><span class="p">]</span><span
class="w"> [...]
+<span class="o">|</span><span class="w"> </span><span
class="n">physical_plan</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span
class="n">ProjectionExec</span><span class="p">:</span><span class="w">
</span><span class="n">expr</span><span class="o">=</span><span
class="p">[</span><span class="k">sum</span><span class="p">(</span><span
class="n">t</span><span class="p">.</span><span class="n">x</span><span
class="p">)</span><span class="o">@</span><span [...]
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span
class="n">AggregateExec</span><span class="p">:</span><span class="w">
</span><span class="k">mode</span><span class="o">=</span><span
class="n">FinalPartitioned</span><span class="p">,</span><span class="w">
</span><span class="n">gby</span><span class="o">=</span><span
class="p">[</span><span class="n">b</span><span class="o">@</span><span
class="mi">0</span><span class [...]
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span
class="n">CoalesceBatchesExec</span><span class="p">:</span><span class="w">
</span><span class="n">target_batch_size</span><span class="o">=</span><span
class="mi">8192</span><span class="w">
</span><span class="o">|</span>
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span
class="n">RepartitionExec</span><span class="p">:</span><span class="w">
</span><span class="n">partitioning</span><span class="o">=</span><span
class="n">Hash</span><span class="p">([</span><span class="n">b</span><span
class="o">@</span><span class="mi">0</span><span class="p">],</span><span
class="w"> </span><span class="mi">16</span><span class="p">),</span><span
[...]
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span
class="n">RepartitionExec</span><span class="p">:</span><span class="w">
</span><span class="n">partitioning</span><span class="o">=</span><span
class="n">RoundRobinBatch</span><span class="p">(</span><span
class="mi">16</span><span class="p">),</span><span class="w"> </span><span
class="n">input_partitions</span><span class="o">=</span><span
class="mi">1</span><spa [...]
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span
class="n">AggregateExec</span><span class="p">:</span><span class="w">
</span><span class="k">mode</span><span class="o">=</span><span
class="k">Partial</span><span class="p">,</span><span class="w"> </span><span
class="n">gby</span><span class="o">=</span><span class="p">[</span><span
class="n">b</span><span class="o">@</span><span class="mi">1</span><span class=
[...]
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span
class="n">DataSourceExec</span><span class="p">:</span><span class="w">
</span><span class="n">partitions</span><span class="o">=</span><span
class="mi">1</span><span class="p">,</span><span class="w"> </span><span
class="n">partition_sizes</span><span class="o">=</span><span
class="p">[</span><span class="mi">1</span><span class="p">]</span><span
class="w"> [...]
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w">
</span><span class="o">|</span>
+<span class="o">+</span><span
class="c1">---------------+-------------------------------------------------------------------------------+</span>
+<span class="mi">2</span><span class="w"> </span><span
class="k">row</span><span class="p">(</span><span class="n">s</span><span
class="p">)</span><span class="w"> </span><span class="n">fetched</span><span
class="p">.</span>
+<span class="n">Elapsed</span><span class="w"> </span><span
class="mi">0</span><span class="p">.</span><span class="mi">004</span><span
class="w"> </span><span class="n">seconds</span><span class="p">.</span>
</pre></div>
</div>
</section>
+<section id="tree-format">
+<h3><code class="docutils literal notranslate"><span
class="pre">tree</span></code> format<a class="headerlink" href="#tree-format"
title="Link to this heading">¶</a></h3>
+<p>The <code class="docutils literal notranslate"><span
class="pre">tree</span></code> format is modeled after <a class="reference
external" href="https://duckdb.org/docs/stable/guides/meta/explain.html">DuckDB
plans</a> and is designed to be easier
+to see the high level structure of the plan</p>
+<div class="highlight-sql notranslate"><div
class="highlight"><pre><span></span><span class="o">></span><span class="w">
</span><span class="k">EXPLAIN</span><span class="w"> </span><span
class="n">FORMAT</span><span class="w"> </span><span class="n">TREE</span><span
class="w"> </span><span class="k">SELECT</span><span class="w"> </span><span
class="k">SUM</span><span class="p">(</span><span class="n">x</span><span
class="p">)</span><span class="w"> </span><span class="k">FROM</span>< [...]
+<span class="o">+</span><span
class="c1">---------------+-------------------------------+</span>
+<span class="o">|</span><span class="w"> </span><span
class="n">plan_type</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span class="n">plan</span><span
class="w"> </span><span class="o">|</span>
+<span class="o">+</span><span
class="c1">---------------+-------------------------------+</span>
+<span class="o">|</span><span class="w"> </span><span
class="n">physical_plan</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span
class="err">┌───────────────────────────┐</span><span class="w"> </span><span
class="o">|</span>
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span class="err">│</span><span
class="w"> </span><span class="n">ProjectionExec</span><span class="w">
</span><span class="err">│</span><span class="w"> </span><span
class="o">|</span>
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span class="err">│</span><span
class="w"> </span><span class="c1">-------------------- │ |</span>
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span class="err">│</span><span
class="w"> </span><span class="k">sum</span><span class="p">(</span><span
class="n">t</span><span class="p">.</span><span class="n">x</span><span
class="p">):</span><span class="w"> </span><span class="k">sum</span><span
class="p">(</span><span class="n">t</span><span class="p">.</span><span
class="n">x</span><span class="p">)</span><span class= [...]
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span
class="err">└─────────────┬─────────────┘</span><span class="w"> </span><span
class="o">|</span>
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span
class="err">┌─────────────┴─────────────┐</span><span class="w"> </span><span
class="o">|</span>
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span class="err">│</span><span
class="w"> </span><span class="n">AggregateExec</span><span class="w">
</span><span class="err">│</span><span class="w"> </span><span
class="o">|</span>
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span class="err">│</span><span
class="w"> </span><span class="c1">-------------------- │ |</span>
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span class="err">│</span><span
class="w"> </span><span class="n">aggr</span><span
class="p">:</span><span class="w"> </span><span class="k">sum</span><span
class="p">(</span><span class="n">t</span><span class="p">.</span><span
class="n">x</span><span class="p">)</span><span class="w"> </span><span
class="err">│</span><span class="w"> </span><span class="o">|</span>
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span class="err">│</span><span
class="w"> </span><span class="n">group_by</span><span
class="p">:</span><span class="w"> </span><span class="n">b</span><span
class="o">@</span><span class="mi">0</span><span class="w"> </span><span
class="k">as</span><span class="w"> </span><span class="n">b</span><span
class="w"> </span><span class="err">│</span><span class="w"> </span><s [...]
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span class="err">│</span><span
class="w"> </span><span class="err">│</span><span
class="w"> </span><span class="o">|</span>
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span class="err">│</span><span
class="w"> </span><span class="k">mode</span><span
class="p">:</span><span class="w"> </span><span
class="err">│</span><span class="w"> </span><span class="o">|</span>
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span class="err">│</span><span
class="w"> </span><span class="n">FinalPartitioned</span><span class="w">
</span><span class="err">│</span><span class="w"> </span><span
class="o">|</span>
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span
class="err">└─────────────┬─────────────┘</span><span class="w"> </span><span
class="o">|</span>
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span
class="err">┌─────────────┴─────────────┐</span><span class="w"> </span><span
class="o">|</span>
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span class="err">│</span><span
class="w"> </span><span class="n">CoalesceBatchesExec</span><span class="w">
</span><span class="err">│</span><span class="w"> </span><span
class="o">|</span>
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span
class="err">└─────────────┬─────────────┘</span><span class="w"> </span><span
class="o">|</span>
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span
class="err">┌─────────────┴─────────────┐</span><span class="w"> </span><span
class="o">|</span>
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span class="err">│</span><span
class="w"> </span><span class="n">RepartitionExec</span><span class="w">
</span><span class="err">│</span><span class="w"> </span><span
class="o">|</span>
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span class="err">│</span><span
class="w"> </span><span class="c1">-------------------- │ |</span>
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span class="err">│</span><span
class="w"> </span><span class="n">output_partition_count</span><span
class="p">:</span><span class="w"> </span><span class="err">│</span><span
class="w"> </span><span class="o">|</span>
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span class="err">│</span><span
class="w"> </span><span class="mi">16</span><span class="w">
</span><span class="err">│</span><span class="w"> </span><span
class="o">|</span>
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span class="err">│</span><span
class="w"> </span><span class="err">│</span><span
class="w"> </span><span class="o">|</span>
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span class="err">│</span><span
class="w"> </span><span class="n">partitioning_scheme</span><span
class="p">:</span><span class="w"> </span><span class="err">│</span><span
class="w"> </span><span class="o">|</span>
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span class="err">│</span><span
class="w"> </span><span class="n">Hash</span><span
class="p">([</span><span class="n">b</span><span class="o">@</span><span
class="mi">0</span><span class="p">],</span><span class="w"> </span><span
class="mi">16</span><span class="p">)</span><span class="w"> </span><span
class="err">│</span><span class="w"> </span><span class="o">|</span>
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span
class="err">└─────────────┬─────────────┘</span><span class="w"> </span><span
class="o">|</span>
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span
class="err">┌─────────────┴─────────────┐</span><span class="w"> </span><span
class="o">|</span>
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span class="err">│</span><span
class="w"> </span><span class="n">RepartitionExec</span><span class="w">
</span><span class="err">│</span><span class="w"> </span><span
class="o">|</span>
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span class="err">│</span><span
class="w"> </span><span class="c1">-------------------- │ |</span>
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span class="err">│</span><span
class="w"> </span><span class="n">output_partition_count</span><span
class="p">:</span><span class="w"> </span><span class="err">│</span><span
class="w"> </span><span class="o">|</span>
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span class="err">│</span><span
class="w"> </span><span class="mi">1</span><span class="w">
</span><span class="err">│</span><span class="w"> </span><span
class="o">|</span>
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span class="err">│</span><span
class="w"> </span><span class="err">│</span><span
class="w"> </span><span class="o">|</span>
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span class="err">│</span><span
class="w"> </span><span class="n">partitioning_scheme</span><span
class="p">:</span><span class="w"> </span><span class="err">│</span><span
class="w"> </span><span class="o">|</span>
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span class="err">│</span><span
class="w"> </span><span class="n">RoundRobinBatch</span><span
class="p">(</span><span class="mi">16</span><span class="p">)</span><span
class="w"> </span><span class="err">│</span><span class="w"> </span><span
class="o">|</span>
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span
class="err">└─────────────┬─────────────┘</span><span class="w"> </span><span
class="o">|</span>
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span
class="err">┌─────────────┴─────────────┐</span><span class="w"> </span><span
class="o">|</span>
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span class="err">│</span><span
class="w"> </span><span class="n">AggregateExec</span><span class="w">
</span><span class="err">│</span><span class="w"> </span><span
class="o">|</span>
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span class="err">│</span><span
class="w"> </span><span class="c1">-------------------- │ |</span>
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span class="err">│</span><span
class="w"> </span><span class="n">aggr</span><span
class="p">:</span><span class="w"> </span><span class="k">sum</span><span
class="p">(</span><span class="n">t</span><span class="p">.</span><span
class="n">x</span><span class="p">)</span><span class="w"> </span><span
class="err">│</span><span class="w"> </span><span class="o">|</span>
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span class="err">│</span><span
class="w"> </span><span class="n">group_by</span><span
class="p">:</span><span class="w"> </span><span class="n">b</span><span
class="o">@</span><span class="mi">1</span><span class="w"> </span><span
class="k">as</span><span class="w"> </span><span class="n">b</span><span
class="w"> </span><span class="err">│</span><span class="w"> </span><s [...]
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span class="err">│</span><span
class="w"> </span><span class="k">mode</span><span
class="p">:</span><span class="w"> </span><span class="k">Partial</span><span
class="w"> </span><span class="err">│</span><span class="w"> </span><span
class="o">|</span>
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span
class="err">└─────────────┬─────────────┘</span><span class="w"> </span><span
class="o">|</span>
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span
class="err">┌─────────────┴─────────────┐</span><span class="w"> </span><span
class="o">|</span>
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span class="err">│</span><span
class="w"> </span><span class="n">DataSourceExec</span><span class="w">
</span><span class="err">│</span><span class="w"> </span><span
class="o">|</span>
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span class="err">│</span><span
class="w"> </span><span class="c1">-------------------- │ |</span>
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span class="err">│</span><span
class="w"> </span><span class="n">bytes</span><span
class="p">:</span><span class="w"> </span><span class="mi">224</span><span
class="w"> </span><span class="err">│</span><span class="w">
</span><span class="o">|</span>
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span class="err">│</span><span
class="w"> </span><span class="n">format</span><span
class="p">:</span><span class="w"> </span><span class="n">memory</span><span
class="w"> </span><span class="err">│</span><span class="w"> </span><span
class="o">|</span>
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span class="err">│</span><span
class="w"> </span><span class="k">rows</span><span
class="p">:</span><span class="w"> </span><span class="mi">1</span><span
class="w"> </span><span class="err">│</span><span class="w">
</span><span class="o">|</span>
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span
class="err">└───────────────────────────┘</span><span class="w"> </span><span
class="o">|</span>
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span
class="o">|</span>
+<span class="o">+</span><span
class="c1">---------------+-------------------------------+</span>
+<span class="mi">1</span><span class="w"> </span><span
class="k">row</span><span class="p">(</span><span class="n">s</span><span
class="p">)</span><span class="w"> </span><span class="n">fetched</span><span
class="p">.</span>
+<span class="n">Elapsed</span><span class="w"> </span><span
class="mi">0</span><span class="p">.</span><span class="mi">016</span><span
class="w"> </span><span class="n">seconds</span><span class="p">.</span>
+</pre></div>
+</div>
+</section>
+<section id="pgjson-format">
+<h3><code class="docutils literal notranslate"><span
class="pre">pgjson</span></code> format<a class="headerlink"
href="#pgjson-format" title="Link to this heading">¶</a></h3>
+<p>The <code class="docutils literal notranslate"><span
class="pre">pgjson</span></code> format is modeled after <a class="reference
external"
href="https://www.postgresql.org/docs/current/sql-explain.html">Postgres
JSON</a> format.</p>
+<p>You can use this format to visualize the plan in existing plan visualization
+tools, such as <a class="reference external"
href="https://explain.dalibo.com/">dalibo</a></p>
+<div class="highlight-sql notranslate"><div
class="highlight"><pre><span></span><span class="o">></span><span class="w">
</span><span class="k">EXPLAIN</span><span class="w"> </span><span
class="n">FORMAT</span><span class="w"> </span><span
class="n">PGJSON</span><span class="w"> </span><span
class="k">SELECT</span><span class="w"> </span><span class="k">SUM</span><span
class="p">(</span><span class="n">x</span><span class="p">)</span><span
class="w"> </span><span class="k">FROM</span [...]
+<span class="o">+</span><span
class="c1">--------------+----------------------------------------------------+</span>
+<span class="o">|</span><span class="w"> </span><span
class="n">plan_type</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span class="n">plan</span><span
class="w"> </span><span
class="o">|</span>
+<span class="o">+</span><span
class="c1">--------------+----------------------------------------------------+</span>
+<span class="o">|</span><span class="w"> </span><span
class="n">logical_plan</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span class="p">[</span><span
class="w"> </span><span
class="o">|</span>
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span class="err">{</span><span
class="w"> </span><span
class="o">|</span>
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span
class="ss">"Plan"</span><span class="p">:</span><span class="w">
</span><span class="err">{</span><span class="w">
</span><span class="o">|</span>
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span
class="ss">"Expressions"</span><span class="p">:</span><span
class="w"> </span><span class="p">[</span><span class="w">
</span><span class="o">|</span>
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span
class="ss">"sum(t.x)"</span><span class="w">
</span><span class="o">|</span>
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span class="p">],</span><span
class="w"> </span><span
class="o">|</span>
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span class="ss">"Node
Type"</span><span class="p">:</span><span class="w"> </span><span
class="ss">"Projection"</span><span class="p">,</span><span
class="w"> </span><span class="o">|</span>
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span
class="ss">"Output"</span><span class="p">:</span><span class="w">
</span><span class="p">[</span><span class="w">
</span><span class="o">|</span>
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span
class="ss">"sum(t.x)"</span><span class="w">
</span><span class="o">|</span>
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span class="p">],</span><span
class="w"> </span><span
class="o">|</span>
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span
class="ss">"Plans"</span><span class="p">:</span><span class="w">
</span><span class="p">[</span><span class="w">
</span><span class="o">|</span>
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span
class="err">{</span><span class="w">
</span><span class="o">|</span>
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span
class="ss">"Aggregates"</span><span class="p">:</span><span
class="w"> </span><span class="ss">"sum(CAST(t.x AS
Int64))"</span><span class="p">,</span><span class="w"> </span><span
class="o">|</span>
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span
class="ss">"Group By"</span><span class="p">:</span><span class="w">
</span><span class="ss">"t.b"</span><span class="p">,</span><span
class="w"> </span><span class="o">|</span>
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span class="ss">"Node
Type"</span><span class="p">:</span><span class="w"> </span><span
class="ss">"Aggregate"</span><span class="p">,</span><span class="w">
</span><span class="o">|</span>
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span
class="ss">"Output"</span><span class="p">:</span><span class="w">
</span><span class="p">[</span><span class="w">
</span><span class="o">|</span>
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span
class="ss">"b"</span><span class="p">,</span><span class="w">
</span><span class="o">|</span>
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span
class="ss">"sum(t.x)"</span><span class="w">
</span><span class="o">|</span>
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span
class="p">],</span><span class="w">
</span><span class="o">|</span>
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span
class="ss">"Plans"</span><span class="p">:</span><span class="w">
</span><span class="p">[</span><span class="w">
</span><span class="o">|</span>
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span
class="err">{</span><span class="w">
</span><span class="o">|</span>
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span
class="ss">"Node Type"</span><span class="p">:</span><span class="w">
</span><span class="ss">"TableScan"</span><span
class="p">,</span><span class="w"> </span><span class="o">|</span>
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span
class="ss">"Output"</span><span class="p">:</span><span class="w">
</span><span class="p">[</span><span class="w">
</span><span class="o">|</span>
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span
class="ss">"x"</span><span class="p">,</span><span class="w">
</span><span class="o">|</span>
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span
class="ss">"b"</span><span class="w">
</span><span class="o">|</span>
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span
class="p">],</span><span class="w">
</span><span class="o">|</span>
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span
class="ss">"Plans"</span><span class="p">:</span><span class="w">
</span><span class="p">[],</span><span class="w">
</span><span class="o">|</span>
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span
class="ss">"Relation Name"</span><span class="p">:</span><span
class="w"> </span><span class="ss">"t"</span><span class="w">
</span><span class="o">|</span>
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span
class="err">}</span><span class="w">
</span><span class="o">|</span>
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span
class="p">]</span><span class="w">
</span><span class="o">|</span>
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span
class="err">}</span><span class="w">
</span><span class="o">|</span>
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span class="p">]</span><span
class="w"> </span><span
class="o">|</span>
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span class="err">}</span><span
class="w"> </span><span
class="o">|</span>
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span class="err">}</span><span
class="w"> </span><span
class="o">|</span>
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span class="p">]</span><span
class="w"> </span><span
class="o">|</span>
+<span class="o">+</span><span
class="c1">--------------+----------------------------------------------------+</span>
+<span class="mi">1</span><span class="w"> </span><span
class="k">row</span><span class="p">(</span><span class="n">s</span><span
class="p">)</span><span class="w"> </span><span class="n">fetched</span><span
class="p">.</span>
+<span class="n">Elapsed</span><span class="w"> </span><span
class="mi">0</span><span class="p">.</span><span class="mi">008</span><span
class="w"> </span><span class="n">seconds</span><span class="p">.</span>
+</pre></div>
+</div>
+</section>
+<section id="graphviz-format">
+<h3><code class="docutils literal notranslate"><span
class="pre">graphviz</span></code> format<a class="headerlink"
href="#graphviz-format" title="Link to this heading">¶</a></h3>
+<p>The <code class="docutils literal notranslate"><span
class="pre">graphviz</span></code> format uses the <a class="reference
external" href="https://graphviz.org/doc/info/lang.html">DOT language</a> that
can be used with <a class="reference external"
href="https://graphviz.org/">Graphviz</a> to
+generate a visual representation of the plan.</p>
+<div class="highlight-sql notranslate"><div
class="highlight"><pre><span></span><span class="o">></span><span class="w">
</span><span class="k">EXPLAIN</span><span class="w"> </span><span
class="n">FORMAT</span><span class="w"> </span><span
class="n">GRAPHVIZ</span><span class="w"> </span><span
class="k">SELECT</span><span class="w"> </span><span class="k">SUM</span><span
class="p">(</span><span class="n">x</span><span class="p">)</span><span
class="w"> </span><span class="k">FROM</sp [...]
+<span class="o">+</span><span
class="c1">--------------+------------------------------------------------------------------------------------------------------------------------------+</span>
+<span class="o">|</span><span class="w"> </span><span
class="n">plan_type</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span class="n">plan</span><span
class="w">
</span><span
class="o">|</span>
+<span class="o">+</span><span
class="c1">--------------+------------------------------------------------------------------------------------------------------------------------------+</span>
+<span class="o">|</span><span class="w"> </span><span
class="n">logical_plan</span><span class="w"> </span><span
class="o">|</span><span class="w">
</span><span class="o">|</span>
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span class="o">//</span><span
class="w"> </span><span class="k">Begin</span><span class="w"> </span><span
class="n">DataFusion</span><span class="w"> </span><span
class="n">GraphViz</span><span class="w"> </span><span
class="n">Plan</span><span class="p">,</span><span class="w">
</span><span [...]
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span class="o">//</span><span
class="w"> </span><span class="n">display</span><span class="w"> </span><span
class="n">it</span><span class="w"> </span><span class="n">online</span><span
class="w"> </span><span class="n">here</span><span class="p">:</span><span
class="w"> </span><span class="n">https</span><span class="p">:</span><span
class="o">//</span><span class="n">dreampuf</ [...]
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w">
</span><span class="o">|</span>
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span class="n">digraph</span><span
class="w"> </span><span class="err">{</span><span class="w">
</span><span class="o">|</span>
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span
class="n">subgraph</span><span class="w"> </span><span
class="n">cluster_1</span><span class="w">
</span><span
class="o">|</span>
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span class="err">{</span><span
class="w">
</span><span
class="o">|</span>
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span class="n">graph</span><span
class="p">[</span><span class="n">label</span><span class="o">=</span><span
class="ss">"LogicalPlan"</span><span class="p">]</span><span
class="w">
</span><span class="o">|</span>
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span class="mi">2</span><span
class="p">[</span><span class="n">shape</span><span class="o">=</span><span
class="n">box</span><span class="w"> </span><span class="n">label</span><span
class="o">=</span><span class="ss">"Projection: sum(t.x)"</span><span
class="p">]</span><span class="w">
[...]
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span class="mi">3</span><span
class="p">[</span><span class="n">shape</span><span class="o">=</span><span
class="n">box</span><span class="w"> </span><span class="n">label</span><span
class="o">=</span><span class="ss">"Aggregate: groupBy=[[t.b]],
aggr=[[sum(CAST(t.x AS Int64))]]"</span><span class="p">]</span><span
class="w"> [...]
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span class="mi">2</span><span
class="w"> </span><span class="o">-></span><span class="w"> </span><span
class="mi">3</span><span class="w"> </span><span class="p">[</span><span
class="n">arrowhead</span><span class="o">=</span><span
class="k">none</span><span class="p">,</span><span class="w"> </span><span
class="n">arrowtail</span><span class="o">=</span><span class="n">no [...]
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span class="mi">4</span><span
class="p">[</span><span class="n">shape</span><span class="o">=</span><span
class="n">box</span><span class="w"> </span><span class="n">label</span><span
class="o">=</span><span class="ss">"TableScan: t projection=[x,
b]"</span><span class="p">]</span><span class="w">
[...]
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span class="mi">3</span><span
class="w"> </span><span class="o">-></span><span class="w"> </span><span
class="mi">4</span><span class="w"> </span><span class="p">[</span><span
class="n">arrowhead</span><span class="o">=</span><span
class="k">none</span><span class="p">,</span><span class="w"> </span><span
class="n">arrowtail</span><span class="o">=</span><span class="n">no [...]
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span class="err">}</span><span
class="w">
</span><span
class="o">|</span>
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span
class="n">subgraph</span><span class="w"> </span><span
class="n">cluster_5</span><span class="w">
</span><span
class="o">|</span>
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span class="err">{</span><span
class="w">
</span><span
class="o">|</span>
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span class="n">graph</span><span
class="p">[</span><span class="n">label</span><span class="o">=</span><span
class="ss">"Detailed LogicalPlan"</span><span class="p">]</span><span
class="w">
</span><span class="o">|</span>
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span class="mi">6</span><span
class="p">[</span><span class="n">shape</span><span class="o">=</span><span
class="n">box</span><span class="w"> </span><span class="n">label</span><span
class="o">=</span><span class="ss">"Projection: sum(t.x)\nSchema:
[sum(t.x):Int64;N]"</span><span class="p">]</span><span class="w">
[...]
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span class="mi">7</span><span
class="p">[</span><span class="n">shape</span><span class="o">=</span><span
class="n">box</span><span class="w"> </span><span class="n">label</span><span
class="o">=</span><span class="ss">"Aggregate: groupBy=[[t.b]],
aggr=[[sum(CAST(t.x AS Int64))]]\nSchema: [b:Int32;N,
sum(t.x):Int64;N]"</span><span class="p">]</span><span class="w"> [...]
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span class="mi">6</span><span
class="w"> </span><span class="o">-></span><span class="w"> </span><span
class="mi">7</span><span class="w"> </span><span class="p">[</span><span
class="n">arrowhead</span><span class="o">=</span><span
class="k">none</span><span class="p">,</span><span class="w"> </span><span
class="n">arrowtail</span><span class="o">=</span><span class="n">no [...]
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span class="mi">8</span><span
class="p">[</span><span class="n">shape</span><span class="o">=</span><span
class="n">box</span><span class="w"> </span><span class="n">label</span><span
class="o">=</span><span class="ss">"TableScan: t projection=[x,
b]\nSchema: [x:Int32;N, b:Int32;N]"</span><span class="p">]</span><span
class="w"> [...]
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span class="mi">7</span><span
class="w"> </span><span class="o">-></span><span class="w"> </span><span
class="mi">8</span><span class="w"> </span><span class="p">[</span><span
class="n">arrowhead</span><span class="o">=</span><span
class="k">none</span><span class="p">,</span><span class="w"> </span><span
class="n">arrowtail</span><span class="o">=</span><span class="n">no [...]
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span class="err">}</span><span
class="w">
</span><span
class="o">|</span>
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span class="err">}</span><span
class="w">
</span><span
class="o">|</span>
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w"> </span><span class="o">//</span><span
class="w"> </span><span class="k">End</span><span class="w"> </span><span
class="n">DataFusion</span><span class="w"> </span><span
class="n">GraphViz</span><span class="w"> </span><span
class="n">Plan</span><span class="w">
</span><span
class="o">|</span>
+<span class="o">|</span><span class="w"> </span><span
class="o">|</span><span class="w">
</span><span class="o">|</span>
+<span class="o">+</span><span
class="c1">--------------+------------------------------------------------------------------------------------------------------------------------------+</span>
+<span class="mi">1</span><span class="w"> </span><span
class="k">row</span><span class="p">(</span><span class="n">s</span><span
class="p">)</span><span class="w"> </span><span class="n">fetched</span><span
class="p">.</span>
+<span class="n">Elapsed</span><span class="w"> </span><span
class="mi">0</span><span class="p">.</span><span class="mi">010</span><span
class="w"> </span><span class="n">seconds</span><span class="p">.</span>
+</pre></div>
+</div>
+</section>
+</section>
<section id="explain-analyze">
-<h2>EXPLAIN ANALYZE<a class="headerlink" href="#explain-analyze" title="Link
to this heading">¶</a></h2>
-<p>Shows the execution plan and metrics of a statement.
-If you need more information output, use <code class="docutils literal
notranslate"><span class="pre">EXPLAIN</span> <span class="pre">ANALYZE</span>
<span class="pre">VERBOSE</span></code>.</p>
+<h2><code class="docutils literal notranslate"><span
class="pre">EXPLAIN</span> <span class="pre">ANALYZE</span></code><a
class="headerlink" href="#explain-analyze" title="Link to this
heading">¶</a></h2>
+<p>Shows the execution plan and metrics of a statement. If you need more
+information output, use <code class="docutils literal notranslate"><span
class="pre">EXPLAIN</span> <span class="pre">ANALYZE</span> <span
class="pre">VERBOSE</span></code>. Note that <code class="docutils literal
notranslate"><span class="pre">EXPLAIN</span> <span
class="pre">ANALYZE</span></code>
+only supports the <code class="docutils literal notranslate"><span
class="pre">indent</span></code> format.</p>
<div class="highlight-sql notranslate"><div
class="highlight"><pre><span></span><span class="k">EXPLAIN</span><span
class="w"> </span><span class="k">ANALYZE</span><span class="w"> </span><span
class="k">SELECT</span><span class="w"> </span><span class="k">SUM</span><span
class="p">(</span><span class="n">x</span><span class="p">)</span><span
class="w"> </span><span class="k">FROM</span><span class="w"> </span><span
class="k">table</span><span class="w"> </span><span class="k">GROUP</spa [...]
<span class="o">+</span><span
class="c1">-------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------+</span>
diff --git a/user-guide/sql/index.html b/user-guide/sql/index.html
index fa245d7290..47f258a033 100644
--- a/user-guide/sql/index.html
+++ b/user-guide/sql/index.html
@@ -598,8 +598,9 @@
</ul>
</li>
<li class="toctree-l1"><a class="reference internal"
href="explain.html">EXPLAIN</a><ul>
-<li class="toctree-l2"><a class="reference internal"
href="explain.html#id1">EXPLAIN</a></li>
-<li class="toctree-l2"><a class="reference internal"
href="explain.html#explain-analyze">EXPLAIN ANALYZE</a></li>
+<li class="toctree-l2"><a class="reference internal"
href="explain.html#syntax">Syntax</a></li>
+<li class="toctree-l2"><a class="reference internal"
href="explain.html#id1"><code class="docutils literal notranslate"><span
class="pre">EXPLAIN</span></code></a></li>
+<li class="toctree-l2"><a class="reference internal"
href="explain.html#explain-analyze"><code class="docutils literal
notranslate"><span class="pre">EXPLAIN</span> <span
class="pre">ANALYZE</span></code></a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal"
href="information_schema.html">Information Schema</a><ul>
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]