You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@arrow.apache.org by gi...@apache.org on 2023/09/18 14:26:01 UTC
[arrow-datafusion] branch asf-site updated: Publish built docs triggered by 44b3318c2a13777ca309e46d06a8022b712d209f
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/arrow-datafusion.git
The following commit(s) were added to refs/heads/asf-site by this push:
new ba3b3632b6 Publish built docs triggered by 44b3318c2a13777ca309e46d06a8022b712d209f
ba3b3632b6 is described below
commit ba3b3632b61e926319f40554a398dbd88525b3d0
Author: github-actions[bot] <gi...@users.noreply.github.com>
AuthorDate: Mon Sep 18 14:25:56 2023 +0000
Publish built docs triggered by 44b3318c2a13777ca309e46d06a8022b712d209f
---
.../simple_udwf.rs | 42 ++++--------
_sources/library-user-guide/catalogs.md.txt | 51 ++++++++++++--
contributor-guide/architecture.html | 2 +-
contributor-guide/communication.html | 2 +-
contributor-guide/index.html | 2 +-
contributor-guide/quarterly_roadmap.html | 2 +-
contributor-guide/roadmap.html | 2 +-
contributor-guide/specification/index.html | 2 +-
contributor-guide/specification/invariants.html | 2 +-
.../specification/output-field-name-semantic.html | 2 +-
genindex.html | 2 +-
index.html | 2 +-
library-user-guide/adding-udfs.html | 2 +-
library-user-guide/building-logical-plans.html | 2 +-
library-user-guide/catalogs.html | 80 +++++++++++++++++-----
library-user-guide/custom-table-providers.html | 2 +-
library-user-guide/extending-operators.html | 2 +-
library-user-guide/index.html | 2 +-
library-user-guide/using-the-dataframe-api.html | 2 +-
library-user-guide/using-the-sql-api.html | 2 +-
library-user-guide/working-with-exprs.html | 2 +-
search.html | 2 +-
searchindex.js | 2 +-
user-guide/cli.html | 2 +-
user-guide/configs.html | 2 +-
user-guide/dataframe.html | 2 +-
user-guide/example-usage.html | 2 +-
user-guide/expressions.html | 2 +-
user-guide/faq.html | 2 +-
user-guide/introduction.html | 2 +-
user-guide/sql/aggregate_functions.html | 2 +-
user-guide/sql/data_types.html | 2 +-
user-guide/sql/ddl.html | 2 +-
user-guide/sql/dml.html | 2 +-
user-guide/sql/explain.html | 2 +-
user-guide/sql/index.html | 2 +-
user-guide/sql/information_schema.html | 2 +-
user-guide/sql/operators.html | 2 +-
user-guide/sql/scalar_functions.html | 2 +-
user-guide/sql/select.html | 2 +-
user-guide/sql/sql_status.html | 2 +-
user-guide/sql/subqueries.html | 2 +-
user-guide/sql/window_functions.html | 2 +-
user-guide/sql/write_options.html | 2 +-
44 files changed, 160 insertions(+), 95 deletions(-)
diff --git a/_downloads/9d6db4688a18f2550d093295ce0f3231/simple_udwf.rs b/_downloads/9d6db4688a18f2550d093295ce0f3231/simple_udwf.rs
index 15cfffe65f..39042a3562 100644
--- a/_downloads/9d6db4688a18f2550d093295ce0f3231/simple_udwf.rs
+++ b/_downloads/9d6db4688a18f2550d093295ce0f3231/simple_udwf.rs
@@ -26,10 +26,8 @@ use datafusion::datasource::file_format::options::CsvReadOptions;
use datafusion::error::Result;
use datafusion::prelude::*;
-use datafusion_common::{plan_err, DataFusionError, ScalarValue};
-use datafusion_expr::{
- PartitionEvaluator, Signature, Volatility, WindowFrame, WindowUDF,
-};
+use datafusion_common::ScalarValue;
+use datafusion_expr::{PartitionEvaluator, Volatility, WindowFrame};
// create local execution context with `cars.csv` registered as a table named `cars`
async fn create_context() -> Result<SessionContext> {
@@ -50,8 +48,17 @@ async fn create_context() -> Result<SessionContext> {
async fn main() -> Result<()> {
let ctx = create_context().await?;
+ // here is where we define the UDWF. We also declare its signature:
+ let smooth_it = create_udwf(
+ "smooth_it",
+ DataType::Float64,
+ Arc::new(DataType::Float64),
+ Volatility::Immutable,
+ Arc::new(make_partition_evaluator),
+ );
+
// register the window function with DataFusion so we can call it
- ctx.register_udwf(smooth_it());
+ ctx.register_udwf(smooth_it.clone());
// Use SQL to run the new window function
let df = ctx.sql("SELECT * from cars").await?;
@@ -112,7 +119,7 @@ async fn main() -> Result<()> {
df.show().await?;
// Now, run the function using the DataFrame API:
- let window_expr = smooth_it().call(
+ let window_expr = smooth_it.call(
vec![col("speed")], // smooth_it(speed)
vec![col("car")], // PARTITION BY car
vec![col("time").sort(true, true)], // ORDER BY time ASC
@@ -126,29 +133,6 @@ async fn main() -> Result<()> {
Ok(())
}
-fn smooth_it() -> WindowUDF {
- WindowUDF {
- name: String::from("smooth_it"),
- // it will take 1 arguments -- the column to smooth
- signature: Signature::exact(vec![DataType::Float64], Volatility::Immutable),
- return_type: Arc::new(return_type),
- partition_evaluator_factory: Arc::new(make_partition_evaluator),
- }
-}
-
-/// Compute the return type of the smooth_it window function given
-/// arguments of `arg_types`.
-fn return_type(arg_types: &[DataType]) -> Result<Arc<DataType>> {
- if arg_types.len() != 1 {
- return plan_err!(
- "my_udwf expects 1 argument, got {}: {:?}",
- arg_types.len(),
- arg_types
- );
- }
- Ok(Arc::new(arg_types[0].clone()))
-}
-
/// Create a `PartitionEvalutor` to evaluate this function on a new
/// partition.
fn make_partition_evaluator() -> Result<Box<dyn PartitionEvaluator>> {
diff --git a/_sources/library-user-guide/catalogs.md.txt b/_sources/library-user-guide/catalogs.md.txt
index 226e283324..1dd235f0a2 100644
--- a/_sources/library-user-guide/catalogs.md.txt
+++ b/_sources/library-user-guide/catalogs.md.txt
@@ -23,7 +23,7 @@ This section describes how to create and manage catalogs, schemas, and tables in
## General Concepts
-Catalogs, schemas, and tables are organized in a hierarchy. A catalog contains schemas, and a schema contains tables.
+CatalogList, Catalogs, schemas, and tables are organized in a hierarchy. A CatalogList contains catalogs, a catalog contains schemas and a schema contains tables.
DataFusion comes with a basic in memory catalog functionality in the [`catalog` module]. You can use these in memory implementations as is, or extend DataFusion with your own catalog implementations, for example based on local files or files on remote object storage.
@@ -31,9 +31,9 @@ DataFusion comes with a basic in memory catalog functionality in the [`catalog`
Similarly to other concepts in DataFusion, you'll implement various traits to create your own catalogs, schemas, and tables. The following sections describe the traits you'll need to implement.
-The `CatalogProvider` trait has methods to set a schema to a name, get a schema by name, and list all schemas. The `SchemaProvider`, which can be registered with a `CatalogProvider`, has methods to set a table to a name, get a table by name, list all tables, deregister a table, and check for a table's existence. The `TableProvider` trait has methods to scan underlying data and use it in DataFusion. The `TableProvider` trait is covered in more detail [here](./custom-table-providers.md).
+The `CatalogList` trait has methods to register new catalogs, get a catalog by name and list all catalogs .The `CatalogProvider` trait has methods to set a schema to a name, get a schema by name, and list all schemas. The `SchemaProvider`, which can be registered with a `CatalogProvider`, has methods to set a table to a name, get a table by name, list all tables, deregister a table, and check for a table's existence. The `TableProvider` trait has methods to scan underlying data and use i [...]
-In the following example, we'll implement an in memory catalog, starting with the `SchemaProvider` trait as we need one to register with the `CatalogProvider`.
+In the following example, we'll implement an in memory catalog, starting with the `SchemaProvider` trait as we need one to register with the `CatalogProvider`. Finally we will implement `CatalogList` to register the `CatalogProvider`.
## Implementing `MemorySchemaProvider`
@@ -116,14 +116,13 @@ impl SchemaProvider for Schema {
}
```
-### Implementing `MemoryCatalogProvider`
+## Implementing `MemoryCatalogProvider`
As mentioned, the `CatalogProvider` can manage the schemas in a catalog, and the `MemoryCatalogProvider` is a simple implementation of the `CatalogProvider` trait. It stores schemas in a `DashMap`.
```rust
-pub struct MemoryCatalogList {
- /// Collection of catalogs containing schemas and ultimately TableProviders
- pub catalogs: DashMap<String, Arc<dyn CatalogProvider>>,
+pub struct MemoryCatalogProvider {
+ schemas: DashMap<String, Arc<dyn SchemaProvider>>,
}
```
@@ -170,6 +169,43 @@ impl CatalogProvider for MemoryCatalogProvider {
Again, this is fairly straightforward, as there's an underlying data structure to store the state, via key-value pairs.
+## Implementing `MemoryCatalogList`
+
+```rust
+pub struct MemoryCatalogList {
+ /// Collection of catalogs containing schemas and ultimately TableProviders
+ pub catalogs: DashMap<String, Arc<dyn CatalogProvider>>,
+}
+```
+
+With that the `CatalogList` trait can be implemented.
+
+```rust
+impl CatalogList for MemoryCatalogList {
+ fn as_any(&self) -> &dyn Any {
+ self
+ }
+
+ fn register_catalog(
+ &self,
+ name: String,
+ catalog: Arc<dyn CatalogProvider>,
+ ) -> Option<Arc<dyn CatalogProvider>> {
+ self.catalogs.insert(name, catalog)
+ }
+
+ fn catalog_names(&self) -> Vec<String> {
+ self.catalogs.iter().map(|c| c.key().clone()).collect()
+ }
+
+ fn catalog(&self, name: &str) -> Option<Arc<dyn CatalogProvider>> {
+ self.catalogs.get(name).map(|c| c.value().clone())
+ }
+}
+```
+
+Like other traits, it also maintains the mapping of the Catalog's name to the CatalogProvider.
+
## Recap
To recap, you need to:
@@ -177,3 +213,4 @@ To recap, you need to:
1. Implement the `TableProvider` trait to create a table provider, or use an existing one.
2. Implement the `SchemaProvider` trait to create a schema provider, or use an existing one.
3. Implement the `CatalogProvider` trait to create a catalog provider, or use an existing one.
+4. Implement the `CatalogList` trait to create a CatalogList, or use an existing one.
diff --git a/contributor-guide/architecture.html b/contributor-guide/architecture.html
index 21f7c2c796..ec5e706763 100644
--- a/contributor-guide/architecture.html
+++ b/contributor-guide/architecture.html
@@ -433,7 +433,7 @@ possible. You can find the most up to date version in the <a class="reference ex
<div class="footer-item">
<p class="sphinx-version">
-Created using <a href="http://sphinx-doc.org/">Sphinx</a> 7.2.5.<br>
+Created using <a href="http://sphinx-doc.org/">Sphinx</a> 7.2.6.<br>
</p>
</div>
diff --git a/contributor-guide/communication.html b/contributor-guide/communication.html
index f526c7e935..07a75039f2 100644
--- a/contributor-guide/communication.html
+++ b/contributor-guide/communication.html
@@ -504,7 +504,7 @@ for the video call link, add topics and to see what others plan to discuss.</p>
<div class="footer-item">
<p class="sphinx-version">
-Created using <a href="http://sphinx-doc.org/">Sphinx</a> 7.2.5.<br>
+Created using <a href="http://sphinx-doc.org/">Sphinx</a> 7.2.6.<br>
</p>
</div>
diff --git a/contributor-guide/index.html b/contributor-guide/index.html
index 1c7690f406..265cb7b512 100644
--- a/contributor-guide/index.html
+++ b/contributor-guide/index.html
@@ -847,7 +847,7 @@ new specifications as you see fit.</p>
<div class="footer-item">
<p class="sphinx-version">
-Created using <a href="http://sphinx-doc.org/">Sphinx</a> 7.2.5.<br>
+Created using <a href="http://sphinx-doc.org/">Sphinx</a> 7.2.6.<br>
</p>
</div>
diff --git a/contributor-guide/quarterly_roadmap.html b/contributor-guide/quarterly_roadmap.html
index e79e341460..11ffb99806 100644
--- a/contributor-guide/quarterly_roadmap.html
+++ b/contributor-guide/quarterly_roadmap.html
@@ -596,7 +596,7 @@
<div class="footer-item">
<p class="sphinx-version">
-Created using <a href="http://sphinx-doc.org/">Sphinx</a> 7.2.5.<br>
+Created using <a href="http://sphinx-doc.org/">Sphinx</a> 7.2.6.<br>
</p>
</div>
diff --git a/contributor-guide/roadmap.html b/contributor-guide/roadmap.html
index 7f8cf2426d..980def344f 100644
--- a/contributor-guide/roadmap.html
+++ b/contributor-guide/roadmap.html
@@ -467,7 +467,7 @@ make review efficient and avoid surprises.</p>
<div class="footer-item">
<p class="sphinx-version">
-Created using <a href="http://sphinx-doc.org/">Sphinx</a> 7.2.5.<br>
+Created using <a href="http://sphinx-doc.org/">Sphinx</a> 7.2.6.<br>
</p>
</div>
diff --git a/contributor-guide/specification/index.html b/contributor-guide/specification/index.html
index 794dd69fe8..9722ab6b18 100644
--- a/contributor-guide/specification/index.html
+++ b/contributor-guide/specification/index.html
@@ -418,7 +418,7 @@
<div class="footer-item">
<p class="sphinx-version">
-Created using <a href="http://sphinx-doc.org/">Sphinx</a> 7.2.5.<br>
+Created using <a href="http://sphinx-doc.org/">Sphinx</a> 7.2.6.<br>
</p>
</div>
diff --git a/contributor-guide/specification/invariants.html b/contributor-guide/specification/invariants.html
index 8e8dca7689..7d9bbced08 100644
--- a/contributor-guide/specification/invariants.html
+++ b/contributor-guide/specification/invariants.html
@@ -935,7 +935,7 @@ schemas.</p>
<div class="footer-item">
<p class="sphinx-version">
-Created using <a href="http://sphinx-doc.org/">Sphinx</a> 7.2.5.<br>
+Created using <a href="http://sphinx-doc.org/">Sphinx</a> 7.2.6.<br>
</p>
</div>
diff --git a/contributor-guide/specification/output-field-name-semantic.html b/contributor-guide/specification/output-field-name-semantic.html
index c946323d1c..d560a12ab7 100644
--- a/contributor-guide/specification/output-field-name-semantic.html
+++ b/contributor-guide/specification/output-field-name-semantic.html
@@ -853,7 +853,7 @@ DataFusion queries planned from both SQL queries and Dataframe APIs.</p>
<div class="footer-item">
<p class="sphinx-version">
-Created using <a href="http://sphinx-doc.org/">Sphinx</a> 7.2.5.<br>
+Created using <a href="http://sphinx-doc.org/">Sphinx</a> 7.2.6.<br>
</p>
</div>
diff --git a/genindex.html b/genindex.html
index 4dce4f4fa3..981e9c1a21 100644
--- a/genindex.html
+++ b/genindex.html
@@ -377,7 +377,7 @@
<div class="footer-item">
<p class="sphinx-version">
-Created using <a href="http://sphinx-doc.org/">Sphinx</a> 7.2.5.<br>
+Created using <a href="http://sphinx-doc.org/">Sphinx</a> 7.2.6.<br>
</p>
</div>
diff --git a/index.html b/index.html
index 181f850968..18a7a0556a 100644
--- a/index.html
+++ b/index.html
@@ -464,7 +464,7 @@ community.</p>
<div class="footer-item">
<p class="sphinx-version">
-Created using <a href="http://sphinx-doc.org/">Sphinx</a> 7.2.5.<br>
+Created using <a href="http://sphinx-doc.org/">Sphinx</a> 7.2.6.<br>
</p>
</div>
diff --git a/library-user-guide/adding-udfs.html b/library-user-guide/adding-udfs.html
index 4ed3f7d45e..d366a3a9ed 100644
--- a/library-user-guide/adding-udfs.html
+++ b/library-user-guide/adding-udfs.html
@@ -562,7 +562,7 @@
<div class="footer-item">
<p class="sphinx-version">
-Created using <a href="http://sphinx-doc.org/">Sphinx</a> 7.2.5.<br>
+Created using <a href="http://sphinx-doc.org/">Sphinx</a> 7.2.6.<br>
</p>
</div>
diff --git a/library-user-guide/building-logical-plans.html b/library-user-guide/building-logical-plans.html
index 3011fbbe3a..0df9bf2a28 100644
--- a/library-user-guide/building-logical-plans.html
+++ b/library-user-guide/building-logical-plans.html
@@ -431,7 +431,7 @@
<div class="footer-item">
<p class="sphinx-version">
-Created using <a href="http://sphinx-doc.org/">Sphinx</a> 7.2.5.<br>
+Created using <a href="http://sphinx-doc.org/">Sphinx</a> 7.2.6.<br>
</p>
</div>
diff --git a/library-user-guide/catalogs.html b/library-user-guide/catalogs.html
index b63ee48990..4ead726ec3 100644
--- a/library-user-guide/catalogs.html
+++ b/library-user-guide/catalogs.html
@@ -370,18 +370,28 @@
</code>
</a>
</li>
- <li class="toc-h3 nav-item toc-entry">
- <a class="reference internal nav-link" href="#implementing-memorycatalogprovider">
- Implementing
- <code class="docutils literal notranslate">
- <span class="pre">
- MemoryCatalogProvider
- </span>
- </code>
- </a>
- </li>
</ul>
</li>
+ <li class="toc-h2 nav-item toc-entry">
+ <a class="reference internal nav-link" href="#implementing-memorycatalogprovider">
+ Implementing
+ <code class="docutils literal notranslate">
+ <span class="pre">
+ MemoryCatalogProvider
+ </span>
+ </code>
+ </a>
+ </li>
+ <li class="toc-h2 nav-item toc-entry">
+ <a class="reference internal nav-link" href="#implementing-memorycataloglist">
+ Implementing
+ <code class="docutils literal notranslate">
+ <span class="pre">
+ MemoryCatalogList
+ </span>
+ </code>
+ </a>
+ </li>
<li class="toc-h2 nav-item toc-entry">
<a class="reference internal nav-link" href="#recap">
Recap
@@ -438,11 +448,11 @@
<p>This section describes how to create and manage catalogs, schemas, and tables in DataFusion. For those wanting to dive into the code quickly please see the <a class="reference download internal" download="" href="../_downloads/9dc934d68aef6b44bd3235a7dbc9a8be/catalog.rs"><span class="xref download myst">example</span></a>.</p>
<section id="general-concepts">
<h2>General Concepts<a class="headerlink" href="#general-concepts" title="Link to this heading">¶</a></h2>
-<p>Catalogs, schemas, and tables are organized in a hierarchy. A catalog contains schemas, and a schema contains tables.</p>
+<p>CatalogList, Catalogs, schemas, and tables are organized in a hierarchy. A CatalogList contains catalogs, a catalog contains schemas and a schema contains tables.</p>
<p>DataFusion comes with a basic in memory catalog functionality in the <a class="reference external" href="https://docs.rs/datafusion/latest/datafusion/catalog/index.html"><code class="docutils literal notranslate"><span class="pre">catalog</span></code> module</a>. You can use these in memory implementations as is, or extend DataFusion with your own catalog implementations, for example based on local files or files on remote object storage.</p>
<p>Similarly to other concepts in DataFusion, you’ll implement various traits to create your own catalogs, schemas, and tables. The following sections describe the traits you’ll need to implement.</p>
-<p>The <code class="docutils literal notranslate"><span class="pre">CatalogProvider</span></code> trait has methods to set a schema to a name, get a schema by name, and list all schemas. The <code class="docutils literal notranslate"><span class="pre">SchemaProvider</span></code>, which can be registered with a <code class="docutils literal notranslate"><span class="pre">CatalogProvider</span></code>, has methods to set a table to a name, get a table by name, list all tables, deregister [...]
-<p>In the following example, we’ll implement an in memory catalog, starting with the <code class="docutils literal notranslate"><span class="pre">SchemaProvider</span></code> trait as we need one to register with the <code class="docutils literal notranslate"><span class="pre">CatalogProvider</span></code>.</p>
+<p>The <code class="docutils literal notranslate"><span class="pre">CatalogList</span></code> trait has methods to register new catalogs, get a catalog by name and list all catalogs .The <code class="docutils literal notranslate"><span class="pre">CatalogProvider</span></code> trait has methods to set a schema to a name, get a schema by name, and list all schemas. The <code class="docutils literal notranslate"><span class="pre">SchemaProvider</span></code>, which can be registered with a [...]
+<p>In the following example, we’ll implement an in memory catalog, starting with the <code class="docutils literal notranslate"><span class="pre">SchemaProvider</span></code> trait as we need one to register with the <code class="docutils literal notranslate"><span class="pre">CatalogProvider</span></code>. Finally we will implement <code class="docutils literal notranslate"><span class="pre">CatalogList</span></code> to register the <code class="docutils literal notranslate"><span class [...]
</section>
<section id="implementing-memoryschemaprovider">
<h2>Implementing <code class="docutils literal notranslate"><span class="pre">MemorySchemaProvider</span></code><a class="headerlink" href="#implementing-memoryschemaprovider" title="Link to this heading">¶</a></h2>
@@ -516,12 +526,12 @@
</pre></div>
</div>
</section>
+</section>
<section id="implementing-memorycatalogprovider">
-<h3>Implementing <code class="docutils literal notranslate"><span class="pre">MemoryCatalogProvider</span></code><a class="headerlink" href="#implementing-memorycatalogprovider" title="Link to this heading">¶</a></h3>
+<h2>Implementing <code class="docutils literal notranslate"><span class="pre">MemoryCatalogProvider</span></code><a class="headerlink" href="#implementing-memorycatalogprovider" title="Link to this heading">¶</a></h2>
<p>As mentioned, the <code class="docutils literal notranslate"><span class="pre">CatalogProvider</span></code> can manage the schemas in a catalog, and the <code class="docutils literal notranslate"><span class="pre">MemoryCatalogProvider</span></code> is a simple implementation of the <code class="docutils literal notranslate"><span class="pre">CatalogProvider</span></code> trait. It stores schemas in a <code class="docutils literal notranslate"><span class="pre">DashMap</span></code>.</p>
-<div class="highlight-rust notranslate"><div class="highlight"><pre><span></span><span class="k">pub</span><span class="w"> </span><span class="k">struct</span> <span class="nc">MemoryCatalogList</span><span class="w"> </span><span class="p">{</span>
-<span class="w"> </span><span class="sd">/// Collection of catalogs containing schemas and ultimately TableProviders</span>
-<span class="w"> </span><span class="k">pub</span><span class="w"> </span><span class="n">catalogs</span>: <span class="nc">DashMap</span><span class="o"><</span><span class="nb">String</span><span class="p">,</span><span class="w"> </span><span class="n">Arc</span><span class="o"><</span><span class="k">dyn</span><span class="w"> </span><span class="n">CatalogProvider</span><span class="o">>></span><span class="p">,</span>
+<div class="highlight-rust notranslate"><div class="highlight"><pre><span></span><span class="k">pub</span><span class="w"> </span><span class="k">struct</span> <span class="nc">MemoryCatalogProvider</span><span class="w"> </span><span class="p">{</span>
+<span class="w"> </span><span class="n">schemas</span>: <span class="nc">DashMap</span><span class="o"><</span><span class="nb">String</span><span class="p">,</span><span class="w"> </span><span class="n">Arc</span><span class="o"><</span><span class="k">dyn</span><span class="w"> </span><span class="n">SchemaProvider</span><span class="o">>></span><span class="p">,</span>
<span class="p">}</span>
</pre></div>
</div>
@@ -566,6 +576,39 @@
</div>
<p>Again, this is fairly straightforward, as there’s an underlying data structure to store the state, via key-value pairs.</p>
</section>
+<section id="implementing-memorycataloglist">
+<h2>Implementing <code class="docutils literal notranslate"><span class="pre">MemoryCatalogList</span></code><a class="headerlink" href="#implementing-memorycataloglist" title="Link to this heading">¶</a></h2>
+<div class="highlight-rust notranslate"><div class="highlight"><pre><span></span><span class="k">pub</span><span class="w"> </span><span class="k">struct</span> <span class="nc">MemoryCatalogList</span><span class="w"> </span><span class="p">{</span>
+<span class="w"> </span><span class="sd">/// Collection of catalogs containing schemas and ultimately TableProviders</span>
+<span class="w"> </span><span class="k">pub</span><span class="w"> </span><span class="n">catalogs</span>: <span class="nc">DashMap</span><span class="o"><</span><span class="nb">String</span><span class="p">,</span><span class="w"> </span><span class="n">Arc</span><span class="o"><</span><span class="k">dyn</span><span class="w"> </span><span class="n">CatalogProvider</span><span class="o">>></span><span class="p">,</span>
+<span class="p">}</span>
+</pre></div>
+</div>
+<p>With that the <code class="docutils literal notranslate"><span class="pre">CatalogList</span></code> trait can be implemented.</p>
+<div class="highlight-rust notranslate"><div class="highlight"><pre><span></span><span class="k">impl</span><span class="w"> </span><span class="n">CatalogList</span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">MemoryCatalogList</span><span class="w"> </span><span class="p">{</span>
+<span class="w"> </span><span class="k">fn</span> <span class="nf">as_any</span><span class="p">(</span><span class="o">&</span><span class="bp">self</span><span class="p">)</span><span class="w"> </span>-> <span class="kp">&</span><span class="nc">dyn</span><span class="w"> </span><span class="n">Any</span><span class="w"> </span><span class="p">{</span>
+<span class="w"> </span><span class="bp">self</span>
+<span class="w"> </span><span class="p">}</span>
+
+<span class="w"> </span><span class="k">fn</span> <span class="nf">register_catalog</span><span class="p">(</span>
+<span class="w"> </span><span class="o">&</span><span class="bp">self</span><span class="p">,</span>
+<span class="w"> </span><span class="n">name</span>: <span class="nb">String</span><span class="p">,</span>
+<span class="w"> </span><span class="n">catalog</span>: <span class="nc">Arc</span><span class="o"><</span><span class="k">dyn</span><span class="w"> </span><span class="n">CatalogProvider</span><span class="o">></span><span class="p">,</span>
+<span class="w"> </span><span class="p">)</span><span class="w"> </span>-> <span class="nb">Option</span><span class="o"><</span><span class="n">Arc</span><span class="o"><</span><span class="k">dyn</span><span class="w"> </span><span class="n">CatalogProvider</span><span class="o">>></span><span class="w"> </span><span class="p">{</span>
+<span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">catalogs</span><span class="p">.</span><span class="n">insert</span><span class="p">(</span><span class="n">name</span><span class="p">,</span><span class="w"> </span><span class="n">catalog</span><span class="p">)</span>
+<span class="w"> </span><span class="p">}</span>
+
+<span class="w"> </span><span class="k">fn</span> <span class="nf">catalog_names</span><span class="p">(</span><span class="o">&</span><span class="bp">self</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="p">{</span>
+<span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">catalogs</span><span class="p">.</span><span class="n">iter</span><span class="p">().</span><span class="n">map</span><span class="p">(</span><span class="o">|</span><span class="n">c</span><span class="o">|</span><span class="w"> </span><span class="n">c</span><span class="p">.</span><span class="n">key</span><span class="p">().</span><span class="n">clone</span><span class="p">()).</span> [...]
+<span class="w"> </span><span class="p">}</span>
+
+<span class="w"> </span><span class="k">fn</span> <span class="nf">catalog</span><span class="p">(</span><span class="o">&</span><span class="bp">self</span><span class="p">,</span><span class="w"> </span><span class="n">name</span>: <span class="kp">&</span><span class="kt">str</span><span class="p">)</span><span class="w"> </span>-> <span class="nb">Option</span><span class="o"><</span><span class="n">Arc</span><span class="o"><</span><span class="k">dyn</span><span [...]
+<span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">catalogs</span><span class="p">.</span><span class="n">get</span><span class="p">(</span><span class="n">name</span><span class="p">).</span><span class="n">map</span><span class="p">(</span><span class="o">|</span><span class="n">c</span><span class="o">|</span><span class="w"> </span><span class="n">c</span><span class="p">.</span><span class="n">value</span><span class="p">().</span><spa [...]
+<span class="w"> </span><span class="p">}</span>
+<span class="p">}</span>
+</pre></div>
+</div>
+<p>Like other traits, it also maintains the mapping of the Catalog’s name to the CatalogProvider.</p>
</section>
<section id="recap">
<h2>Recap<a class="headerlink" href="#recap" title="Link to this heading">¶</a></h2>
@@ -574,6 +617,7 @@
<li><p>Implement the <code class="docutils literal notranslate"><span class="pre">TableProvider</span></code> trait to create a table provider, or use an existing one.</p></li>
<li><p>Implement the <code class="docutils literal notranslate"><span class="pre">SchemaProvider</span></code> trait to create a schema provider, or use an existing one.</p></li>
<li><p>Implement the <code class="docutils literal notranslate"><span class="pre">CatalogProvider</span></code> trait to create a catalog provider, or use an existing one.</p></li>
+<li><p>Implement the <code class="docutils literal notranslate"><span class="pre">CatalogList</span></code> trait to create a CatalogList, or use an existing one.</p></li>
</ol>
</section>
</section>
@@ -618,7 +662,7 @@
<div class="footer-item">
<p class="sphinx-version">
-Created using <a href="http://sphinx-doc.org/">Sphinx</a> 7.2.5.<br>
+Created using <a href="http://sphinx-doc.org/">Sphinx</a> 7.2.6.<br>
</p>
</div>
diff --git a/library-user-guide/custom-table-providers.html b/library-user-guide/custom-table-providers.html
index 79416f1c7d..7ffa5fcaad 100644
--- a/library-user-guide/custom-table-providers.html
+++ b/library-user-guide/custom-table-providers.html
@@ -600,7 +600,7 @@
<div class="footer-item">
<p class="sphinx-version">
-Created using <a href="http://sphinx-doc.org/">Sphinx</a> 7.2.5.<br>
+Created using <a href="http://sphinx-doc.org/">Sphinx</a> 7.2.6.<br>
</p>
</div>
diff --git a/library-user-guide/extending-operators.html b/library-user-guide/extending-operators.html
index 9aeebe9efa..add70e3bc7 100644
--- a/library-user-guide/extending-operators.html
+++ b/library-user-guide/extending-operators.html
@@ -431,7 +431,7 @@
<div class="footer-item">
<p class="sphinx-version">
-Created using <a href="http://sphinx-doc.org/">Sphinx</a> 7.2.5.<br>
+Created using <a href="http://sphinx-doc.org/">Sphinx</a> 7.2.6.<br>
</p>
</div>
diff --git a/library-user-guide/index.html b/library-user-guide/index.html
index 0a8bd6ef46..330c66b484 100644
--- a/library-user-guide/index.html
+++ b/library-user-guide/index.html
@@ -432,7 +432,7 @@
<div class="footer-item">
<p class="sphinx-version">
-Created using <a href="http://sphinx-doc.org/">Sphinx</a> 7.2.5.<br>
+Created using <a href="http://sphinx-doc.org/">Sphinx</a> 7.2.6.<br>
</p>
</div>
diff --git a/library-user-guide/using-the-dataframe-api.html b/library-user-guide/using-the-dataframe-api.html
index 7a846caf05..406559a7a7 100644
--- a/library-user-guide/using-the-dataframe-api.html
+++ b/library-user-guide/using-the-dataframe-api.html
@@ -431,7 +431,7 @@
<div class="footer-item">
<p class="sphinx-version">
-Created using <a href="http://sphinx-doc.org/">Sphinx</a> 7.2.5.<br>
+Created using <a href="http://sphinx-doc.org/">Sphinx</a> 7.2.6.<br>
</p>
</div>
diff --git a/library-user-guide/using-the-sql-api.html b/library-user-guide/using-the-sql-api.html
index 0d2190adcc..8fbb768b56 100644
--- a/library-user-guide/using-the-sql-api.html
+++ b/library-user-guide/using-the-sql-api.html
@@ -431,7 +431,7 @@
<div class="footer-item">
<p class="sphinx-version">
-Created using <a href="http://sphinx-doc.org/">Sphinx</a> 7.2.5.<br>
+Created using <a href="http://sphinx-doc.org/">Sphinx</a> 7.2.6.<br>
</p>
</div>
diff --git a/library-user-guide/working-with-exprs.html b/library-user-guide/working-with-exprs.html
index 076c6e184a..0f117d1ad6 100644
--- a/library-user-guide/working-with-exprs.html
+++ b/library-user-guide/working-with-exprs.html
@@ -624,7 +624,7 @@
<div class="footer-item">
<p class="sphinx-version">
-Created using <a href="http://sphinx-doc.org/">Sphinx</a> 7.2.5.<br>
+Created using <a href="http://sphinx-doc.org/">Sphinx</a> 7.2.6.<br>
</p>
</div>
diff --git a/search.html b/search.html
index 66836a86ea..f958e44a80 100644
--- a/search.html
+++ b/search.html
@@ -406,7 +406,7 @@
<div class="footer-item">
<p class="sphinx-version">
-Created using <a href="http://sphinx-doc.org/">Sphinx</a> 7.2.5.<br>
+Created using <a href="http://sphinx-doc.org/">Sphinx</a> 7.2.6.<br>
</p>
</div>
diff --git a/searchindex.js b/searchindex.js
index 11d66bd700..423ddedb14 100644
--- a/searchindex.js
+++ b/searchindex.js
@@ -1 +1 @@
-Search.setIndex({"docnames": ["contributor-guide/architecture", "contributor-guide/communication", "contributor-guide/index", "contributor-guide/quarterly_roadmap", "contributor-guide/roadmap", "contributor-guide/specification/index", "contributor-guide/specification/invariants", "contributor-guide/specification/output-field-name-semantic", "index", "library-user-guide/adding-udfs", "library-user-guide/building-logical-plans", "library-user-guide/catalogs", "library-user-guide/custom-tab [...]
\ No newline at end of file
+Search.setIndex({"docnames": ["contributor-guide/architecture", "contributor-guide/communication", "contributor-guide/index", "contributor-guide/quarterly_roadmap", "contributor-guide/roadmap", "contributor-guide/specification/index", "contributor-guide/specification/invariants", "contributor-guide/specification/output-field-name-semantic", "index", "library-user-guide/adding-udfs", "library-user-guide/building-logical-plans", "library-user-guide/catalogs", "library-user-guide/custom-tab [...]
\ No newline at end of file
diff --git a/user-guide/cli.html b/user-guide/cli.html
index 28ad04f852..ada8cf6909 100644
--- a/user-guide/cli.html
+++ b/user-guide/cli.html
@@ -890,7 +890,7 @@ DataFusion<span class="w"> </span>CLI<span class="w"> </span>v13.0.0
<div class="footer-item">
<p class="sphinx-version">
-Created using <a href="http://sphinx-doc.org/">Sphinx</a> 7.2.5.<br>
+Created using <a href="http://sphinx-doc.org/">Sphinx</a> 7.2.6.<br>
</p>
</div>
diff --git a/user-guide/configs.html b/user-guide/configs.html
index f6c31f20d1..359183a370 100644
--- a/user-guide/configs.html
+++ b/user-guide/configs.html
@@ -693,7 +693,7 @@ Environment variables are read during <code class="docutils literal notranslate"
<div class="footer-item">
<p class="sphinx-version">
-Created using <a href="http://sphinx-doc.org/">Sphinx</a> 7.2.5.<br>
+Created using <a href="http://sphinx-doc.org/">Sphinx</a> 7.2.6.<br>
</p>
</div>
diff --git a/user-guide/dataframe.html b/user-guide/dataframe.html
index 27898e5e8e..51339846b6 100644
--- a/user-guide/dataframe.html
+++ b/user-guide/dataframe.html
@@ -608,7 +608,7 @@ execution. The plan is evaluated (executed) when an action method is invoked, su
<div class="footer-item">
<p class="sphinx-version">
-Created using <a href="http://sphinx-doc.org/">Sphinx</a> 7.2.5.<br>
+Created using <a href="http://sphinx-doc.org/">Sphinx</a> 7.2.6.<br>
</p>
</div>
diff --git a/user-guide/example-usage.html b/user-guide/example-usage.html
index 2c0032332c..f617e47879 100644
--- a/user-guide/example-usage.html
+++ b/user-guide/example-usage.html
@@ -694,7 +694,7 @@ with <code class="docutils literal notranslate"><span class="pre">native</span><
<div class="footer-item">
<p class="sphinx-version">
-Created using <a href="http://sphinx-doc.org/">Sphinx</a> 7.2.5.<br>
+Created using <a href="http://sphinx-doc.org/">Sphinx</a> 7.2.6.<br>
</p>
</div>
diff --git a/user-guide/expressions.html b/user-guide/expressions.html
index 0f588849d5..c13b9d1c02 100644
--- a/user-guide/expressions.html
+++ b/user-guide/expressions.html
@@ -1215,7 +1215,7 @@ expressions such as <code class="docutils literal notranslate"><span class="pre"
<div class="footer-item">
<p class="sphinx-version">
-Created using <a href="http://sphinx-doc.org/">Sphinx</a> 7.2.5.<br>
+Created using <a href="http://sphinx-doc.org/">Sphinx</a> 7.2.6.<br>
</p>
</div>
diff --git a/user-guide/faq.html b/user-guide/faq.html
index 8342ce45d2..086d7aeb0a 100644
--- a/user-guide/faq.html
+++ b/user-guide/faq.html
@@ -499,7 +499,7 @@ targets end-users rather than developers of other database systems.</p></li>
<div class="footer-item">
<p class="sphinx-version">
-Created using <a href="http://sphinx-doc.org/">Sphinx</a> 7.2.5.<br>
+Created using <a href="http://sphinx-doc.org/">Sphinx</a> 7.2.6.<br>
</p>
</div>
diff --git a/user-guide/introduction.html b/user-guide/introduction.html
index 49eba37c1f..26290b0aff 100644
--- a/user-guide/introduction.html
+++ b/user-guide/introduction.html
@@ -608,7 +608,7 @@ provide integrations with other systems, some of which are described below:</p>
<div class="footer-item">
<p class="sphinx-version">
-Created using <a href="http://sphinx-doc.org/">Sphinx</a> 7.2.5.<br>
+Created using <a href="http://sphinx-doc.org/">Sphinx</a> 7.2.6.<br>
</p>
</div>
diff --git a/user-guide/sql/aggregate_functions.html b/user-guide/sql/aggregate_functions.html
index b27b2bf4a4..1e07a1f65b 100644
--- a/user-guide/sql/aggregate_functions.html
+++ b/user-guide/sql/aggregate_functions.html
@@ -1686,7 +1686,7 @@ Can be a constant, column, or function, and any combination of arithmetic operat
<div class="footer-item">
<p class="sphinx-version">
-Created using <a href="http://sphinx-doc.org/">Sphinx</a> 7.2.5.<br>
+Created using <a href="http://sphinx-doc.org/">Sphinx</a> 7.2.6.<br>
</p>
</div>
diff --git a/user-guide/sql/data_types.html b/user-guide/sql/data_types.html
index c9c4e6bb55..9086541360 100644
--- a/user-guide/sql/data_types.html
+++ b/user-guide/sql/data_types.html
@@ -760,7 +760,7 @@ For example, to cast the output of <code class="docutils literal notranslate"><s
<div class="footer-item">
<p class="sphinx-version">
-Created using <a href="http://sphinx-doc.org/">Sphinx</a> 7.2.5.<br>
+Created using <a href="http://sphinx-doc.org/">Sphinx</a> 7.2.6.<br>
</p>
</div>
diff --git a/user-guide/sql/ddl.html b/user-guide/sql/ddl.html
index c221f9a1cc..0deba412a0 100644
--- a/user-guide/sql/ddl.html
+++ b/user-guide/sql/ddl.html
@@ -703,7 +703,7 @@ DROP VIEW [ IF EXISTS ] <b><i>view_name</i></b>;
<div class="footer-item">
<p class="sphinx-version">
-Created using <a href="http://sphinx-doc.org/">Sphinx</a> 7.2.5.<br>
+Created using <a href="http://sphinx-doc.org/">Sphinx</a> 7.2.6.<br>
</p>
</div>
diff --git a/user-guide/sql/dml.html b/user-guide/sql/dml.html
index 97b6b02656..2b0672d9a2 100644
--- a/user-guide/sql/dml.html
+++ b/user-guide/sql/dml.html
@@ -502,7 +502,7 @@ INSERT INTO <i><b>table_name</i></b> { VALUES ( <i><b>expression</i></b> [, ...]
<div class="footer-item">
<p class="sphinx-version">
-Created using <a href="http://sphinx-doc.org/">Sphinx</a> 7.2.5.<br>
+Created using <a href="http://sphinx-doc.org/">Sphinx</a> 7.2.6.<br>
</p>
</div>
diff --git a/user-guide/sql/explain.html b/user-guide/sql/explain.html
index 5842b4721a..03b9b65e83 100644
--- a/user-guide/sql/explain.html
+++ b/user-guide/sql/explain.html
@@ -492,7 +492,7 @@ If you need more information output, use <code class="docutils literal notransla
<div class="footer-item">
<p class="sphinx-version">
-Created using <a href="http://sphinx-doc.org/">Sphinx</a> 7.2.5.<br>
+Created using <a href="http://sphinx-doc.org/">Sphinx</a> 7.2.6.<br>
</p>
</div>
diff --git a/user-guide/sql/index.html b/user-guide/sql/index.html
index 2566710a9c..6909fef286 100644
--- a/user-guide/sql/index.html
+++ b/user-guide/sql/index.html
@@ -515,7 +515,7 @@
<div class="footer-item">
<p class="sphinx-version">
-Created using <a href="http://sphinx-doc.org/">Sphinx</a> 7.2.5.<br>
+Created using <a href="http://sphinx-doc.org/">Sphinx</a> 7.2.6.<br>
</p>
</div>
diff --git a/user-guide/sql/information_schema.html b/user-guide/sql/information_schema.html
index b20368bbe8..72fab283fb 100644
--- a/user-guide/sql/information_schema.html
+++ b/user-guide/sql/information_schema.html
@@ -473,7 +473,7 @@ views of the ISO SQL <code class="docutils literal notranslate"><span class="pre
<div class="footer-item">
<p class="sphinx-version">
-Created using <a href="http://sphinx-doc.org/">Sphinx</a> 7.2.5.<br>
+Created using <a href="http://sphinx-doc.org/">Sphinx</a> 7.2.6.<br>
</p>
</div>
diff --git a/user-guide/sql/operators.html b/user-guide/sql/operators.html
index 816b43e582..b103456927 100644
--- a/user-guide/sql/operators.html
+++ b/user-guide/sql/operators.html
@@ -1104,7 +1104,7 @@
<div class="footer-item">
<p class="sphinx-version">
-Created using <a href="http://sphinx-doc.org/">Sphinx</a> 7.2.5.<br>
+Created using <a href="http://sphinx-doc.org/">Sphinx</a> 7.2.6.<br>
</p>
</div>
diff --git a/user-guide/sql/scalar_functions.html b/user-guide/sql/scalar_functions.html
index 659905ddd5..b556905ffa 100644
--- a/user-guide/sql/scalar_functions.html
+++ b/user-guide/sql/scalar_functions.html
@@ -5614,7 +5614,7 @@ string operators.</p></li>
<div class="footer-item">
<p class="sphinx-version">
-Created using <a href="http://sphinx-doc.org/">Sphinx</a> 7.2.5.<br>
+Created using <a href="http://sphinx-doc.org/">Sphinx</a> 7.2.6.<br>
</p>
</div>
diff --git a/user-guide/sql/select.html b/user-guide/sql/select.html
index 49f3aeb27f..80b14d17c8 100644
--- a/user-guide/sql/select.html
+++ b/user-guide/sql/select.html
@@ -737,7 +737,7 @@ This order can be changed to descending by adding <code class="docutils literal
<div class="footer-item">
<p class="sphinx-version">
-Created using <a href="http://sphinx-doc.org/">Sphinx</a> 7.2.5.<br>
+Created using <a href="http://sphinx-doc.org/">Sphinx</a> 7.2.6.<br>
</p>
</div>
diff --git a/user-guide/sql/sql_status.html b/user-guide/sql/sql_status.html
index a3863f56dd..e632550f77 100644
--- a/user-guide/sql/sql_status.html
+++ b/user-guide/sql/sql_status.html
@@ -562,7 +562,7 @@ trait, DataFusion includes built in support for the following formats:</p>
<div class="footer-item">
<p class="sphinx-version">
-Created using <a href="http://sphinx-doc.org/">Sphinx</a> 7.2.5.<br>
+Created using <a href="http://sphinx-doc.org/">Sphinx</a> 7.2.6.<br>
</p>
</div>
diff --git a/user-guide/sql/subqueries.html b/user-guide/sql/subqueries.html
index 1088ca7c8f..272edf756e 100644
--- a/user-guide/sql/subqueries.html
+++ b/user-guide/sql/subqueries.html
@@ -530,7 +530,7 @@ is an example of a filter using a scalar subquery. Only correlated subqueries ar
<div class="footer-item">
<p class="sphinx-version">
-Created using <a href="http://sphinx-doc.org/">Sphinx</a> 7.2.5.<br>
+Created using <a href="http://sphinx-doc.org/">Sphinx</a> 7.2.6.<br>
</p>
</div>
diff --git a/user-guide/sql/window_functions.html b/user-guide/sql/window_functions.html
index 43aed7adf0..75b2a96074 100644
--- a/user-guide/sql/window_functions.html
+++ b/user-guide/sql/window_functions.html
@@ -841,7 +841,7 @@
<div class="footer-item">
<p class="sphinx-version">
-Created using <a href="http://sphinx-doc.org/">Sphinx</a> 7.2.5.<br>
+Created using <a href="http://sphinx-doc.org/">Sphinx</a> 7.2.6.<br>
</p>
</div>
diff --git a/user-guide/sql/write_options.html b/user-guide/sql/write_options.html
index 2ccc8f75d2..e82177691a 100644
--- a/user-guide/sql/write_options.html
+++ b/user-guide/sql/write_options.html
@@ -702,7 +702,7 @@
<div class="footer-item">
<p class="sphinx-version">
-Created using <a href="http://sphinx-doc.org/">Sphinx</a> 7.2.5.<br>
+Created using <a href="http://sphinx-doc.org/">Sphinx</a> 7.2.6.<br>
</p>
</div>