This is an automated email from the ASF dual-hosted git repository.
github-actions[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 6bbf0fbcd3 Publish built docs triggered by
1dc031d95e166b41672da0f9dac136611aa82d90
6bbf0fbcd3 is described below
commit 6bbf0fbcd39cdc6e87bfdc3ca1a26a01f957eccc
Author: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
AuthorDate: Mon Jul 20 03:57:49 2026 +0000
Publish built docs triggered by 1dc031d95e166b41672da0f9dac136611aa82d90
---
.../library-user-guide/upgrading/55.0.0.md.txt | 31 ++++++++++++++++++++++
_sources/user-guide/sql/ddl.md.txt | 15 +++++++++++
library-user-guide/upgrading/55.0.0.html | 28 +++++++++++++++++++
searchindex.js | 2 +-
user-guide/sql/ddl.html | 12 +++++++++
5 files changed, 87 insertions(+), 1 deletion(-)
diff --git a/_sources/library-user-guide/upgrading/55.0.0.md.txt
b/_sources/library-user-guide/upgrading/55.0.0.md.txt
index f52db8da93..28ceb27d63 100644
--- a/_sources/library-user-guide/upgrading/55.0.0.md.txt
+++ b/_sources/library-user-guide/upgrading/55.0.0.md.txt
@@ -150,6 +150,37 @@ This function was deprecated in DataFusion `46.0.0`.
Use `datafusion_physical_plan::spill::SpillManager::spill_record_batch_by_size`
instead.
+### `CreateExternalTable` supports multiple locations
+
+`CREATE EXTERNAL TABLE` now accepts multiple paths in a single `LOCATION`
+clause, which are read together as one table:
+
+```sql
+CREATE EXTERNAL TABLE hits
+STORED AS PARQUET
+LOCATION ('file_1.parquet', 'file_2.parquet');
+```
+
+To support this, the `location` field of both
+`datafusion_expr::CreateExternalTable` and
+`datafusion_sql::parser::CreateExternalTable` changed from a `String` to a
+`Vec<String>` named `locations`:
+
+```rust
+// Before (54.0.0)
+let location: String = create_external_table.location;
+
+// After (55.0.0)
+let locations: Vec<String> = create_external_table.locations;
+```
+
+The `CreateExternalTable::builder(name, location, file_type, schema)`
+constructor is unchanged and still takes a single location; use the new
+`CreateExternalTableBuilder::with_locations(Vec<String>)` to set more than one.
+All listed locations must resolve to the same schema and reside on the same
+object store. A plain string literal remains a single location, so paths that
+contain commas continue to work, for example `LOCATION 'path/with,comma.csv'`.
+
### Decimal scalar formatting uses human-readable values
Decimal scalar literals in `EXPLAIN` output, expression display strings, and
diff --git a/_sources/user-guide/sql/ddl.md.txt
b/_sources/user-guide/sql/ddl.md.txt
index 3a5c934ae8..0d76775bcc 100644
--- a/_sources/user-guide/sql/ddl.md.txt
+++ b/_sources/user-guide/sql/ddl.md.txt
@@ -82,6 +82,21 @@ For a comprehensive list of format-specific options that can
be specified in the
a path to a file or directory of partitioned files locally or on an
object store.
+Multiple locations can be supplied as a parenthesized list of string literals,
+in which case the files are read together as one table:
+
+```sql
+CREATE EXTERNAL TABLE hits
+STORED AS PARQUET
+LOCATION (
+
's3://clickhouse-public-datasets/hits_compatible/athena_partitioned/hits_1.parquet',
+
's3://clickhouse-public-datasets/hits_compatible/athena_partitioned/hits_2.parquet'
+);
+```
+
+All listed locations must reside on the same object store and resolve to data
+with the same schema.
+
### Example: Parquet
Parquet data sources can be registered by executing a `CREATE EXTERNAL TABLE`
SQL statement such as the following. It is not necessary to
diff --git a/library-user-guide/upgrading/55.0.0.html
b/library-user-guide/upgrading/55.0.0.html
index 89f9398b69..eb2f8cfc33 100644
--- a/library-user-guide/upgrading/55.0.0.html
+++ b/library-user-guide/upgrading/55.0.0.html
@@ -553,6 +553,33 @@ This function was deprecated in DataFusion <code
class="docutils literal notrans
<p>Use <code class="docutils literal notranslate"><span
class="pre">datafusion_physical_plan::spill::SpillManager::spill_record_batch_by_size</span></code>
instead.</p>
</section>
+<section id="createexternaltable-supports-multiple-locations">
+<h3><code class="docutils literal notranslate"><span
class="pre">CreateExternalTable</span></code> supports multiple locations<a
class="headerlink" href="#createexternaltable-supports-multiple-locations"
title="Link to this heading">#</a></h3>
+<p><code class="docutils literal notranslate"><span class="pre">CREATE</span>
<span class="pre">EXTERNAL</span> <span class="pre">TABLE</span></code> now
accepts multiple paths in a single <code class="docutils literal
notranslate"><span class="pre">LOCATION</span></code>
+clause, which are read together as one table:</p>
+<div class="highlight-sql notranslate"><div
class="highlight"><pre><span></span><span class="k">CREATE</span><span
class="w"> </span><span class="k">EXTERNAL</span><span class="w"> </span><span
class="k">TABLE</span><span class="w"> </span><span class="n">hits</span>
+<span class="n">STORED</span><span class="w"> </span><span
class="k">AS</span><span class="w"> </span><span class="n">PARQUET</span>
+<span class="k">LOCATION</span><span class="w"> </span><span
class="p">(</span><span class="s1">'file_1.parquet'</span><span
class="p">,</span><span class="w"> </span><span
class="s1">'file_2.parquet'</span><span class="p">);</span>
+</pre></div>
+</div>
+<p>To support this, the <code class="docutils literal notranslate"><span
class="pre">location</span></code> field of both
+<code class="docutils literal notranslate"><span
class="pre">datafusion_expr::CreateExternalTable</span></code> and
+<code class="docutils literal notranslate"><span
class="pre">datafusion_sql::parser::CreateExternalTable</span></code> changed
from a <code class="docutils literal notranslate"><span
class="pre">String</span></code> to a
+<code class="docutils literal notranslate"><span
class="pre">Vec<String></span></code> named <code class="docutils literal
notranslate"><span class="pre">locations</span></code>:</p>
+<div class="highlight-rust notranslate"><div
class="highlight"><pre><span></span><span class="c1">// Before (54.0.0)</span>
+<span class="kd">let</span><span class="w"> </span><span
class="n">location</span><span class="p">:</span><span class="w"> </span><span
class="nb">String</span><span class="w"> </span><span class="o">=</span><span
class="w"> </span><span class="n">create_external_table</span><span
class="p">.</span><span class="n">location</span><span class="p">;</span>
+
+<span class="c1">// After (55.0.0)</span>
+<span class="kd">let</span><span class="w"> </span><span
class="n">locations</span><span class="p">:</span><span class="w"> </span><span
class="nb">Vec</span><span class="o"><</span><span
class="nb">String</span><span class="o">></span><span class="w">
</span><span class="o">=</span><span class="w"> </span><span
class="n">create_external_table</span><span class="p">.</span><span
class="n">locations</span><span class="p">;</span>
+</pre></div>
+</div>
+<p>The <code class="docutils literal notranslate"><span
class="pre">CreateExternalTable::builder(name,</span> <span
class="pre">location,</span> <span class="pre">file_type,</span> <span
class="pre">schema)</span></code>
+constructor is unchanged and still takes a single location; use the new
+<code class="docutils literal notranslate"><span
class="pre">CreateExternalTableBuilder::with_locations(Vec<String>)</span></code>
to set more than one.
+All listed locations must resolve to the same schema and reside on the same
+object store. A plain string literal remains a single location, so paths that
+contain commas continue to work, for example <code class="docutils literal
notranslate"><span class="pre">LOCATION</span> <span
class="pre">'path/with,comma.csv'</span></code>.</p>
+</section>
<section id="decimal-scalar-formatting-uses-human-readable-values">
<h3>Decimal scalar formatting uses human-readable values<a class="headerlink"
href="#decimal-scalar-formatting-uses-human-readable-values" title="Link to
this heading">#</a></h3>
<p>Decimal scalar literals in <code class="docutils literal notranslate"><span
class="pre">EXPLAIN</span></code> output, expression display strings, and
@@ -1056,6 +1083,7 @@ unit is truncated – so <code class="docutils literal
notranslate"><span class=
<li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link"
href="#user-spillfile-traits-instead-of-refcountedtempfile">User <code
class="docutils literal notranslate"><span class="pre">SpillFile</span></code>
traits instead of <code class="docutils literal notranslate"><span
class="pre">RefCountedTempFile</span></code></a></li>
<li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link"
href="#dialect-available-replaced-by-dialect-available"><code class="docutils
literal notranslate"><span class="pre">Dialect::AVAILABLE</span></code>
replaced by <code class="docutils literal notranslate"><span
class="pre">Dialect::available()</span></code></a></li>
<li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link"
href="#spill-record-batch-by-size-removed"><code class="docutils literal
notranslate"><span class="pre">spill_record_batch_by_size</span></code>
removed</a></li>
+<li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link"
href="#createexternaltable-supports-multiple-locations"><code class="docutils
literal notranslate"><span class="pre">CreateExternalTable</span></code>
supports multiple locations</a></li>
<li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link"
href="#decimal-scalar-formatting-uses-human-readable-values">Decimal scalar
formatting uses human-readable values</a></li>
<li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link"
href="#coercion-supports-dictionary-encoding-preservation"><code
class="docutils literal notranslate"><span class="pre">Coercion</span></code>
supports dictionary encoding preservation</a></li>
<li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link"
href="#groupsaccumulator-merge-batch-no-longer-takes-opt-filter"><code
class="docutils literal notranslate"><span
class="pre">GroupsAccumulator::merge_batch</span></code> no longer takes <code
class="docutils literal notranslate"><span
class="pre">opt_filter</span></code></a></li>
diff --git a/searchindex.js b/searchindex.js
index a2d871d301..28420466f4 100644
--- a/searchindex.js
+++ b/searchindex.js
@@ -1 +1 @@
-Search.setIndex({"alltitles":{"!=":[[74,"op-neq"]],"!~":[[74,"op-re-not-match"]],"!~*":[[74,"op-re-not-match-i"]],"!~~":[[74,"id19"]],"!~~*":[[74,"id20"]],"#":[[74,"op-bit-xor"]],"%":[[74,"op-modulo"]],"&":[[74,"op-bit-and"]],"(relation,
name) tuples in logical fields and logical columns are
unique":[[15,"relation-name-tuples-in-logical-fields-and-logical-columns-are-unique"]],"*":[[74,"op-multiply"]],"+":[[74,"op-plus"]],"-":[[74,"op-minus"]],"/":[[74,"op-divide"]],"1.
Array Literal Con [...]
\ No newline at end of file
+Search.setIndex({"alltitles":{"!=":[[74,"op-neq"]],"!~":[[74,"op-re-not-match"]],"!~*":[[74,"op-re-not-match-i"]],"!~~":[[74,"id19"]],"!~~*":[[74,"id20"]],"#":[[74,"op-bit-xor"]],"%":[[74,"op-modulo"]],"&":[[74,"op-bit-and"]],"(relation,
name) tuples in logical fields and logical columns are
unique":[[15,"relation-name-tuples-in-logical-fields-and-logical-columns-are-unique"]],"*":[[74,"op-multiply"]],"+":[[74,"op-plus"]],"-":[[74,"op-minus"]],"/":[[74,"op-divide"]],"1.
Array Literal Con [...]
\ No newline at end of file
diff --git a/user-guide/sql/ddl.html b/user-guide/sql/ddl.html
index aa7e038540..35895ab3b5 100644
--- a/user-guide/sql/ddl.html
+++ b/user-guide/sql/ddl.html
@@ -498,6 +498,18 @@ file system or remote object store as a named table which
can be queried.</p>
<p><code class="docutils literal notranslate"><span
class="pre">LOCATION</span> <span class="pre"><literal></span></code>
specifies the location to find the data. It can be
a path to a file or directory of partitioned files locally or on an
object store.</p>
+<p>Multiple locations can be supplied as a parenthesized list of string
literals,
+in which case the files are read together as one table:</p>
+<div class="highlight-sql notranslate"><div
class="highlight"><pre><span></span><span class="k">CREATE</span><span
class="w"> </span><span class="k">EXTERNAL</span><span class="w"> </span><span
class="k">TABLE</span><span class="w"> </span><span class="n">hits</span>
+<span class="n">STORED</span><span class="w"> </span><span
class="k">AS</span><span class="w"> </span><span class="n">PARQUET</span>
+<span class="k">LOCATION</span><span class="w"> </span><span class="p">(</span>
+<span class="w"> </span><span
class="s1">'s3://clickhouse-public-datasets/hits_compatible/athena_partitioned/hits_1.parquet'</span><span
class="p">,</span>
+<span class="w"> </span><span
class="s1">'s3://clickhouse-public-datasets/hits_compatible/athena_partitioned/hits_2.parquet'</span>
+<span class="p">);</span>
+</pre></div>
+</div>
+<p>All listed locations must reside on the same object store and resolve to
data
+with the same schema.</p>
<section id="example-parquet">
<h3>Example: Parquet<a class="headerlink" href="#example-parquet" title="Link
to this heading">#</a></h3>
<p>Parquet data sources can be registered by executing a <code class="docutils
literal notranslate"><span class="pre">CREATE</span> <span
class="pre">EXTERNAL</span> <span class="pre">TABLE</span></code> SQL statement
such as the following. It is not necessary to
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]