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">&lt;</span><span class="nb">String</span><span class="p">,</span><span class="w"> </span><span class="n">Arc</span><span class="o">&lt;</span><span class="k">dyn</span><span class="w"> </span><span class="n">CatalogProvider</span><span class="o">&gt;&gt;</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">&lt;</span><span class="nb">String</span><span class="p">,</span><span class="w"> </span><span class="n">Arc</span><span class="o">&lt;</span><span class="k">dyn</span><span class="w"> </span><span class="n">SchemaProvider</span><span class="o">&gt;&gt;</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">&lt;</span><span class="nb">String</span><span class="p">,</span><span class="w"> </span><span class="n">Arc</span><span class="o">&lt;</span><span class="k">dyn</span><span class="w"> </span><span class="n">CatalogProvider</span><span class="o">&gt;&gt;</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">&amp;</span><span class="bp">self</span><span class="p">)</span><span class="w"> </span>-&gt; <span class="kp">&amp;</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">&amp;</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">&lt;</span><span class="k">dyn</span><span class="w"> </span><span class="n">CatalogProvider</span><span class="o">&gt;</span><span class="p">,</span>
+<span class="w">    </span><span class="p">)</span><span class="w"> </span>-&gt; <span class="nb">Option</span><span class="o">&lt;</span><span class="n">Arc</span><span class="o">&lt;</span><span class="k">dyn</span><span class="w"> </span><span class="n">CatalogProvider</span><span class="o">&gt;&gt;</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">&amp;</span><span class="bp">self</span><span class="p">)</span><span class="w"> </span>-&gt; <span class="nb">Vec</span><span class="o">&lt;</span><span class="nb">String</span><span class="o">&gt;</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">&amp;</span><span class="bp">self</span><span class="p">,</span><span class="w"> </span><span class="n">name</span>: <span class="kp">&amp;</span><span class="kt">str</span><span class="p">)</span><span class="w"> </span>-&gt; <span class="nb">Option</span><span class="o">&lt;</span><span class="n">Arc</span><span class="o">&lt;</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>