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 ea1d4a7215 Publish built docs triggered by
5e1e693b6e30888d710aefc57be58ea25f62d34d
ea1d4a7215 is described below
commit ea1d4a7215a3d3688c23b399f4305acb53441b66
Author: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
AuthorDate: Thu Feb 6 17:47:54 2025 +0000
Publish built docs triggered by 5e1e693b6e30888d710aefc57be58ea25f62d34d
---
.../building-logical-plans.md.txt | 2 +-
.../custom-table-providers.md.txt | 2 +-
_sources/user-guide/explain-usage.md.txt | 48 +++++++++++-----------
_sources/user-guide/sql/explain.md.txt | 4 +-
library-user-guide/building-logical-plans.html | 2 +-
library-user-guide/custom-table-providers.html | 2 +-
searchindex.js | 2 +-
user-guide/explain-usage.html | 48 +++++++++++-----------
user-guide/sql/explain.html | 4 +-
9 files changed, 57 insertions(+), 57 deletions(-)
diff --git a/_sources/library-user-guide/building-logical-plans.md.txt
b/_sources/library-user-guide/building-logical-plans.md.txt
index 556deb02e9..e1e75b3e4b 100644
--- a/_sources/library-user-guide/building-logical-plans.md.txt
+++ b/_sources/library-user-guide/building-logical-plans.md.txt
@@ -201,7 +201,7 @@ async fn main() -> Result<(), DataFusionError> {
This example produces the following physical plan:
```text
-MemoryExec: partitions=0, partition_sizes=[]
+DataSourceExec: partitions=0, partition_sizes=[]
```
## Table Sources
diff --git a/_sources/library-user-guide/custom-table-providers.md.txt
b/_sources/library-user-guide/custom-table-providers.md.txt
index f86cea0bda..a7183fb311 100644
--- a/_sources/library-user-guide/custom-table-providers.md.txt
+++ b/_sources/library-user-guide/custom-table-providers.md.txt
@@ -89,7 +89,7 @@ This:
2. Constructs the individual output arrays (columns)
3. Returns a `MemoryStream` of a single `RecordBatch` with the arrays
-I.e. returns the "physical" data. For other examples, refer to the
[`CsvExec`][csv] and [`ParquetExec`][parquet] for more complex implementations.
+I.e. returns the "physical" data. For other examples, refer to the
[`CsvSource`][csv] and [`ParquetSource`][parquet] for more complex
implementations.
With the `ExecutionPlan` implemented, we can now implement the `scan` method
of the `TableProvider`.
diff --git a/_sources/user-guide/explain-usage.md.txt
b/_sources/user-guide/explain-usage.md.txt
index 2eb03aad2e..32a87ae919 100644
--- a/_sources/user-guide/explain-usage.md.txt
+++ b/_sources/user-guide/explain-usage.md.txt
@@ -50,20 +50,20 @@ LIMIT 5;
The output will look like
```
-+---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| plan_type | plan
|
-+---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| logical_plan | Sort: wid ASC NULLS LAST, ip DESC NULLS FIRST, fetch=5
|
-| | Projection: hits.parquet.WatchID AS wid,
hits.parquet.ClientIP AS ip
|
-| | Filter: starts_with(hits.parquet.URL,
Utf8("http://domcheloveplanet.ru/"))
|
-| | TableScan: hits.parquet projection=[WatchID, ClientIP,
URL], partial_filters=[starts_with(hits.parquet.URL,
Utf8("http://domcheloveplanet.ru/"))] |
-| physical_plan | SortPreservingMergeExec: [wid@0 ASC NULLS LAST,ip@1 DESC],
fetch=5
|
-| | SortExec: TopK(fetch=5), expr=[wid@0 ASC NULLS LAST,ip@1
DESC], preserve_partitioning=[true]
|
-| | ProjectionExec: expr=[WatchID@0 as wid, ClientIP@1 as
ip]
|
-| | CoalesceBatchesExec: target_batch_size=8192
|
-| | FilterExec: starts_with(URL@2,
http://domcheloveplanet.ru/)
|
-| | ParquetExec: file_groups={16 groups:
[[hits.parquet:0..923748528], ...]}, projection=[WatchID, ClientIP, URL],
predicate=starts_with(URL@13, http://domcheloveplanet.ru/) |
-+---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| plan_type | plan
|
++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| logical_plan | Sort: wid ASC NULLS LAST, ip DESC NULLS FIRST, fetch=5
|
+| | Projection: hits.parquet.WatchID AS wid,
hits.parquet.ClientIP AS ip
|
+| | Filter: starts_with(hits.parquet.URL,
Utf8("http://domcheloveplanet.ru/"))
|
+| | TableScan: hits.parquet projection=[WatchID, ClientIP,
URL], partial_filters=[starts_with(hits.parquet.URL,
Utf8("http://domcheloveplanet.ru/"))]
|
+| physical_plan | SortPreservingMergeExec: [wid@0 ASC NULLS LAST,ip@1 DESC],
fetch=5
|
+| | SortExec: TopK(fetch=5), expr=[wid@0 ASC NULLS LAST,ip@1
DESC], preserve_partitioning=[true]
|
+| | ProjectionExec: expr=[WatchID@0 as wid, ClientIP@1 as
ip]
|
+| | CoalesceBatchesExec: target_batch_size=8192
|
+| | FilterExec: starts_with(URL@2,
http://domcheloveplanet.ru/)
|
+| | DataSourceExec: file_groups={16 groups:
[[hits.parquet:0..923748528], ...]}, projection=[WatchID, ClientIP, URL],
predicate=starts_with(URL@13, http://domcheloveplanet.ru/), file_type=parquet |
++---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
2 row(s) fetched.
Elapsed 0.060 seconds.
```
@@ -123,7 +123,7 @@ physical plan in Figure 1 in tree format will look like
▲
│
┌────────────────────────────────────────────────┐
-│ ParquetExec │
+│ DataSourceExec │
│ hits.parquet (filter = ...) │
└────────────────────────────────────────────────┘
```
@@ -131,7 +131,7 @@ physical plan in Figure 1 in tree format will look like
Each node in the tree/plan ends with `Exec` and is sometimes also called an
`operator` or `ExecutionPlan` where data is
processed, transformed and sent up.
-1. First, data in parquet the `hits.parquet` file us read in parallel using 16
cores in 16 "partitions" (more on this later) from `ParquetExec`, which applies
a first pass at filtering during the scan.
+1. First, data in parquet the `hits.parquet` file us read in parallel using 16
cores in 16 "partitions" (more on this later) from `DataSourceExec`, which
applies a first pass at filtering during the scan.
2. Next, the output is filtered using `FilterExec` to ensure only rows where
`starts_with(URL, 'http://domcheloveplanet.ru/')` evaluates to true are passed
on
3. The `CoalesceBatchesExec` then ensures that the data is grouped into larger
batches for processing
4. The `ProjectionExec` then projects the data to rename the `WatchID` and
`ClientIP` columns to `wid` and `ip` respectively.
@@ -187,7 +187,7 @@ LIMIT 5;
| | SortExec: TopK(fetch=5), expr=[wid@0 ASC NULLS
LAST,ip@1 DESC], preserve_partitioning=[true], metrics=[output_rows=75,
elapsed_compute=7.243038ms, row_replacements=482]
|
| | ProjectionExec: expr=[WatchID@0 as wid, ClientIP@1
as ip], metrics=[output_rows=811821, elapsed_compute=66.25µs]
|
| | FilterExec: starts_with(URL@2,
http://domcheloveplanet.ru/), metrics=[output_rows=811821,
elapsed_compute=1.36923816s]
|
-| | ParquetExec: file_groups={16 groups:
[[hits.parquet:0..923748528], ...]}, projection=[WatchID, ClientIP, URL],
predicate=starts_with(URL@13, http://domcheloveplanet.ru/),
metrics=[output_rows=99997497, elapsed_compute=16ns, ...
bytes_scanned=3703192723, ... time_elapsed_opening=308.203002ms,
time_elapsed_scanning_total=8.350342183s, ...] |
+| | DataSourceExec: file_groups={16 groups:
[[hits.parquet:0..923748528], ...]}, projection=[WatchID, ClientIP, URL],
predicate=starts_with(URL@13, http://domcheloveplanet.ru/),
metrics=[output_rows=99997497, elapsed_compute=16ns, ...
bytes_scanned=3703192723, ... time_elapsed_opening=308.203002ms,
time_elapsed_scanning_total=8.350342183s, ...] |
+-------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row(s) fetched.
Elapsed 0.720 seconds.
@@ -197,14 +197,14 @@ In this case, DataFusion actually ran the query, but
discarded any results, and
instead returned an annotated plan with a new field, `metrics=[...]`
Most operators have the common metrics `output_rows` and `elapsed_compute` and
-some have operator specific metrics such as `ParquetExec` which has
+some have operator specific metrics such as `DataSourceExec` with
`ParquetSource` which has
`bytes_scanned=3703192723`. Note that times and counters are reported across
all
cores, so if you have 16 cores, the time reported is the sum of the time taken
by all 16 cores.
Again, reading from bottom up:
-- `ParquetExec`
+- `DataSourceExec`
- `output_rows=99997497`: A total 99.9M rows were produced
- `bytes_scanned=3703192723`: Of the 14GB file, 3.7GB were actually read
(due to projection pushdown)
- `time_elapsed_opening=308.203002ms`: It took 300ms to open the file and
prepare to read it
@@ -223,7 +223,7 @@ Again, reading from bottom up:
- `SortPreservingMergeExec`
- `output_rows=5`, `elapsed_compute=2.375µs`: Produced the final 5 rows in
2.375µs (microseconds)
-When predicate pushdown is enabled, `ParquetExec` gains the following metrics:
+When predicate pushdown is enabled, `DataSourceExec` with `ParquetSource`
gains the following metrics:
- `page_index_rows_matched`: number of rows in pages that were tested by a
page index filter, and passed
- `page_index_rows_pruned`: number of rows in pages that were tested by a page
index filter, and did not pass
@@ -247,7 +247,7 @@ planning. Roughly speaking, each "partition" in the plan is
run independently us
a separate core. Data crosses between cores only within certain operators such
as
`RepartitionExec`, `CoalescePartitions` and `SortPreservingMergeExec`
-You can read more about this in the [Partitoning Docs].
+You can read more about this in the [Partitioning Docs].
[partitoning docs]:
https://docs.rs/datafusion/latest/datafusion/physical_expr/enum.Partitioning.html
@@ -283,7 +283,7 @@ We can again see the query plan by using `EXPLAIN`:
| | CoalesceBatchesExec: target_batch_size=8192
[...]
| | RepartitionExec: partitioning=Hash([UserID@0],
10), input_partitions=10
[...]
| | AggregateExec: mode=Partial, gby=[UserID@0 as
UserID], aggr=[count(*)]
[...]
-| | ParquetExec: file_groups={10 groups:
[[hits.parquet:0..1477997645], [hits.parquet:1477997645..2955995290],
[hits.parquet:2955995290..4433992935], [hits.parquet:4433992935..5911990580],
[hits.parquet:5911990580..7389988225], ...]}, projection=[UserID] |
+| | DataSourceExec: file_groups={10 groups:
[[hits.parquet:0..1477997645], [hits.parquet:1477997645..2955995290],
[hits.parquet:2955995290..4433992935], [hits.parquet:4433992935..5911990580],
[hits.parquet:5911990580..7389988225], ...]}, projection=[UserID],
file_type=parquet
[...]
| |
[...]
+---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
[...]
```
@@ -307,11 +307,11 @@ For this query, let's again read the plan from the bottom
to the top:
**Physical plan operators**
-- `ParquetExec`
+- `DataSourceExec`
- `file_groups={10 groups: [...]}`: Reads 10 groups in parallel from
`hits.parquet`file. (The example above was run on a machine with 10 cores.)
- `projection=[UserID]`: Pushes down projection of the `UserID` column. The
parquet format is columnar and the DataFusion reader only decodes the columns
required.
- `AggregateExec`
- - `mode=Partial` Runs a [partial aggregation] in parallel across each of the
10 partitions from the `ParquetExec` immediately after reading.
+ - `mode=Partial` Runs a [partial aggregation] in parallel across each of the
10 partitions from the `DataSourceExec` immediately after reading.
- `gby=[UserID@0 as UserID]`: Represents `GROUP BY` in the [physical plan]
and groups together the same values of `UserID`.
- `aggr=[count(*)]`: Applies the `COUNT` aggregate on all rows for each
group.
- `RepartitionExec`
diff --git a/_sources/user-guide/sql/explain.md.txt
b/_sources/user-guide/sql/explain.md.txt
index 45bb3a57aa..709e6311c2 100644
--- a/_sources/user-guide/sql/explain.md.txt
+++ b/_sources/user-guide/sql/explain.md.txt
@@ -46,7 +46,7 @@ EXPLAIN SELECT SUM(x) FROM table GROUP BY b;
| | 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)
|
-| | CsvExec: file_groups={1 group:
[[/tmp/table.csv]]}, projection=[x, b], has_header=false
|
+| | DataSourceExec: file_groups={1 group:
[[/tmp/table.csv]]}, projection=[x, b], has_header=false
|
| |
|
+---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------+
```
@@ -68,6 +68,6 @@ EXPLAIN ANALYZE SELECT SUM(x) FROM table GROUP BY b;
| | RepartitionExec: partitioning=Hash([Column {
name: "b", index: 0 }], 16), metrics=[sendTime=839560, fetchTime=122528525,
repartitionTime=5327877] |
| | HashAggregateExec: mode=Partial, gby=[b@1 as
b], aggr=[SUM(x)], metrics=[outputRows=2]
|
| | RepartitionExec:
partitioning=RoundRobinBatch(16), metrics=[fetchTime=5660489,
repartitionTime=0, sendTime=8012] |
-| | CsvExec: file_groups={1 group:
[[/tmp/table.csv]]}, has_header=false, metrics=[]
|
+| | DataSourceExec: file_groups={1 group:
[[/tmp/table.csv]]}, has_header=false, metrics=[]
|
+-------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------+
```
diff --git a/library-user-guide/building-logical-plans.html
b/library-user-guide/building-logical-plans.html
index 90a26966e2..5e0f710744 100644
--- a/library-user-guide/building-logical-plans.html
+++ b/library-user-guide/building-logical-plans.html
@@ -735,7 +735,7 @@ specific algorithms and detailed optimizations compared to.
Given a
</pre></div>
</div>
<p>This example produces the following physical plan:</p>
-<div class="highlight-text notranslate"><div
class="highlight"><pre><span></span>MemoryExec: partitions=0, partition_sizes=[]
+<div class="highlight-text notranslate"><div
class="highlight"><pre><span></span>DataSourceExec: partitions=0,
partition_sizes=[]
</pre></div>
</div>
</section>
diff --git a/library-user-guide/custom-table-providers.html
b/library-user-guide/custom-table-providers.html
index 2e949cfb65..2578b08d0f 100644
--- a/library-user-guide/custom-table-providers.html
+++ b/library-user-guide/custom-table-providers.html
@@ -676,7 +676,7 @@
<li><p>Constructs the individual output arrays (columns)</p></li>
<li><p>Returns a <code class="docutils literal notranslate"><span
class="pre">MemoryStream</span></code> of a single <code class="docutils
literal notranslate"><span class="pre">RecordBatch</span></code> with the
arrays</p></li>
</ol>
-<p>I.e. returns the “physical” data. For other examples, refer to the <a
class="reference external"
href="https://github.com/apache/datafusion/blob/a5e86fae3baadbd99f8fd0df83f45fde22f7b0c6/datafusion/core/src/datasource/physical_plan/csv.rs#L57-L70"><code
class="docutils literal notranslate"><span
class="pre">CsvExec</span></code></a> and <a class="reference external"
href="https://github.com/apache/datafusion/blob/a5e86fae3baadbd99f8fd0df83f45fde22f7b0c6/datafusion/core/src/datasource/p
[...]
+<p>I.e. returns the “physical” data. For other examples, refer to the <a
class="reference external"
href="https://github.com/apache/datafusion/blob/a5e86fae3baadbd99f8fd0df83f45fde22f7b0c6/datafusion/core/src/datasource/physical_plan/csv.rs#L57-L70"><code
class="docutils literal notranslate"><span
class="pre">CsvSource</span></code></a> and <a class="reference external"
href="https://github.com/apache/datafusion/blob/a5e86fae3baadbd99f8fd0df83f45fde22f7b0c6/datafusion/core/src/datasource
[...]
<p>With the <code class="docutils literal notranslate"><span
class="pre">ExecutionPlan</span></code> implemented, we can now implement the
<code class="docutils literal notranslate"><span class="pre">scan</span></code>
method of the <code class="docutils literal notranslate"><span
class="pre">TableProvider</span></code>.</p>
</section>
<section id="scan-revisited">
diff --git a/searchindex.js b/searchindex.js
index 501fa21028..f2dd5a14b9 100644
--- a/searchindex.js
+++ b/searchindex.js
@@ -1 +1 @@
-Search.setIndex({"alltitles": {"!=": [[48, "op-neq"]], "!~": [[48,
"op-re-not-match"]], "!~*": [[48, "op-re-not-match-i"]], "!~~": [[48, "id19"]],
"!~~*": [[48, "id20"]], "#": [[48, "op-bit-xor"]], "%": [[48, "op-modulo"]],
"&": [[48, "op-bit-and"]], "(relation, name) tuples in logical fields and
logical columns are unique": [[9,
"relation-name-tuples-in-logical-fields-and-logical-columns-are-unique"]], "*":
[[48, "op-multiply"]], "+": [[48, "op-plus"]], "-": [[48, "op-minus"]], "/":
[[4 [...]
\ No newline at end of file
+Search.setIndex({"alltitles": {"!=": [[48, "op-neq"]], "!~": [[48,
"op-re-not-match"]], "!~*": [[48, "op-re-not-match-i"]], "!~~": [[48, "id19"]],
"!~~*": [[48, "id20"]], "#": [[48, "op-bit-xor"]], "%": [[48, "op-modulo"]],
"&": [[48, "op-bit-and"]], "(relation, name) tuples in logical fields and
logical columns are unique": [[9,
"relation-name-tuples-in-logical-fields-and-logical-columns-are-unique"]], "*":
[[48, "op-multiply"]], "+": [[48, "op-plus"]], "-": [[48, "op-minus"]], "/":
[[4 [...]
\ No newline at end of file
diff --git a/user-guide/explain-usage.html b/user-guide/explain-usage.html
index 5fc82cd01e..7287a6d615 100644
--- a/user-guide/explain-usage.html
+++ b/user-guide/explain-usage.html
@@ -637,20 +637,20 @@ site <code class="docutils literal notranslate"><span
class="pre">http://domchel
</pre></div>
</div>
<p>The output will look like</p>
-<div class="highlight-default notranslate"><div
class="highlight"><pre><span></span><span
class="o">+---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+</span>
-<span class="o">|</span> <span class="n">plan_type</span> <span
class="o">|</span> <span class="n">plan</span>
<span
class="o">|</span>
-<span
class="o">+---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+</span>
-<span class="o">|</span> <span class="n">logical_plan</span> <span
class="o">|</span> <span class="n">Sort</span><span class="p">:</span> <span
class="n">wid</span> <span class="n">ASC</span> <span class="n">NULLS</span>
<span class="n">LAST</span><span class="p">,</span> <span class="n">ip</span>
<span class="n">DESC</span> <span class="n">NULLS</span> <span
class="n">FIRST</span><span class="p">,</span> <span
class="n">fetch</span><span class="o">=</span><span class="mi">5</span>
[...]
-<span class="o">|</span> <span class="o">|</span> <span
class="n">Projection</span><span class="p">:</span> <span
class="n">hits</span><span class="o">.</span><span
class="n">parquet</span><span class="o">.</span><span class="n">WatchID</span>
<span class="n">AS</span> <span class="n">wid</span><span class="p">,</span>
<span class="n">hits</span><span class="o">.</span><span
class="n">parquet</span><span class="o">.</span><span class="n">ClientIP</span>
<span class="n">AS [...]
-<span class="o">|</span> <span class="o">|</span> <span
class="n">Filter</span><span class="p">:</span> <span
class="n">starts_with</span><span class="p">(</span><span
class="n">hits</span><span class="o">.</span><span
class="n">parquet</span><span class="o">.</span><span class="n">URL</span><span
class="p">,</span> <span class="n">Utf8</span><span class="p">(</span><span
class="s2">"http://domcheloveplanet.ru/"</span><span
class="p">))</span> [...]
-<span class="o">|</span> <span class="o">|</span> <span
class="n">TableScan</span><span class="p">:</span> <span
class="n">hits</span><span class="o">.</span><span class="n">parquet</span>
<span class="n">projection</span><span class="o">=</span><span
class="p">[</span><span class="n">WatchID</span><span class="p">,</span> <span
class="n">ClientIP</span><span class="p">,</span> <span
class="n">URL</span><span class="p">],</span> <span
class="n">partial_filters</span>< [...]
-<span class="o">|</span> <span class="n">physical_plan</span> <span
class="o">|</span> <span class="n">SortPreservingMergeExec</span><span
class="p">:</span> <span class="p">[</span><span class="n">wid</span><span
class="o">@</span><span class="mi">0</span> <span class="n">ASC</span> <span
class="n">NULLS</span> <span class="n">LAST</span><span class="p">,</span><span
class="n">ip</span><span class="o">@</span><span class="mi">1</span> <span
class="n">DESC</span><span class="p">],</span> [...]
-<span class="o">|</span> <span class="o">|</span> <span
class="n">SortExec</span><span class="p">:</span> <span
class="n">TopK</span><span class="p">(</span><span class="n">fetch</span><span
class="o">=</span><span class="mi">5</span><span class="p">),</span> <span
class="n">expr</span><span class="o">=</span><span class="p">[</span><span
class="n">wid</span><span class="o">@</span><span class="mi">0</span> <span
class="n">ASC</span> <span class="n">NULLS</span> <span cla [...]
-<span class="o">|</span> <span class="o">|</span> <span
class="n">ProjectionExec</span><span class="p">:</span> <span
class="n">expr</span><span class="o">=</span><span class="p">[</span><span
class="n">WatchID</span><span class="o">@</span><span class="mi">0</span> <span
class="k">as</span> <span class="n">wid</span><span class="p">,</span> <span
class="n">ClientIP</span><span class="o">@</span><span class="mi">1</span>
<span class="k">as</span> <span class="n">ip</spa [...]
-<span class="o">|</span> <span class="o">|</span> <span
class="n">CoalesceBatchesExec</span><span class="p">:</span> <span
class="n">target_batch_size</span><span class="o">=</span><span
class="mi">8192</span>
<span
class="o">|</span>
-<span class="o">|</span> <span class="o">|</span> <span
class="n">FilterExec</span><span class="p">:</span> <span
class="n">starts_with</span><span class="p">(</span><span
class="n">URL</span><span class="o">@</span><span class="mi">2</span><span
class="p">,</span> <span class="n">http</span><span class="p">:</span><span
class="o">//</span><span class="n">domcheloveplanet</span><span
class="o">.</span><span class="n">ru</span><span class="o">/</span><span
class="p"> [...]
-<span class="o">|</span> <span class="o">|</span>
<span class="n">ParquetExec</span><span class="p">:</span> <span
class="n">file_groups</span><span class="o">=</span><span
class="p">{</span><span class="mi">16</span> <span class="n">groups</span><span
class="p">:</span> <span class="p">[[</span><span class="n">hits</span><span
class="o">.</span><span class="n">parquet</span><span class="p">:</span><span
class="mf">0..923748528</span><span class="p">],</span> <spa [...]
-<span
class="o">+---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+</span>
+<div class="highlight-default notranslate"><div
class="highlight"><pre><span></span><span
class="o">+---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+</span>
+<span class="o">|</span> <span class="n">plan_type</span> <span
class="o">|</span> <span class="n">plan</span>
<span class="o">|</span>
+<span
class="o">+---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+</span>
+<span class="o">|</span> <span class="n">logical_plan</span> <span
class="o">|</span> <span class="n">Sort</span><span class="p">:</span> <span
class="n">wid</span> <span class="n">ASC</span> <span class="n">NULLS</span>
<span class="n">LAST</span><span class="p">,</span> <span class="n">ip</span>
<span class="n">DESC</span> <span class="n">NULLS</span> <span
class="n">FIRST</span><span class="p">,</span> <span
class="n">fetch</span><span class="o">=</span><span class="mi">5</span>
[...]
+<span class="o">|</span> <span class="o">|</span> <span
class="n">Projection</span><span class="p">:</span> <span
class="n">hits</span><span class="o">.</span><span
class="n">parquet</span><span class="o">.</span><span class="n">WatchID</span>
<span class="n">AS</span> <span class="n">wid</span><span class="p">,</span>
<span class="n">hits</span><span class="o">.</span><span
class="n">parquet</span><span class="o">.</span><span class="n">ClientIP</span>
<span class="n">AS [...]
+<span class="o">|</span> <span class="o">|</span> <span
class="n">Filter</span><span class="p">:</span> <span
class="n">starts_with</span><span class="p">(</span><span
class="n">hits</span><span class="o">.</span><span
class="n">parquet</span><span class="o">.</span><span class="n">URL</span><span
class="p">,</span> <span class="n">Utf8</span><span class="p">(</span><span
class="s2">"http://domcheloveplanet.ru/"</span><span
class="p">))</span> [...]
+<span class="o">|</span> <span class="o">|</span> <span
class="n">TableScan</span><span class="p">:</span> <span
class="n">hits</span><span class="o">.</span><span class="n">parquet</span>
<span class="n">projection</span><span class="o">=</span><span
class="p">[</span><span class="n">WatchID</span><span class="p">,</span> <span
class="n">ClientIP</span><span class="p">,</span> <span
class="n">URL</span><span class="p">],</span> <span
class="n">partial_filters</span>< [...]
+<span class="o">|</span> <span class="n">physical_plan</span> <span
class="o">|</span> <span class="n">SortPreservingMergeExec</span><span
class="p">:</span> <span class="p">[</span><span class="n">wid</span><span
class="o">@</span><span class="mi">0</span> <span class="n">ASC</span> <span
class="n">NULLS</span> <span class="n">LAST</span><span class="p">,</span><span
class="n">ip</span><span class="o">@</span><span class="mi">1</span> <span
class="n">DESC</span><span class="p">],</span> [...]
+<span class="o">|</span> <span class="o">|</span> <span
class="n">SortExec</span><span class="p">:</span> <span
class="n">TopK</span><span class="p">(</span><span class="n">fetch</span><span
class="o">=</span><span class="mi">5</span><span class="p">),</span> <span
class="n">expr</span><span class="o">=</span><span class="p">[</span><span
class="n">wid</span><span class="o">@</span><span class="mi">0</span> <span
class="n">ASC</span> <span class="n">NULLS</span> <span cla [...]
+<span class="o">|</span> <span class="o">|</span> <span
class="n">ProjectionExec</span><span class="p">:</span> <span
class="n">expr</span><span class="o">=</span><span class="p">[</span><span
class="n">WatchID</span><span class="o">@</span><span class="mi">0</span> <span
class="k">as</span> <span class="n">wid</span><span class="p">,</span> <span
class="n">ClientIP</span><span class="o">@</span><span class="mi">1</span>
<span class="k">as</span> <span class="n">ip</spa [...]
+<span class="o">|</span> <span class="o">|</span> <span
class="n">CoalesceBatchesExec</span><span class="p">:</span> <span
class="n">target_batch_size</span><span class="o">=</span><span
class="mi">8192</span>
<span class="o">|</span>
+<span class="o">|</span> <span class="o">|</span> <span
class="n">FilterExec</span><span class="p">:</span> <span
class="n">starts_with</span><span class="p">(</span><span
class="n">URL</span><span class="o">@</span><span class="mi">2</span><span
class="p">,</span> <span class="n">http</span><span class="p">:</span><span
class="o">//</span><span class="n">domcheloveplanet</span><span
class="o">.</span><span class="n">ru</span><span class="o">/</span><span
class="p"> [...]
+<span class="o">|</span> <span class="o">|</span>
<span class="n">DataSourceExec</span><span class="p">:</span> <span
class="n">file_groups</span><span class="o">=</span><span
class="p">{</span><span class="mi">16</span> <span class="n">groups</span><span
class="p">:</span> <span class="p">[[</span><span class="n">hits</span><span
class="o">.</span><span class="n">parquet</span><span class="p">:</span><span
class="mf">0..923748528</span><span class="p">],</span> < [...]
+<span
class="o">+---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+</span>
<span class="mi">2</span> <span class="n">row</span><span
class="p">(</span><span class="n">s</span><span class="p">)</span> <span
class="n">fetched</span><span class="o">.</span>
<span class="n">Elapsed</span> <span class="mf">0.060</span> <span
class="n">seconds</span><span class="o">.</span>
</pre></div>
@@ -708,7 +708,7 @@ physical plan in Figure 1 in tree format will look like</p>
▲
│
┌────────────────────────────────────────────────┐
-│ ParquetExec │
+│ DataSourceExec │
│ hits.parquet (filter = ...) │
└────────────────────────────────────────────────┘
</pre></div>
@@ -716,7 +716,7 @@ physical plan in Figure 1 in tree format will look like</p>
<p>Each node in the tree/plan ends with <code class="docutils literal
notranslate"><span class="pre">Exec</span></code> and is sometimes also called
an <code class="docutils literal notranslate"><span
class="pre">operator</span></code> or <code class="docutils literal
notranslate"><span class="pre">ExecutionPlan</span></code> where data is
processed, transformed and sent up.</p>
<ol class="arabic simple">
-<li><p>First, data in parquet the <code class="docutils literal
notranslate"><span class="pre">hits.parquet</span></code> file us read in
parallel using 16 cores in 16 “partitions” (more on this later) from <code
class="docutils literal notranslate"><span
class="pre">ParquetExec</span></code>, which applies a first pass at filtering
during the scan.</p></li>
+<li><p>First, data in parquet the <code class="docutils literal
notranslate"><span class="pre">hits.parquet</span></code> file us read in
parallel using 16 cores in 16 “partitions” (more on this later) from <code
class="docutils literal notranslate"><span
class="pre">DataSourceExec</span></code>, which applies a first pass at
filtering during the scan.</p></li>
<li><p>Next, the output is filtered using <code class="docutils literal
notranslate"><span class="pre">FilterExec</span></code> to ensure only rows
where <code class="docutils literal notranslate"><span
class="pre">starts_with(URL,</span> <span
class="pre">'http://domcheloveplanet.ru/')</span></code> evaluates to true are
passed on</p></li>
<li><p>The <code class="docutils literal notranslate"><span
class="pre">CoalesceBatchesExec</span></code> then ensures that the data is
grouped into larger batches for processing</p></li>
<li><p>The <code class="docutils literal notranslate"><span
class="pre">ProjectionExec</span></code> then projects the data to rename the
<code class="docutils literal notranslate"><span
class="pre">WatchID</span></code> and <code class="docutils literal
notranslate"><span class="pre">ClientIP</span></code> columns to <code
class="docutils literal notranslate"><span class="pre">wid</span></code> and
<code class="docutils literal notranslate"><span class="pre">ip</span></code>
respectivel [...]
@@ -768,7 +768,7 @@ above but with <code class="docutils literal
notranslate"><span class="pre">EXPL
<span class="o">|</span> <span class="o">|</span> <span
class="n">SortExec</span><span class="p">:</span> <span
class="n">TopK</span><span class="p">(</span><span class="n">fetch</span><span
class="o">=</span><span class="mi">5</span><span class="p">),</span> <span
class="n">expr</span><span class="o">=</span><span class="p">[</span><span
class="n">wid</span><span class="o">@</span><span class="mi">0</span> <span
class="n">ASC</span> <span class="n">NULLS</span> <span [...]
<span class="o">|</span> <span class="o">|</span> <span
class="n">ProjectionExec</span><span class="p">:</span> <span
class="n">expr</span><span class="o">=</span><span class="p">[</span><span
class="n">WatchID</span><span class="o">@</span><span class="mi">0</span> <span
class="k">as</span> <span class="n">wid</span><span class="p">,</span> <span
class="n">ClientIP</span><span class="o">@</span><span class="mi">1</span>
<span class="k">as</span> <span class="n">ip< [...]
<span class="o">|</span> <span class="o">|</span>
<span class="n">FilterExec</span><span class="p">:</span> <span
class="n">starts_with</span><span class="p">(</span><span
class="n">URL</span><span class="o">@</span><span class="mi">2</span><span
class="p">,</span> <span class="n">http</span><span class="p">:</span><span
class="o">//</span><span class="n">domcheloveplanet</span><span
class="o">.</span><span class="n">ru</span><span class="o">/</span><span class=
[...]
-<span class="o">|</span> <span class="o">|</span>
<span class="n">ParquetExec</span><span class="p">:</span> <span
class="n">file_groups</span><span class="o">=</span><span
class="p">{</span><span class="mi">16</span> <span class="n">groups</span><span
class="p">:</span> <span class="p">[[</span><span class="n">hits</span><span
class="o">.</span><span class="n">parquet</span><span class="p">:</span><span
class="mf">0..923748528</span><span class="p">],</span> [...]
+<span class="o">|</span> <span class="o">|</span>
<span class="n">DataSourceExec</span><span class="p">:</span> <span
class="n">file_groups</span><span class="o">=</span><span
class="p">{</span><span class="mi">16</span> <span class="n">groups</span><span
class="p">:</span> <span class="p">[[</span><span class="n">hits</span><span
class="o">.</span><span class="n">parquet</span><span class="p">:</span><span
class="mf">0..923748528</span><span class="p">],</spa [...]
<span
class="o">+-------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+</span>
<span class="mi">1</span> <span class="n">row</span><span
class="p">(</span><span class="n">s</span><span class="p">)</span> <span
class="n">fetched</span><span class="o">.</span>
<span class="n">Elapsed</span> <span class="mf">0.720</span> <span
class="n">seconds</span><span class="o">.</span>
@@ -777,13 +777,13 @@ above but with <code class="docutils literal
notranslate"><span class="pre">EXPL
<p>In this case, DataFusion actually ran the query, but discarded any results,
and
instead returned an annotated plan with a new field, <code class="docutils
literal notranslate"><span class="pre">metrics=[...]</span></code></p>
<p>Most operators have the common metrics <code class="docutils literal
notranslate"><span class="pre">output_rows</span></code> and <code
class="docutils literal notranslate"><span
class="pre">elapsed_compute</span></code> and
-some have operator specific metrics such as <code class="docutils literal
notranslate"><span class="pre">ParquetExec</span></code> which has
+some have operator specific metrics such as <code class="docutils literal
notranslate"><span class="pre">DataSourceExec</span></code> with <code
class="docutils literal notranslate"><span
class="pre">ParquetSource</span></code> which has
<code class="docutils literal notranslate"><span
class="pre">bytes_scanned=3703192723</span></code>. Note that times and
counters are reported across all
cores, so if you have 16 cores, the time reported is the sum of the time taken
by all 16 cores.</p>
<p>Again, reading from bottom up:</p>
<ul class="simple">
-<li><p><code class="docutils literal notranslate"><span
class="pre">ParquetExec</span></code></p>
+<li><p><code class="docutils literal notranslate"><span
class="pre">DataSourceExec</span></code></p>
<ul>
<li><p><code class="docutils literal notranslate"><span
class="pre">output_rows=99997497</span></code>: A total 99.9M rows were
produced</p></li>
<li><p><code class="docutils literal notranslate"><span
class="pre">bytes_scanned=3703192723</span></code>: Of the 14GB file, 3.7GB
were actually read (due to projection pushdown)</p></li>
@@ -820,7 +820,7 @@ by all 16 cores.</p>
</ul>
</li>
</ul>
-<p>When predicate pushdown is enabled, <code class="docutils literal
notranslate"><span class="pre">ParquetExec</span></code> gains the following
metrics:</p>
+<p>When predicate pushdown is enabled, <code class="docutils literal
notranslate"><span class="pre">DataSourceExec</span></code> with <code
class="docutils literal notranslate"><span
class="pre">ParquetSource</span></code> gains the following metrics:</p>
<ul class="simple">
<li><p><code class="docutils literal notranslate"><span
class="pre">page_index_rows_matched</span></code>: number of rows in pages that
were tested by a page index filter, and passed</p></li>
<li><p><code class="docutils literal notranslate"><span
class="pre">page_index_rows_pruned</span></code>: number of rows in pages that
were tested by a page index filter, and did not pass</p></li>
@@ -844,7 +844,7 @@ by all 16 cores.</p>
planning. Roughly speaking, each “partition” in the plan is run independently
using
a separate core. Data crosses between cores only within certain operators such
as
<code class="docutils literal notranslate"><span
class="pre">RepartitionExec</span></code>, <code class="docutils literal
notranslate"><span class="pre">CoalescePartitions</span></code> and <code
class="docutils literal notranslate"><span
class="pre">SortPreservingMergeExec</span></code></p>
-<p>You can read more about this in the <a class="reference external"
href="https://docs.rs/datafusion/latest/datafusion/physical_expr/enum.Partitioning.html">Partitoning
Docs</a>.</p>
+<p>You can read more about this in the [Partitioning Docs].</p>
</section>
<section id="example-of-an-aggregate-query">
<h2>Example of an Aggregate Query<a class="headerlink"
href="#example-of-an-aggregate-query" title="Link to this heading">¶</a></h2>
@@ -874,7 +874,7 @@ number of hits:</p>
<span class="o">|</span> <span class="o">|</span> <span
class="n">CoalesceBatchesExec</span><span class="p">:</span> <span
class="n">target_batch_size</span><span class="o">=</span><span
class="mi">8192</span>
[...]
<span class="o">|</span> <span class="o">|</span>
<span class="n">RepartitionExec</span><span class="p">:</span> <span
class="n">partitioning</span><span class="o">=</span><span
class="n">Hash</span><span class="p">([</span><span
class="n">UserID</span><span class="o">@</span><span class="mi">0</span><span
class="p">],</span> <span class="mi">10</span><span class="p">),</span> <span
class="n">input_partitions</span><span class="o">=</span><span
class="mi">10</span [...]
<span class="o">|</span> <span class="o">|</span>
<span class="n">AggregateExec</span><span class="p">:</span> <span
class="n">mode</span><span class="o">=</span><span
class="n">Partial</span><span class="p">,</span> <span
class="n">gby</span><span class="o">=</span><span class="p">[</span><span
class="n">UserID</span><span class="o">@</span><span class="mi">0</span> <span
class="k">as</span> <span class="n">UserID</span><span class="p">],</span>
<span class="n" [...]
-<span class="o">|</span> <span class="o">|</span>
<span class="n">ParquetExec</span><span class="p">:</span> <span
class="n">file_groups</span><span class="o">=</span><span
class="p">{</span><span class="mi">10</span> <span class="n">groups</span><span
class="p">:</span> <span class="p">[[</span><span class="n">hits</span><span
class="o">.</span><span class="n">parquet</span><span class="p">:</span><span
class="mf">0..1477997645</span><span class="p">],</span> [...]
+<span class="o">|</span> <span class="o">|</span>
<span class="n">DataSourceExec</span><span class="p">:</span> <span
class="n">file_groups</span><span class="o">=</span><span
class="p">{</span><span class="mi">10</span> <span class="n">groups</span><span
class="p">:</span> <span class="p">[[</span><span class="n">hits</span><span
class="o">.</span><span class="n">parquet</span><span class="p">:</span><span
class="mf">0..1477997645</span><span class="p">],</sp [...]
<span class="o">|</span> <span class="o">|</span>
[...]
<span
class="o">+---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
[...]
</pre></div>
@@ -909,7 +909,7 @@ number of hits:</p>
</ul>
<p><strong>Physical plan operators</strong></p>
<ul class="simple">
-<li><p><code class="docutils literal notranslate"><span
class="pre">ParquetExec</span></code></p>
+<li><p><code class="docutils literal notranslate"><span
class="pre">DataSourceExec</span></code></p>
<ul>
<li><p><code class="docutils literal notranslate"><span
class="pre">file_groups={10</span> <span class="pre">groups:</span> <span
class="pre">[...]}</span></code>: Reads 10 groups in parallel from <code
class="docutils literal notranslate"><span
class="pre">hits.parquet</span></code>file. (The example above was run on a
machine with 10 cores.)</p></li>
<li><p><code class="docutils literal notranslate"><span
class="pre">projection=[UserID]</span></code>: Pushes down projection of the
<code class="docutils literal notranslate"><span
class="pre">UserID</span></code> column. The parquet format is columnar and the
DataFusion reader only decodes the columns required.</p></li>
@@ -917,7 +917,7 @@ number of hits:</p>
</li>
<li><p><code class="docutils literal notranslate"><span
class="pre">AggregateExec</span></code></p>
<ul>
-<li><p><code class="docutils literal notranslate"><span
class="pre">mode=Partial</span></code> Runs a <a class="reference external"
href="https://docs.rs/datafusion/latest/datafusion/physical_plan/aggregates/enum.AggregateMode.html#variant.Partial">partial
aggregation</a> in parallel across each of the 10 partitions from the <code
class="docutils literal notranslate"><span
class="pre">ParquetExec</span></code> immediately after reading.</p></li>
+<li><p><code class="docutils literal notranslate"><span
class="pre">mode=Partial</span></code> Runs a <a class="reference external"
href="https://docs.rs/datafusion/latest/datafusion/physical_plan/aggregates/enum.AggregateMode.html#variant.Partial">partial
aggregation</a> in parallel across each of the 10 partitions from the <code
class="docutils literal notranslate"><span
class="pre">DataSourceExec</span></code> immediately after reading.</p></li>
<li><p><code class="docutils literal notranslate"><span
class="pre">gby=[UserID@0</span> <span class="pre">as</span> <span
class="pre">UserID]</span></code>: Represents <code class="docutils literal
notranslate"><span class="pre">GROUP</span> <span class="pre">BY</span></code>
in the <a class="reference external"
href="https://docs.rs/datafusion/latest/datafusion/physical_plan/aggregates/struct.PhysicalGroupBy.html">physical
plan</a> and groups together the same values of <code class [...]
<li><p><code class="docutils literal notranslate"><span
class="pre">aggr=[count(*)]</span></code>: Applies the <code class="docutils
literal notranslate"><span class="pre">COUNT</span></code> aggregate on all
rows for each group.</p></li>
</ul>
diff --git a/user-guide/sql/explain.html b/user-guide/sql/explain.html
index 0d79c9378f..c4f1315df0 100644
--- a/user-guide/sql/explain.html
+++ b/user-guide/sql/explain.html
@@ -583,7 +583,7 @@ If you need more detailed output, use <code class="docutils
literal notranslate"
<span class="o">|</span> <span class="o">|</span> <span
class="n">RepartitionExec</span><span class="p">:</span> <span
class="n">partitioning</span><span class="o">=</span><span
class="n">Hash</span><span class="p">([</span><span class="n">Column</span>
<span class="p">{</span> <span class="n">name</span><span class="p">:</span>
<span class="s2">"b"</span><span class="p">,</span> <span
class="n">index</span><span class="p">:</span> <span class="mi">0</span> [...]
<span class="o">|</span> <span class="o">|</span> <span
class="n">AggregateExec</span><span class="p">:</span> <span
class="n">mode</span><span class="o">=</span><span
class="n">Partial</span><span class="p">,</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="k">as</span> <span class="n">b</span><span class="p">],</span> <span
class="n">aggr</span><s [...]
<span class="o">|</span> <span class="o">|</span>
<span class="n">RepartitionExec</span><span class="p">:</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="o">|</span>
-<span class="o">|</span> <span class="o">|</span>
<span class="n">CsvExec</span><span class="p">:</span> <span
class="n">file_groups</span><span class="o">=</span><span
class="p">{</span><span class="mi">1</span> <span class="n">group</span><span
class="p">:</span> <span class="p">[[</span><span class="o">/</span><span
class="n">tmp</span><span class="o">/</span><span class="n">table</span><span
class="o">.</span><span class="n">csv</span><span class="p">]]},</s [...]
+<span class="o">|</span> <span class="o">|</span>
<span class="n">DataSourceExec</span><span class="p">:</span> <span
class="n">file_groups</span><span class="o">=</span><span
class="p">{</span><span class="mi">1</span> <span class="n">group</span><span
class="p">:</span> <span class="p">[[</span><span class="o">/</span><span
class="n">tmp</span><span class="o">/</span><span class="n">table</span><span
class="o">.</span><span class="n">csv</span><span class="p"> [...]
<span class="o">|</span> <span class="o">|</span>
<span
class="o">|</span>
<span
class="o">+---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------+</span>
</pre></div>
@@ -604,7 +604,7 @@ If you need more information output, use <code
class="docutils literal notransla
<span class="o">|</span> <span class="o">|</span>
<span class="n">RepartitionExec</span><span class="p">:</span> <span
class="n">partitioning</span><span class="o">=</span><span
class="n">Hash</span><span class="p">([</span><span class="n">Column</span>
<span class="p">{</span> <span class="n">name</span><span class="p">:</span>
<span class="s2">"b"</span><span class="p">,</span> <span
class="n">index</span><span class="p">:</span> <span class="mi">0</ [...]
<span class="o">|</span> <span class="o">|</span>
<span class="n">HashAggregateExec</span><span class="p">:</span> <span
class="n">mode</span><span class="o">=</span><span
class="n">Partial</span><span class="p">,</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="k">as</span> <span class="n">b</span><span class="p">],</span> <span
class="n">agg [...]
<span class="o">|</span> <span class="o">|</span>
<span class="n">RepartitionExec</span><span class="p">:</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="n">metrics</span><span class="o">=</span><span class="p">[</span><span
class="n">fetchTime</span><span class="o">=</span><span
class="mi">5660489</span><span class [...]
-<span class="o">|</span> <span class="o">|</span>
<span class="n">CsvExec</span><span class="p">:</span> <span
class="n">file_groups</span><span class="o">=</span><span
class="p">{</span><span class="mi">1</span> <span class="n">group</span><span
class="p">:</span> <span class="p">[[</span><span class="o">/</span><span
class="n">tmp</span><span class="o">/</span><span class="n">table</span><span
class="o">.</span><span class="n">csv</span><span class="p">] [...]
+<span class="o">|</span> <span class="o">|</span>
<span class="n">DataSourceExec</span><span class="p">:</span> <span
class="n">file_groups</span><span class="o">=</span><span
class="p">{</span><span class="mi">1</span> <span class="n">group</span><span
class="p">:</span> <span class="p">[[</span><span class="o">/</span><span
class="n">tmp</span><span class="o">/</span><span class="n">table</span><span
class="o">.</span><span class="n">csv</span><span clas [...]
<span
class="o">+-------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------+</span>
</pre></div>
</div>
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]