You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@datafusion.apache.org by gi...@apache.org on 2026/05/19 22:06:00 UTC

(datafusion-java) branch asf-site updated: Publish built docs triggered by 89d5496d2d1f008f6c1fe38d1dc75414fb986f64

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-java.git


The following commit(s) were added to refs/heads/asf-site by this push:
     new 498944b  Publish built docs triggered by 89d5496d2d1f008f6c1fe38d1dc75414fb986f64
498944b is described below

commit 498944b3eeba3fd9c4f721c246696449818249bb
Author: github-actions[bot] <gi...@users.noreply.github.com>
AuthorDate: Tue May 19 22:05:54 2026 +0000

    Publish built docs triggered by 89d5496d2d1f008f6c1fe38d1dc75414fb986f64
---
 .doctrees/environment.pickle                       | Bin 48209 -> 51646 bytes
 .doctrees/user-guide/index.doctree                 | Bin 7305 -> 7338 bytes
 .doctrees/user-guide/table-provider.doctree        | Bin 0 -> 20129 bytes
 _sources/user-guide/index.md.txt                   |   1 +
 _sources/user-guide/table-provider.md.txt          | 118 ++++++++++++++
 api/allclasses-index.html                          |  89 ++++++----
 api/allpackages-index.html                         |   4 +-
 api/help-doc.html                                  |   4 +-
 api/index-all.html                                 | 138 +++++++++++++++-
 api/index.html                                     |   4 +-
 api/member-search-index.js                         |   2 +-
 api/org/apache/datafusion/ArrowReadOptions.html    |   4 +-
 ...{ArrowReadOptions.html => AvroReadOptions.html} |  45 +++---
 api/org/apache/datafusion/ColumnarValue.Array.html |   4 +-
 .../apache/datafusion/ColumnarValue.Scalar.html    |   4 +-
 api/org/apache/datafusion/ColumnarValue.html       |   4 +-
 api/org/apache/datafusion/CsvReadOptions.html      |   4 +-
 .../{CsvReadOptions.html => CsvWriteOptions.html}  | 180 +++++++++++----------
 api/org/apache/datafusion/DataFrame.html           | 178 +++++++++++++++-----
 api/org/apache/datafusion/FileCompressionType.html |   4 +-
 ...dJsonReadOptions.html => JsonWriteOptions.html} |  97 ++++++-----
 api/org/apache/datafusion/NativeLibraryLoader.html |   4 +-
 api/org/apache/datafusion/NdJsonReadOptions.html   |   4 +-
 api/org/apache/datafusion/ParquetReadOptions.html  |   4 +-
 api/org/apache/datafusion/ParquetWriteOptions.html |   4 +-
 api/org/apache/datafusion/ScalarFunction.html      |   4 +-
 api/org/apache/datafusion/ScalarFunctionArgs.html  |   4 +-
 api/org/apache/datafusion/ScalarUdf.html           |   4 +-
 api/org/apache/datafusion/SessionContext.html      | 115 +++++++++++--
 .../apache/datafusion/SessionContextBuilder.html   |   4 +-
 ...tWriteOptions.html => SimpleTableProvider.html} | 101 +++++++-----
 api/org/apache/datafusion/TableProvider.html       | 169 +++++++++++++++++++
 api/org/apache/datafusion/UnnestOptions.html       |   4 +-
 api/org/apache/datafusion/Volatility.html          |   4 +-
 .../datafusion/class-use/ArrowReadOptions.html     |   4 +-
 ...{ArrowReadOptions.html => AvroReadOptions.html} |  41 +++--
 .../datafusion/class-use/ColumnarValue.Array.html  |   4 +-
 .../datafusion/class-use/ColumnarValue.Scalar.html |   4 +-
 .../apache/datafusion/class-use/ColumnarValue.html |   4 +-
 .../datafusion/class-use/CsvReadOptions.html       |   4 +-
 .../datafusion/class-use/CsvWriteOptions.html      | 136 ++++++++++++++++
 api/org/apache/datafusion/class-use/DataFrame.html |  15 +-
 .../datafusion/class-use/FileCompressionType.html  |  14 +-
 ...quetWriteOptions.html => JsonWriteOptions.html} |  41 ++---
 .../datafusion/class-use/NativeLibraryLoader.html  |   4 +-
 .../datafusion/class-use/NdJsonReadOptions.html    |   4 +-
 .../datafusion/class-use/ParquetReadOptions.html   |   4 +-
 .../datafusion/class-use/ParquetWriteOptions.html  |   4 +-
 .../datafusion/class-use/ScalarFunction.html       |   4 +-
 .../datafusion/class-use/ScalarFunctionArgs.html   |   4 +-
 api/org/apache/datafusion/class-use/ScalarUdf.html |   4 +-
 .../datafusion/class-use/SessionContext.html       |   4 +-
 .../class-use/SessionContextBuilder.html           |   4 +-
 ...LibraryLoader.html => SimpleTableProvider.html} |  14 +-
 .../{ScalarFunction.html => TableProvider.html}    |  67 +++-----
 .../apache/datafusion/class-use/UnnestOptions.html |   4 +-
 .../apache/datafusion/class-use/Volatility.html    |   4 +-
 api/org/apache/datafusion/internal/JniBridge.html  |  26 ++-
 .../datafusion/internal/class-use/JniBridge.html   |   4 +-
 .../datafusion/internal/package-summary.html       |   4 +-
 .../apache/datafusion/internal/package-tree.html   |   4 +-
 .../apache/datafusion/internal/package-use.html    |   4 +-
 api/org/apache/datafusion/package-summary.html     |  85 ++++++----
 api/org/apache/datafusion/package-tree.html        |   9 +-
 api/org/apache/datafusion/package-use.html         |  60 ++++---
 .../apache/datafusion/proto/SchemaConverter.html   |   4 +-
 .../proto/class-use/SchemaConverter.html           |   4 +-
 .../apache/datafusion/proto/package-summary.html   |   4 +-
 api/org/apache/datafusion/proto/package-tree.html  |   4 +-
 api/org/apache/datafusion/proto/package-use.html   |   4 +-
 api/overview-summary.html                          |   4 +-
 api/overview-tree.html                             |   9 +-
 api/type-search-index.js                           |   2 +-
 objects.inv                                        | Bin 553 -> 577 bytes
 searchindex.js                                     |   2 +-
 user-guide/api-reference.html                      |   7 +-
 user-guide/dataframe.html                          |   1 +
 user-guide/index.html                              |   2 +
 user-guide/installation.html                       |   1 +
 user-guide/parquet.html                            |   1 +
 user-guide/proto-plans.html                        |   1 +
 user-guide/quickstart.html                         |   1 +
 user-guide/scalar-udf.html                         |   7 +-
 user-guide/sessioncontext.html                     |   1 +
 .../{quickstart.html => table-provider.html}       | 158 ++++++++++++------
 85 files changed, 1545 insertions(+), 569 deletions(-)

diff --git a/.doctrees/environment.pickle b/.doctrees/environment.pickle
index 7e04775..138a357 100644
Binary files a/.doctrees/environment.pickle and b/.doctrees/environment.pickle differ
diff --git a/.doctrees/user-guide/index.doctree b/.doctrees/user-guide/index.doctree
index 0225657..19d493e 100644
Binary files a/.doctrees/user-guide/index.doctree and b/.doctrees/user-guide/index.doctree differ
diff --git a/.doctrees/user-guide/table-provider.doctree b/.doctrees/user-guide/table-provider.doctree
new file mode 100644
index 0000000..473a098
Binary files /dev/null and b/.doctrees/user-guide/table-provider.doctree differ
diff --git a/_sources/user-guide/index.md.txt b/_sources/user-guide/index.md.txt
index 599340c..85c2bed 100644
--- a/_sources/user-guide/index.md.txt
+++ b/_sources/user-guide/index.md.txt
@@ -38,6 +38,7 @@ dataframe
 parquet
 proto-plans
 scalar-udf
+table-provider
 api-reference
 ```
 
diff --git a/_sources/user-guide/table-provider.md.txt b/_sources/user-guide/table-provider.md.txt
new file mode 100644
index 0000000..7eed07d
--- /dev/null
+++ b/_sources/user-guide/table-provider.md.txt
@@ -0,0 +1,118 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+# Java table providers
+
+`SessionContext.registerTable(name, provider)` registers a Java-implemented
+table. SQL queries that reference `name` call back into your `TableProvider`
+to fetch batches. Data flows from Java to native code via the Arrow C Data
+Interface, so there are no extra copies in the hot path. This is the Java
+counterpart to DataFusion's Rust `SessionContext::register_table`.
+
+## Implement
+
+```java
+import org.apache.arrow.memory.BufferAllocator;
+import org.apache.arrow.vector.ipc.ArrowReader;
+import org.apache.arrow.vector.types.pojo.Schema;
+import org.apache.datafusion.TableProvider;
+
+public final class MyTable implements TableProvider {
+    private final Schema schema;
+
+    public MyTable(Schema schema) {
+        this.schema = schema;
+    }
+
+    @Override public Schema schema() { return schema; }
+
+    @Override
+    public ArrowReader scan(BufferAllocator allocator) {
+        // Return a fresh ArrowReader. The reader must allocate its buffers
+        // from `allocator` (or a child of it) — the framework needs the
+        // allocator hierarchy to share a root.
+        return openMyReader(allocator);
+    }
+}
+```
+
+For the common case of "I have a schema and a function that returns an
+`ArrowReader`," `SimpleTableProvider` packages those two into a ready-made
+`TableProvider` without having to subclass:
+
+```java
+TableProvider t = new SimpleTableProvider(mySchema(), allocator -> openMyReader(allocator));
+ctx.registerTable("t", t);
+```
+
+## Register and query
+
+```java
+try (SessionContext ctx = new SessionContext();
+     BufferAllocator allocator = new RootAllocator()) {
+    ctx.registerTable("t", new MyTable(mySchema()));
+
+    try (DataFrame df = ctx.sql("SELECT * FROM t WHERE x > 10");
+         ArrowReader r = df.collect(allocator)) {
+        while (r.loadNextBatch()) {
+            // ...
+        }
+    }
+}
+```
+
+## Contract
+
+- `schema()` is called exactly once, on the caller's thread, at registration
+  time. Throwing from it aborts registration with the original exception.
+- `scan(allocator)` is called once per SQL query that touches the table, on a
+  worker thread. It must return a fresh, independent `ArrowReader` on every
+  call — this is what makes self-joins and `UNION ALL` over the same table
+  work.
+- The reader returned by `scan` must allocate its buffers from the supplied
+  `allocator` (or a child of it). Arrow Java's `Data.exportArrayStream`
+  requires the reader's allocator and the export allocator to share a root.
+- The returned reader's schema must equal the schema returned by `schema()`.
+  A mismatch fails the query.
+- You do not need to close the returned reader yourself. The framework
+  installs a release callback that closes it when the underlying FFI stream
+  is dropped.
+
+## Errors
+
+Exceptions thrown from `scan()` or from the returned reader surface in the
+`RuntimeException` raised by `collect()`. The error message includes the Java
+exception class and `getMessage()`, in the same format used for scalar UDF
+errors.
+
+## Threading
+
+`SessionContext` is single-threaded, but `scan(allocator)` may be invoked from
+any DataFusion worker thread. If your implementation maintains mutable state
+across scans, synchronise it.
+
+## Limitations (v1)
+
+- Single-partition scans only. DataFusion sees the table as one partition;
+  multi-partition parallelism is a follow-up.
+- No projection or filter pushdown. DataFusion applies projection and
+  filters on top of the batches you return; the Java side always sees the
+  full schema. The interface is intentionally minimal so it can grow these
+  capabilities (as default methods) without breaking existing implementations.
+- No `deregisterTable`. Tables live until the `SessionContext` is closed.
diff --git a/api/allclasses-index.html b/api/allclasses-index.html
index 6279c98..a0a8054 100644
--- a/api/allclasses-index.html
+++ b/api/allclasses-index.html
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML>
 <html lang>
 <head>
-<!-- Generated by javadoc (17) on Mon May 18 17:40:42 UTC 2026 -->
+<!-- Generated by javadoc (17) on Tue May 19 22:05:47 UTC 2026 -->
 <title>All Classes and Interfaces (Apache DataFusion Java 0.1.0-SNAPSHOT)</title>
 <meta name="viewport" content="width=device-width, initial-scale=1">
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<meta name="dc.created" content="2026-05-18">
+<meta name="dc.created" content="2026-05-19">
 <meta name="description" content="class index">
 <meta name="generator" content="javadoc/AllClassesIndexWriter">
 <link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
@@ -65,23 +65,31 @@ loadScripts(document, 'script');</script>
 <div class="col-last even-row-color all-classes-table all-classes-table-tab2">
 <div class="block">Configuration knobs for Arrow IPC sources passed to <a href="org/apache/datafusion/SessionContext.html#registerArrow(java.lang.String,java.lang.String,org.apache.datafusion.ArrowReadOptions)"><code>SessionContext.registerArrow(String, String, ArrowReadOptions)</code></a> and <a href="org/apache/datafusion/SessionContext.html#readArrow(java.lang.String,org.apache.datafusion.ArrowReadOptions)"><code>SessionContext.readArrow(String, ArrowReadOptions)</code></a>.</div>
 </div>
-<div class="col-first odd-row-color all-classes-table all-classes-table-tab1"><a href="org/apache/datafusion/ColumnarValue.html" title="interface in org.apache.datafusion">ColumnarValue</a></div>
-<div class="col-last odd-row-color all-classes-table all-classes-table-tab1">
+<div class="col-first odd-row-color all-classes-table all-classes-table-tab2"><a href="org/apache/datafusion/AvroReadOptions.html" title="class in org.apache.datafusion">AvroReadOptions</a></div>
+<div class="col-last odd-row-color all-classes-table all-classes-table-tab2">
+<div class="block">Configuration knobs for Avro sources passed to <a href="org/apache/datafusion/SessionContext.html#registerAvro(java.lang.String,java.lang.String,org.apache.datafusion.AvroReadOptions)"><code>SessionContext.registerAvro(String, String, AvroReadOptions)</code></a> and <a href="org/apache/datafusion/SessionContext.html#readAvro(java.lang.String,org.apache.datafusion.AvroReadOptions)"><code>SessionContext.readAvro(String, AvroReadOptions)</code></a>.</div>
+</div>
+<div class="col-first even-row-color all-classes-table all-classes-table-tab1"><a href="org/apache/datafusion/ColumnarValue.html" title="interface in org.apache.datafusion">ColumnarValue</a></div>
+<div class="col-last even-row-color all-classes-table all-classes-table-tab1">
 <div class="block">The value of a scalar UDF argument or result: either a per-row <a href="org/apache/datafusion/ColumnarValue.Array.html" title="class in org.apache.datafusion"><code>ColumnarValue.Array</code></a> of length <code>
  rowCount</code>, or a <a href="org/apache/datafusion/ColumnarValue.Scalar.html" title="class in org.apache.datafusion"><code>ColumnarValue.Scalar</code></a> (length-1 vector) that the framework broadcasts.</div>
 </div>
-<div class="col-first even-row-color all-classes-table all-classes-table-tab4"><a href="org/apache/datafusion/ColumnarValue.Array.html" title="class in org.apache.datafusion">ColumnarValue.Array</a></div>
-<div class="col-last even-row-color all-classes-table all-classes-table-tab4">
+<div class="col-first odd-row-color all-classes-table all-classes-table-tab4"><a href="org/apache/datafusion/ColumnarValue.Array.html" title="class in org.apache.datafusion">ColumnarValue.Array</a></div>
+<div class="col-last odd-row-color all-classes-table all-classes-table-tab4">
 <div class="block">Per-row Arrow vector of length equal to the batch row count.</div>
 </div>
-<div class="col-first odd-row-color all-classes-table all-classes-table-tab4"><a href="org/apache/datafusion/ColumnarValue.Scalar.html" title="class in org.apache.datafusion">ColumnarValue.Scalar</a></div>
-<div class="col-last odd-row-color all-classes-table all-classes-table-tab4">
+<div class="col-first even-row-color all-classes-table all-classes-table-tab4"><a href="org/apache/datafusion/ColumnarValue.Scalar.html" title="class in org.apache.datafusion">ColumnarValue.Scalar</a></div>
+<div class="col-last even-row-color all-classes-table all-classes-table-tab4">
 <div class="block">Length-1 Arrow vector representing a single value broadcast across all rows.</div>
 </div>
-<div class="col-first even-row-color all-classes-table all-classes-table-tab2"><a href="org/apache/datafusion/CsvReadOptions.html" title="class in org.apache.datafusion">CsvReadOptions</a></div>
-<div class="col-last even-row-color all-classes-table all-classes-table-tab2">
+<div class="col-first odd-row-color all-classes-table all-classes-table-tab2"><a href="org/apache/datafusion/CsvReadOptions.html" title="class in org.apache.datafusion">CsvReadOptions</a></div>
+<div class="col-last odd-row-color all-classes-table all-classes-table-tab2">
 <div class="block">Configuration knobs for CSV sources passed to <a href="org/apache/datafusion/SessionContext.html#registerCsv(java.lang.String,java.lang.String,org.apache.datafusion.CsvReadOptions)"><code>SessionContext.registerCsv(String, String, CsvReadOptions)</code></a> and <a href="org/apache/datafusion/SessionContext.html#readCsv(java.lang.String,org.apache.datafusion.CsvReadOptions)"><code>SessionContext.readCsv(String, CsvReadOptions)</code></a>.</div>
 </div>
+<div class="col-first even-row-color all-classes-table all-classes-table-tab2"><a href="org/apache/datafusion/CsvWriteOptions.html" title="class in org.apache.datafusion">CsvWriteOptions</a></div>
+<div class="col-last even-row-color all-classes-table all-classes-table-tab2">
+<div class="block">Configuration knobs for writing CSV, passed to <a href="org/apache/datafusion/DataFrame.html#writeCsv(java.lang.String,org.apache.datafusion.CsvWriteOptions)"><code>DataFrame.writeCsv(String, CsvWriteOptions)</code></a>.</div>
+</div>
 <div class="col-first odd-row-color all-classes-table all-classes-table-tab2"><a href="org/apache/datafusion/DataFrame.html" title="class in org.apache.datafusion">DataFrame</a></div>
 <div class="col-last odd-row-color all-classes-table all-classes-table-tab2">
 <div class="block">A lazy representation of a query plan, mirroring the Rust DataFusion <code>DataFrame</code>.</div>
@@ -94,54 +102,67 @@ loadScripts(document, 'script');</script>
 <div class="col-last odd-row-color all-classes-table all-classes-table-tab2">
 <div class="block">Internal trampoline invoked from native code on every UDF call.</div>
 </div>
-<div class="col-first even-row-color all-classes-table all-classes-table-tab2"><a href="org/apache/datafusion/NativeLibraryLoader.html" title="class in org.apache.datafusion">NativeLibraryLoader</a></div>
-<div class="col-last even-row-color all-classes-table all-classes-table-tab2">&nbsp;</div>
-<div class="col-first odd-row-color all-classes-table all-classes-table-tab2"><a href="org/apache/datafusion/NdJsonReadOptions.html" title="class in org.apache.datafusion">NdJsonReadOptions</a></div>
-<div class="col-last odd-row-color all-classes-table all-classes-table-tab2">
-<div class="block">Configuration knobs for newline-delimited JSON sources passed to <a href="org/apache/datafusion/SessionContext.html#registerJson(java.lang.String,java.lang.String,org.apache.datafusion.NdJsonReadOptions)"><code>SessionContext.registerJson(String, String, NdJsonReadOptions)</code></a> and <a href="org/apache/datafusion/SessionContext.html#readJson(java.lang.String,org.apache.datafusion.NdJsonReadOptions)"><code>SessionContext.readJson(String, NdJsonReadOptions)</code></ [...]
+<div class="col-first even-row-color all-classes-table all-classes-table-tab2"><a href="org/apache/datafusion/JsonWriteOptions.html" title="class in org.apache.datafusion">JsonWriteOptions</a></div>
+<div class="col-last even-row-color all-classes-table all-classes-table-tab2">
+<div class="block">Configuration knobs for writing JSON, passed to <a href="org/apache/datafusion/DataFrame.html#writeJson(java.lang.String,org.apache.datafusion.JsonWriteOptions)"><code>DataFrame.writeJson(String, JsonWriteOptions)</code></a>.</div>
 </div>
-<div class="col-first even-row-color all-classes-table all-classes-table-tab2"><a href="org/apache/datafusion/ParquetReadOptions.html" title="class in org.apache.datafusion">ParquetReadOptions</a></div>
+<div class="col-first odd-row-color all-classes-table all-classes-table-tab2"><a href="org/apache/datafusion/NativeLibraryLoader.html" title="class in org.apache.datafusion">NativeLibraryLoader</a></div>
+<div class="col-last odd-row-color all-classes-table all-classes-table-tab2">&nbsp;</div>
+<div class="col-first even-row-color all-classes-table all-classes-table-tab2"><a href="org/apache/datafusion/NdJsonReadOptions.html" title="class in org.apache.datafusion">NdJsonReadOptions</a></div>
 <div class="col-last even-row-color all-classes-table all-classes-table-tab2">
-<div class="block">Configuration knobs for parquet sources passed to <a href="org/apache/datafusion/SessionContext.html#registerParquet(java.lang.String,java.lang.String,org.apache.datafusion.ParquetReadOptions)"><code>SessionContext.registerParquet(String, String, ParquetReadOptions)</code></a> and <a href="org/apache/datafusion/SessionContext.html#readParquet(java.lang.String,org.apache.datafusion.ParquetReadOptions)"><code>SessionContext.readParquet(String, ParquetReadOptions)</code>< [...]
+<div class="block">Configuration knobs for newline-delimited JSON sources passed to <a href="org/apache/datafusion/SessionContext.html#registerJson(java.lang.String,java.lang.String,org.apache.datafusion.NdJsonReadOptions)"><code>SessionContext.registerJson(String, String, NdJsonReadOptions)</code></a> and <a href="org/apache/datafusion/SessionContext.html#readJson(java.lang.String,org.apache.datafusion.NdJsonReadOptions)"><code>SessionContext.readJson(String, NdJsonReadOptions)</code></ [...]
 </div>
-<div class="col-first odd-row-color all-classes-table all-classes-table-tab2"><a href="org/apache/datafusion/ParquetWriteOptions.html" title="class in org.apache.datafusion">ParquetWriteOptions</a></div>
+<div class="col-first odd-row-color all-classes-table all-classes-table-tab2"><a href="org/apache/datafusion/ParquetReadOptions.html" title="class in org.apache.datafusion">ParquetReadOptions</a></div>
 <div class="col-last odd-row-color all-classes-table all-classes-table-tab2">
+<div class="block">Configuration knobs for parquet sources passed to <a href="org/apache/datafusion/SessionContext.html#registerParquet(java.lang.String,java.lang.String,org.apache.datafusion.ParquetReadOptions)"><code>SessionContext.registerParquet(String, String, ParquetReadOptions)</code></a> and <a href="org/apache/datafusion/SessionContext.html#readParquet(java.lang.String,org.apache.datafusion.ParquetReadOptions)"><code>SessionContext.readParquet(String, ParquetReadOptions)</code>< [...]
+</div>
+<div class="col-first even-row-color all-classes-table all-classes-table-tab2"><a href="org/apache/datafusion/ParquetWriteOptions.html" title="class in org.apache.datafusion">ParquetWriteOptions</a></div>
+<div class="col-last even-row-color all-classes-table all-classes-table-tab2">
 <div class="block">Configuration knobs for writing parquet, passed to <a href="org/apache/datafusion/DataFrame.html#writeParquet(java.lang.String,org.apache.datafusion.ParquetWriteOptions)"><code>DataFrame.writeParquet(String, ParquetWriteOptions)</code></a>.</div>
 </div>
-<div class="col-first even-row-color all-classes-table all-classes-table-tab1"><a href="org/apache/datafusion/ScalarFunction.html" title="interface in org.apache.datafusion">ScalarFunction</a></div>
-<div class="col-last even-row-color all-classes-table all-classes-table-tab1">
+<div class="col-first odd-row-color all-classes-table all-classes-table-tab1"><a href="org/apache/datafusion/ScalarFunction.html" title="interface in org.apache.datafusion">ScalarFunction</a></div>
+<div class="col-last odd-row-color all-classes-table all-classes-table-tab1">
 <div class="block">A Java-implemented scalar SQL function.</div>
 </div>
-<div class="col-first odd-row-color all-classes-table all-classes-table-tab4"><a href="org/apache/datafusion/ScalarFunctionArgs.html" title="class in org.apache.datafusion">ScalarFunctionArgs</a></div>
-<div class="col-last odd-row-color all-classes-table all-classes-table-tab4">
+<div class="col-first even-row-color all-classes-table all-classes-table-tab4"><a href="org/apache/datafusion/ScalarFunctionArgs.html" title="class in org.apache.datafusion">ScalarFunctionArgs</a></div>
+<div class="col-last even-row-color all-classes-table all-classes-table-tab4">
 <div class="block">Bundle of inputs passed to <a href="org/apache/datafusion/ScalarFunction.html#evaluate(org.apache.arrow.memory.BufferAllocator,org.apache.datafusion.ScalarFunctionArgs)"><code>ScalarFunction.evaluate(org.apache.arrow.memory.BufferAllocator, org.apache.datafusion.ScalarFunctionArgs)</code></a>: the per-arg <a href="org/apache/datafusion/ColumnarValue.html" title="interface in org.apache.datafusion"><code>ColumnarValue</code></a>s
  (in declared order) and the batch row count DataFusion is driving.</div>
 </div>
-<div class="col-first even-row-color all-classes-table all-classes-table-tab2"><a href="org/apache/datafusion/ScalarUdf.html" title="class in org.apache.datafusion">ScalarUdf</a></div>
-<div class="col-last even-row-color all-classes-table all-classes-table-tab2">
+<div class="col-first odd-row-color all-classes-table all-classes-table-tab2"><a href="org/apache/datafusion/ScalarUdf.html" title="class in org.apache.datafusion">ScalarUdf</a></div>
+<div class="col-last odd-row-color all-classes-table all-classes-table-tab2">
 <div class="block">A scalar UDF registration handle: pairs a <a href="org/apache/datafusion/ScalarFunction.html" title="interface in org.apache.datafusion"><code>ScalarFunction</code></a> implementation with the metadata
  DataFusion needs to dispatch SQL calls to it.</div>
 </div>
-<div class="col-first odd-row-color all-classes-table all-classes-table-tab2"><a href="org/apache/datafusion/proto/SchemaConverter.html" title="class in org.apache.datafusion.proto">SchemaConverter</a></div>
-<div class="col-last odd-row-color all-classes-table all-classes-table-tab2">
+<div class="col-first even-row-color all-classes-table all-classes-table-tab2"><a href="org/apache/datafusion/proto/SchemaConverter.html" title="class in org.apache.datafusion.proto">SchemaConverter</a></div>
+<div class="col-last even-row-color all-classes-table all-classes-table-tab2">
 <div class="block">Convert between Arrow Java <code>Schema</code> and the <code>datafusion_common.Schema</code> protobuf shape
  used by DataFusion plan messages such as <code>ListingTableScanNode.schema</code>.</div>
 </div>
-<div class="col-first even-row-color all-classes-table all-classes-table-tab2"><a href="org/apache/datafusion/SessionContext.html" title="class in org.apache.datafusion">SessionContext</a></div>
-<div class="col-last even-row-color all-classes-table all-classes-table-tab2">
+<div class="col-first odd-row-color all-classes-table all-classes-table-tab2"><a href="org/apache/datafusion/SessionContext.html" title="class in org.apache.datafusion">SessionContext</a></div>
+<div class="col-last odd-row-color all-classes-table all-classes-table-tab2">
 <div class="block">A DataFusion session context.</div>
 </div>
-<div class="col-first odd-row-color all-classes-table all-classes-table-tab2"><a href="org/apache/datafusion/SessionContextBuilder.html" title="class in org.apache.datafusion">SessionContextBuilder</a></div>
-<div class="col-last odd-row-color all-classes-table all-classes-table-tab2">
+<div class="col-first even-row-color all-classes-table all-classes-table-tab2"><a href="org/apache/datafusion/SessionContextBuilder.html" title="class in org.apache.datafusion">SessionContextBuilder</a></div>
+<div class="col-last even-row-color all-classes-table all-classes-table-tab2">
 <div class="block">Builder for a configured <a href="org/apache/datafusion/SessionContext.html" title="class in org.apache.datafusion"><code>SessionContext</code></a>.</div>
 </div>
-<div class="col-first even-row-color all-classes-table all-classes-table-tab2"><a href="org/apache/datafusion/UnnestOptions.html" title="class in org.apache.datafusion">UnnestOptions</a></div>
-<div class="col-last even-row-color all-classes-table all-classes-table-tab2">
+<div class="col-first odd-row-color all-classes-table all-classes-table-tab2"><a href="org/apache/datafusion/SimpleTableProvider.html" title="class in org.apache.datafusion">SimpleTableProvider</a></div>
+<div class="col-last odd-row-color all-classes-table all-classes-table-tab2">
+<div class="block">A <a href="org/apache/datafusion/TableProvider.html" title="interface in org.apache.datafusion"><code>TableProvider</code></a> that pairs a fixed <code>Schema</code> with a function that opens a fresh
+ <code>ArrowReader</code> for each scan.</div>
+</div>
+<div class="col-first even-row-color all-classes-table all-classes-table-tab1"><a href="org/apache/datafusion/TableProvider.html" title="interface in org.apache.datafusion">TableProvider</a></div>
+<div class="col-last even-row-color all-classes-table all-classes-table-tab1">
+<div class="block">A Java-implemented table that can be registered with a <a href="org/apache/datafusion/SessionContext.html" title="class in org.apache.datafusion"><code>SessionContext</code></a> via <a href="org/apache/datafusion/SessionContext.html#registerTable(java.lang.String,org.apache.datafusion.TableProvider)"><code>SessionContext.registerTable(String, TableProvider)</code></a>.</div>
+</div>
+<div class="col-first odd-row-color all-classes-table all-classes-table-tab2"><a href="org/apache/datafusion/UnnestOptions.html" title="class in org.apache.datafusion">UnnestOptions</a></div>
+<div class="col-last odd-row-color all-classes-table all-classes-table-tab2">
 <div class="block">Configuration knobs for <a href="org/apache/datafusion/DataFrame.html#unnestColumns(org.apache.datafusion.UnnestOptions,java.lang.String...)"><code>DataFrame.unnestColumns(UnnestOptions, String...)</code></a>, mirroring
  DataFusion's <code>UnnestOptions</code>.</div>
 </div>
-<div class="col-first odd-row-color all-classes-table all-classes-table-tab3"><a href="org/apache/datafusion/Volatility.html" title="enum class in org.apache.datafusion">Volatility</a></div>
-<div class="col-last odd-row-color all-classes-table all-classes-table-tab3">
+<div class="col-first even-row-color all-classes-table all-classes-table-tab3"><a href="org/apache/datafusion/Volatility.html" title="enum class in org.apache.datafusion">Volatility</a></div>
+<div class="col-last even-row-color all-classes-table all-classes-table-tab3">
 <div class="block">Volatility classification for a UDF.</div>
 </div>
 </div>
diff --git a/api/allpackages-index.html b/api/allpackages-index.html
index 717d070..f6a967f 100644
--- a/api/allpackages-index.html
+++ b/api/allpackages-index.html
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML>
 <html lang>
 <head>
-<!-- Generated by javadoc (17) on Mon May 18 17:40:42 UTC 2026 -->
+<!-- Generated by javadoc (17) on Tue May 19 22:05:47 UTC 2026 -->
 <title>All Packages (Apache DataFusion Java 0.1.0-SNAPSHOT)</title>
 <meta name="viewport" content="width=device-width, initial-scale=1">
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<meta name="dc.created" content="2026-05-18">
+<meta name="dc.created" content="2026-05-19">
 <meta name="description" content="package index">
 <meta name="generator" content="javadoc/AllPackagesIndexWriter">
 <link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
diff --git a/api/help-doc.html b/api/help-doc.html
index cc8995e..cb2457c 100644
--- a/api/help-doc.html
+++ b/api/help-doc.html
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML>
 <html lang>
 <head>
-<!-- Generated by javadoc (17) on Mon May 18 17:40:42 UTC 2026 -->
+<!-- Generated by javadoc (17) on Tue May 19 22:05:47 UTC 2026 -->
 <title>API Help (Apache DataFusion Java 0.1.0-SNAPSHOT)</title>
 <meta name="viewport" content="width=device-width, initial-scale=1">
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<meta name="dc.created" content="2026-05-18">
+<meta name="dc.created" content="2026-05-19">
 <meta name="description" content="help">
 <meta name="generator" content="javadoc/HelpWriter">
 <link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
diff --git a/api/index-all.html b/api/index-all.html
index b19ad23..588e5f9 100644
--- a/api/index-all.html
+++ b/api/index-all.html
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML>
 <html lang>
 <head>
-<!-- Generated by javadoc (17) on Mon May 18 17:40:42 UTC 2026 -->
+<!-- Generated by javadoc (17) on Tue May 19 22:05:47 UTC 2026 -->
 <title>Index (Apache DataFusion Java 0.1.0-SNAPSHOT)</title>
 <meta name="viewport" content="width=device-width, initial-scale=1">
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<meta name="dc.created" content="2026-05-18">
+<meta name="dc.created" content="2026-05-19">
 <meta name="description" content="index">
 <meta name="generator" content="javadoc/IndexWriter">
 <link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
@@ -80,6 +80,12 @@ loadScripts(document, 'script');</script>
 </dd>
 <dt><a href="org/apache/datafusion/ArrowReadOptions.html#%3Cinit%3E()" class="member-name-link">ArrowReadOptions()</a> - Constructor for class org.apache.datafusion.<a href="org/apache/datafusion/ArrowReadOptions.html" title="class in org.apache.datafusion">ArrowReadOptions</a></dt>
 <dd>&nbsp;</dd>
+<dt><a href="org/apache/datafusion/AvroReadOptions.html" class="type-name-link" title="class in org.apache.datafusion">AvroReadOptions</a> - Class in <a href="org/apache/datafusion/package-summary.html">org.apache.datafusion</a></dt>
+<dd>
+<div class="block">Configuration knobs for Avro sources passed to <a href="org/apache/datafusion/SessionContext.html#registerAvro(java.lang.String,java.lang.String,org.apache.datafusion.AvroReadOptions)"><code>SessionContext.registerAvro(String, String, AvroReadOptions)</code></a> and <a href="org/apache/datafusion/SessionContext.html#readAvro(java.lang.String,org.apache.datafusion.AvroReadOptions)"><code>SessionContext.readAvro(String, AvroReadOptions)</code></a>.</div>
+</dd>
+<dt><a href="org/apache/datafusion/AvroReadOptions.html#%3Cinit%3E()" class="member-name-link">AvroReadOptions()</a> - Constructor for class org.apache.datafusion.<a href="org/apache/datafusion/AvroReadOptions.html" title="class in org.apache.datafusion">AvroReadOptions</a></dt>
+<dd>&nbsp;</dd>
 </dl>
 <h2 class="title" id="I:B">B</h2>
 <dl class="index">
@@ -141,6 +147,12 @@ loadScripts(document, 'script');</script>
 </dd>
 <dt><a href="org/apache/datafusion/CsvReadOptions.html#%3Cinit%3E()" class="member-name-link">CsvReadOptions()</a> - Constructor for class org.apache.datafusion.<a href="org/apache/datafusion/CsvReadOptions.html" title="class in org.apache.datafusion">CsvReadOptions</a></dt>
 <dd>&nbsp;</dd>
+<dt><a href="org/apache/datafusion/CsvWriteOptions.html" class="type-name-link" title="class in org.apache.datafusion">CsvWriteOptions</a> - Class in <a href="org/apache/datafusion/package-summary.html">org.apache.datafusion</a></dt>
+<dd>
+<div class="block">Configuration knobs for writing CSV, passed to <a href="org/apache/datafusion/DataFrame.html#writeCsv(java.lang.String,org.apache.datafusion.CsvWriteOptions)"><code>DataFrame.writeCsv(String, CsvWriteOptions)</code></a>.</div>
+</dd>
+<dt><a href="org/apache/datafusion/CsvWriteOptions.html#%3Cinit%3E()" class="member-name-link">CsvWriteOptions()</a> - Constructor for class org.apache.datafusion.<a href="org/apache/datafusion/CsvWriteOptions.html" title="class in org.apache.datafusion">CsvWriteOptions</a></dt>
+<dd>&nbsp;</dd>
 </dl>
 <h2 class="title" id="I:D">D</h2>
 <dl class="index">
@@ -154,6 +166,10 @@ loadScripts(document, 'script');</script>
 </dd>
 <dt><a href="org/apache/datafusion/CsvReadOptions.html#delimiter(byte)" class="member-name-link">delimiter(byte)</a> - Method in class org.apache.datafusion.<a href="org/apache/datafusion/CsvReadOptions.html" title="class in org.apache.datafusion">CsvReadOptions</a></dt>
 <dd>&nbsp;</dd>
+<dt><a href="org/apache/datafusion/CsvWriteOptions.html#delimiter(byte)" class="member-name-link">delimiter(byte)</a> - Method in class org.apache.datafusion.<a href="org/apache/datafusion/CsvWriteOptions.html" title="class in org.apache.datafusion">CsvWriteOptions</a></dt>
+<dd>
+<div class="block">Field delimiter byte.</div>
+</dd>
 <dt><a href="org/apache/datafusion/DataFrame.html#distinct()" class="member-name-link">distinct()</a> - Method in class org.apache.datafusion.<a href="org/apache/datafusion/DataFrame.html" title="class in org.apache.datafusion">DataFrame</a></dt>
 <dd>
 <div class="block">Deduplicate rows across all columns.</div>
@@ -179,15 +195,31 @@ loadScripts(document, 'script');</script>
 </dd>
 <dt><a href="org/apache/datafusion/CsvReadOptions.html#escape(byte)" class="member-name-link">escape(byte)</a> - Method in class org.apache.datafusion.<a href="org/apache/datafusion/CsvReadOptions.html" title="class in org.apache.datafusion">CsvReadOptions</a></dt>
 <dd>&nbsp;</dd>
+<dt><a href="org/apache/datafusion/CsvWriteOptions.html#escape(byte)" class="member-name-link">escape(byte)</a> - Method in class org.apache.datafusion.<a href="org/apache/datafusion/CsvWriteOptions.html" title="class in org.apache.datafusion">CsvWriteOptions</a></dt>
+<dd>
+<div class="block">Escape character byte.</div>
+</dd>
 <dt><a href="org/apache/datafusion/ScalarFunction.html#evaluate(org.apache.arrow.memory.BufferAllocator,org.apache.datafusion.ScalarFunctionArgs)" class="member-name-link">evaluate(BufferAllocator, ScalarFunctionArgs)</a> - Method in interface org.apache.datafusion.<a href="org/apache/datafusion/ScalarFunction.html" title="interface in org.apache.datafusion">ScalarFunction</a></dt>
 <dd>
 <div class="block">Compute the function result for one input batch.</div>
 </dd>
+<dt><a href="org/apache/datafusion/DataFrame.html#executeStream(org.apache.arrow.memory.BufferAllocator)" class="member-name-link">executeStream(BufferAllocator)</a> - Method in class org.apache.datafusion.<a href="org/apache/datafusion/DataFrame.html" title="class in org.apache.datafusion">DataFrame</a></dt>
+<dd>
+<div class="block">Execute the plan and return its record batches as a streaming <code>ArrowReader</code>.</div>
+</dd>
 </dl>
 <h2 class="title" id="I:F">F</h2>
 <dl class="index">
 <dt><a href="org/apache/datafusion/CsvReadOptions.html#fileCompressionType(org.apache.datafusion.FileCompressionType)" class="member-name-link">fileCompressionType(FileCompressionType)</a> - Method in class org.apache.datafusion.<a href="org/apache/datafusion/CsvReadOptions.html" title="class in org.apache.datafusion">CsvReadOptions</a></dt>
 <dd>&nbsp;</dd>
+<dt><a href="org/apache/datafusion/CsvWriteOptions.html#fileCompressionType(org.apache.datafusion.FileCompressionType)" class="member-name-link">fileCompressionType(FileCompressionType)</a> - Method in class org.apache.datafusion.<a href="org/apache/datafusion/CsvWriteOptions.html" title="class in org.apache.datafusion">CsvWriteOptions</a></dt>
+<dd>
+<div class="block">Output compression codec.</div>
+</dd>
+<dt><a href="org/apache/datafusion/JsonWriteOptions.html#fileCompressionType(org.apache.datafusion.FileCompressionType)" class="member-name-link">fileCompressionType(FileCompressionType)</a> - Method in class org.apache.datafusion.<a href="org/apache/datafusion/JsonWriteOptions.html" title="class in org.apache.datafusion">JsonWriteOptions</a></dt>
+<dd>
+<div class="block">Output compression codec.</div>
+</dd>
 <dt><a href="org/apache/datafusion/NdJsonReadOptions.html#fileCompressionType(org.apache.datafusion.FileCompressionType)" class="member-name-link">fileCompressionType(FileCompressionType)</a> - Method in class org.apache.datafusion.<a href="org/apache/datafusion/NdJsonReadOptions.html" title="class in org.apache.datafusion">NdJsonReadOptions</a></dt>
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/datafusion/FileCompressionType.html" class="type-name-link" title="enum class in org.apache.datafusion">FileCompressionType</a> - Enum Class in <a href="org/apache/datafusion/package-summary.html">org.apache.datafusion</a></dt>
@@ -196,6 +228,8 @@ loadScripts(document, 'script');</script>
 </dd>
 <dt><a href="org/apache/datafusion/ArrowReadOptions.html#fileExtension(java.lang.String)" class="member-name-link">fileExtension(String)</a> - Method in class org.apache.datafusion.<a href="org/apache/datafusion/ArrowReadOptions.html" title="class in org.apache.datafusion">ArrowReadOptions</a></dt>
 <dd>&nbsp;</dd>
+<dt><a href="org/apache/datafusion/AvroReadOptions.html#fileExtension(java.lang.String)" class="member-name-link">fileExtension(String)</a> - Method in class org.apache.datafusion.<a href="org/apache/datafusion/AvroReadOptions.html" title="class in org.apache.datafusion">AvroReadOptions</a></dt>
+<dd>&nbsp;</dd>
 <dt><a href="org/apache/datafusion/CsvReadOptions.html#fileExtension(java.lang.String)" class="member-name-link">fileExtension(String)</a> - Method in class org.apache.datafusion.<a href="org/apache/datafusion/CsvReadOptions.html" title="class in org.apache.datafusion">CsvReadOptions</a></dt>
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/datafusion/NdJsonReadOptions.html#fileExtension(java.lang.String)" class="member-name-link">fileExtension(String)</a> - Method in class org.apache.datafusion.<a href="org/apache/datafusion/NdJsonReadOptions.html" title="class in org.apache.datafusion">NdJsonReadOptions</a></dt>
@@ -242,6 +276,10 @@ loadScripts(document, 'script');</script>
 </dd>
 <dt><a href="org/apache/datafusion/CsvReadOptions.html#hasHeader(boolean)" class="member-name-link">hasHeader(boolean)</a> - Method in class org.apache.datafusion.<a href="org/apache/datafusion/CsvReadOptions.html" title="class in org.apache.datafusion">CsvReadOptions</a></dt>
 <dd>&nbsp;</dd>
+<dt><a href="org/apache/datafusion/CsvWriteOptions.html#hasHeader(boolean)" class="member-name-link">hasHeader(boolean)</a> - Method in class org.apache.datafusion.<a href="org/apache/datafusion/CsvWriteOptions.html" title="class in org.apache.datafusion">CsvWriteOptions</a></dt>
+<dd>
+<div class="block">Whether to write a header row.</div>
+</dd>
 </dl>
 <h2 class="title" id="I:I">I</h2>
 <dl class="index">
@@ -257,6 +295,11 @@ loadScripts(document, 'script');</script>
 <dd>
 <div class="block">Invoke a scalar UDF for one batch.</div>
 </dd>
+<dt><a href="org/apache/datafusion/internal/JniBridge.html#invokeTableScan(org.apache.datafusion.TableProvider,long)" class="member-name-link">invokeTableScan(TableProvider, long)</a> - Static method in class org.apache.datafusion.internal.<a href="org/apache/datafusion/internal/JniBridge.html" title="class in org.apache.datafusion.internal">JniBridge</a></dt>
+<dd>
+<div class="block">Open a fresh batch stream from a Java <a href="org/apache/datafusion/TableProvider.html" title="interface in org.apache.datafusion"><code>TableProvider</code></a> and export it through the supplied
+ Arrow C Data Interface address.</div>
+</dd>
 </dl>
 <h2 class="title" id="I:J">J</h2>
 <dl class="index">
@@ -264,6 +307,12 @@ loadScripts(document, 'script');</script>
 <dd>
 <div class="block">Internal trampoline invoked from native code on every UDF call.</div>
 </dd>
+<dt><a href="org/apache/datafusion/JsonWriteOptions.html" class="type-name-link" title="class in org.apache.datafusion">JsonWriteOptions</a> - Class in <a href="org/apache/datafusion/package-summary.html">org.apache.datafusion</a></dt>
+<dd>
+<div class="block">Configuration knobs for writing JSON, passed to <a href="org/apache/datafusion/DataFrame.html#writeJson(java.lang.String,org.apache.datafusion.JsonWriteOptions)"><code>DataFrame.writeJson(String, JsonWriteOptions)</code></a>.</div>
+</dd>
+<dt><a href="org/apache/datafusion/JsonWriteOptions.html#%3Cinit%3E()" class="member-name-link">JsonWriteOptions()</a> - Constructor for class org.apache.datafusion.<a href="org/apache/datafusion/JsonWriteOptions.html" title="class in org.apache.datafusion">JsonWriteOptions</a></dt>
+<dd>&nbsp;</dd>
 </dl>
 <h2 class="title" id="I:L">L</h2>
 <dl class="index">
@@ -307,6 +356,10 @@ loadScripts(document, 'script');</script>
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/datafusion/CsvReadOptions.html#newlinesInValues(boolean)" class="member-name-link">newlinesInValues(boolean)</a> - Method in class org.apache.datafusion.<a href="org/apache/datafusion/CsvReadOptions.html" title="class in org.apache.datafusion">CsvReadOptions</a></dt>
 <dd>&nbsp;</dd>
+<dt><a href="org/apache/datafusion/CsvWriteOptions.html#nullValue(java.lang.String)" class="member-name-link">nullValue(String)</a> - Method in class org.apache.datafusion.<a href="org/apache/datafusion/CsvWriteOptions.html" title="class in org.apache.datafusion">CsvWriteOptions</a></dt>
+<dd>
+<div class="block">String to write for SQL NULL values.</div>
+</dd>
 </dl>
 <h2 class="title" id="I:O">O</h2>
 <dl class="index">
@@ -333,6 +386,14 @@ loadScripts(document, 'script');</script>
 </dd>
 <dt><a href="org/apache/datafusion/ParquetWriteOptions.html#%3Cinit%3E()" class="member-name-link">ParquetWriteOptions()</a> - Constructor for class org.apache.datafusion.<a href="org/apache/datafusion/ParquetWriteOptions.html" title="class in org.apache.datafusion">ParquetWriteOptions</a></dt>
 <dd>&nbsp;</dd>
+<dt><a href="org/apache/datafusion/CsvWriteOptions.html#partitionCols(java.lang.String...)" class="member-name-link">partitionCols(String...)</a> - Method in class org.apache.datafusion.<a href="org/apache/datafusion/CsvWriteOptions.html" title="class in org.apache.datafusion">CsvWriteOptions</a></dt>
+<dd>
+<div class="block">Hive-style partition columns.</div>
+</dd>
+<dt><a href="org/apache/datafusion/JsonWriteOptions.html#partitionCols(java.lang.String...)" class="member-name-link">partitionCols(String...)</a> - Method in class org.apache.datafusion.<a href="org/apache/datafusion/JsonWriteOptions.html" title="class in org.apache.datafusion">JsonWriteOptions</a></dt>
+<dd>
+<div class="block">Hive-style partition columns.</div>
+</dd>
 <dt><a href="org/apache/datafusion/UnnestOptions.html#preserveNulls()" class="member-name-link">preserveNulls()</a> - Method in class org.apache.datafusion.<a href="org/apache/datafusion/UnnestOptions.html" title="class in org.apache.datafusion">UnnestOptions</a></dt>
 <dd>
 <div class="block">The current <code>preserveNulls</code> setting.</div>
@@ -347,6 +408,10 @@ loadScripts(document, 'script');</script>
 <dl class="index">
 <dt><a href="org/apache/datafusion/CsvReadOptions.html#quote(byte)" class="member-name-link">quote(byte)</a> - Method in class org.apache.datafusion.<a href="org/apache/datafusion/CsvReadOptions.html" title="class in org.apache.datafusion">CsvReadOptions</a></dt>
 <dd>&nbsp;</dd>
+<dt><a href="org/apache/datafusion/CsvWriteOptions.html#quote(byte)" class="member-name-link">quote(byte)</a> - Method in class org.apache.datafusion.<a href="org/apache/datafusion/CsvWriteOptions.html" title="class in org.apache.datafusion">CsvWriteOptions</a></dt>
+<dd>
+<div class="block">Quote character byte.</div>
+</dd>
 </dl>
 <h2 class="title" id="I:R">R</h2>
 <dl class="index">
@@ -358,6 +423,14 @@ loadScripts(document, 'script');</script>
 <dd>
 <div class="block">Read an Arrow IPC file as a <a href="org/apache/datafusion/DataFrame.html" title="class in org.apache.datafusion"><code>DataFrame</code></a> with the supplied <a href="org/apache/datafusion/ArrowReadOptions.html" title="class in org.apache.datafusion"><code>ArrowReadOptions</code></a>.</div>
 </dd>
+<dt><a href="org/apache/datafusion/SessionContext.html#readAvro(java.lang.String)" class="member-name-link">readAvro(String)</a> - Method in class org.apache.datafusion.<a href="org/apache/datafusion/SessionContext.html" title="class in org.apache.datafusion">SessionContext</a></dt>
+<dd>
+<div class="block">Read an Avro file as a <a href="org/apache/datafusion/DataFrame.html" title="class in org.apache.datafusion"><code>DataFrame</code></a> without registering it.</div>
+</dd>
+<dt><a href="org/apache/datafusion/SessionContext.html#readAvro(java.lang.String,org.apache.datafusion.AvroReadOptions)" class="member-name-link">readAvro(String, AvroReadOptions)</a> - Method in class org.apache.datafusion.<a href="org/apache/datafusion/SessionContext.html" title="class in org.apache.datafusion">SessionContext</a></dt>
+<dd>
+<div class="block">Read an Avro file as a <a href="org/apache/datafusion/DataFrame.html" title="class in org.apache.datafusion"><code>DataFrame</code></a> with the supplied <a href="org/apache/datafusion/AvroReadOptions.html" title="class in org.apache.datafusion"><code>AvroReadOptions</code></a>.</div>
+</dd>
 <dt><a href="org/apache/datafusion/SessionContext.html#readCsv(java.lang.String)" class="member-name-link">readCsv(String)</a> - Method in class org.apache.datafusion.<a href="org/apache/datafusion/SessionContext.html" title="class in org.apache.datafusion">SessionContext</a></dt>
 <dd>
 <div class="block">Read a CSV file as a <a href="org/apache/datafusion/DataFrame.html" title="class in org.apache.datafusion"><code>DataFrame</code></a> without registering it.</div>
@@ -391,6 +464,14 @@ loadScripts(document, 'script');</script>
 <div class="block">Register an Arrow IPC file (or directory of Arrow IPC files) as a table with the supplied
  <a href="org/apache/datafusion/ArrowReadOptions.html" title="class in org.apache.datafusion"><code>ArrowReadOptions</code></a>.</div>
 </dd>
+<dt><a href="org/apache/datafusion/SessionContext.html#registerAvro(java.lang.String,java.lang.String)" class="member-name-link">registerAvro(String, String)</a> - Method in class org.apache.datafusion.<a href="org/apache/datafusion/SessionContext.html" title="class in org.apache.datafusion">SessionContext</a></dt>
+<dd>
+<div class="block">Register an Avro file (or directory of Avro files) as a table.</div>
+</dd>
+<dt><a href="org/apache/datafusion/SessionContext.html#registerAvro(java.lang.String,java.lang.String,org.apache.datafusion.AvroReadOptions)" class="member-name-link">registerAvro(String, String, AvroReadOptions)</a> - Method in class org.apache.datafusion.<a href="org/apache/datafusion/SessionContext.html" title="class in org.apache.datafusion">SessionContext</a></dt>
+<dd>
+<div class="block">Register an Avro file (or directory of Avro files) as a table with the supplied <a href="org/apache/datafusion/AvroReadOptions.html" title="class in org.apache.datafusion"><code>AvroReadOptions</code></a>.</div>
+</dd>
 <dt><a href="org/apache/datafusion/SessionContext.html#registerCsv(java.lang.String,java.lang.String)" class="member-name-link">registerCsv(String, String)</a> - Method in class org.apache.datafusion.<a href="org/apache/datafusion/SessionContext.html" title="class in org.apache.datafusion">SessionContext</a></dt>
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/datafusion/SessionContext.html#registerCsv(java.lang.String,java.lang.String,org.apache.datafusion.CsvReadOptions)" class="member-name-link">registerCsv(String, String, CsvReadOptions)</a> - Method in class org.apache.datafusion.<a href="org/apache/datafusion/SessionContext.html" title="class in org.apache.datafusion">SessionContext</a></dt>
@@ -410,6 +491,10 @@ loadScripts(document, 'script');</script>
 <dd>
 <div class="block">Register a parquet file as a table with the supplied <a href="org/apache/datafusion/ParquetReadOptions.html" title="class in org.apache.datafusion"><code>ParquetReadOptions</code></a>.</div>
 </dd>
+<dt><a href="org/apache/datafusion/SessionContext.html#registerTable(java.lang.String,org.apache.datafusion.TableProvider)" class="member-name-link">registerTable(String, TableProvider)</a> - Method in class org.apache.datafusion.<a href="org/apache/datafusion/SessionContext.html" title="class in org.apache.datafusion">SessionContext</a></dt>
+<dd>
+<div class="block">Register a Java-implemented <a href="org/apache/datafusion/TableProvider.html" title="interface in org.apache.datafusion"><code>TableProvider</code></a> under <code>name</code>.</div>
+</dd>
 <dt><a href="org/apache/datafusion/SessionContext.html#registerUdf(org.apache.datafusion.ScalarUdf)" class="member-name-link">registerUdf(ScalarUdf)</a> - Method in class org.apache.datafusion.<a href="org/apache/datafusion/SessionContext.html" title="class in org.apache.datafusion">SessionContext</a></dt>
 <dd>
 <div class="block">Register a Java-implemented scalar UDF.</div>
@@ -459,8 +544,22 @@ loadScripts(document, 'script');</script>
 <dd>
 <div class="block">Wrap a <a href="org/apache/datafusion/ScalarFunction.html" title="interface in org.apache.datafusion"><code>ScalarFunction</code></a> for registration.</div>
 </dd>
+<dt><a href="org/apache/datafusion/SimpleTableProvider.html#scan(org.apache.arrow.memory.BufferAllocator)" class="member-name-link">scan(BufferAllocator)</a> - Method in class org.apache.datafusion.<a href="org/apache/datafusion/SimpleTableProvider.html" title="class in org.apache.datafusion">SimpleTableProvider</a></dt>
+<dd>&nbsp;</dd>
+<dt><a href="org/apache/datafusion/TableProvider.html#scan(org.apache.arrow.memory.BufferAllocator)" class="member-name-link">scan(BufferAllocator)</a> - Method in interface org.apache.datafusion.<a href="org/apache/datafusion/TableProvider.html" title="interface in org.apache.datafusion">TableProvider</a></dt>
+<dd>
+<div class="block">Open a fresh batch stream for this table.</div>
+</dd>
+<dt><a href="org/apache/datafusion/SimpleTableProvider.html#schema()" class="member-name-link">schema()</a> - Method in class org.apache.datafusion.<a href="org/apache/datafusion/SimpleTableProvider.html" title="class in org.apache.datafusion">SimpleTableProvider</a></dt>
+<dd>&nbsp;</dd>
+<dt><a href="org/apache/datafusion/TableProvider.html#schema()" class="member-name-link">schema()</a> - Method in interface org.apache.datafusion.<a href="org/apache/datafusion/TableProvider.html" title="interface in org.apache.datafusion">TableProvider</a></dt>
+<dd>
+<div class="block">The fixed schema of this table.</div>
+</dd>
 <dt><a href="org/apache/datafusion/ArrowReadOptions.html#schema(org.apache.arrow.vector.types.pojo.Schema)" class="member-name-link">schema(Schema)</a> - Method in class org.apache.datafusion.<a href="org/apache/datafusion/ArrowReadOptions.html" title="class in org.apache.datafusion">ArrowReadOptions</a></dt>
 <dd>&nbsp;</dd>
+<dt><a href="org/apache/datafusion/AvroReadOptions.html#schema(org.apache.arrow.vector.types.pojo.Schema)" class="member-name-link">schema(Schema)</a> - Method in class org.apache.datafusion.<a href="org/apache/datafusion/AvroReadOptions.html" title="class in org.apache.datafusion">AvroReadOptions</a></dt>
+<dd>&nbsp;</dd>
 <dt><a href="org/apache/datafusion/CsvReadOptions.html#schema(org.apache.arrow.vector.types.pojo.Schema)" class="member-name-link">schema(Schema)</a> - Method in class org.apache.datafusion.<a href="org/apache/datafusion/CsvReadOptions.html" title="class in org.apache.datafusion">CsvReadOptions</a></dt>
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/datafusion/NdJsonReadOptions.html#schema(org.apache.arrow.vector.types.pojo.Schema)" class="member-name-link">schema(Schema)</a> - Method in class org.apache.datafusion.<a href="org/apache/datafusion/NdJsonReadOptions.html" title="class in org.apache.datafusion">NdJsonReadOptions</a></dt>
@@ -510,6 +609,21 @@ loadScripts(document, 'script');</script>
 <dd>
 <div class="block">Execute the plan and print the first <code>limit</code> rows to native stdout.</div>
 </dd>
+<dt><a href="org/apache/datafusion/SimpleTableProvider.html" class="type-name-link" title="class in org.apache.datafusion">SimpleTableProvider</a> - Class in <a href="org/apache/datafusion/package-summary.html">org.apache.datafusion</a></dt>
+<dd>
+<div class="block">A <a href="org/apache/datafusion/TableProvider.html" title="interface in org.apache.datafusion"><code>TableProvider</code></a> that pairs a fixed <code>Schema</code> with a function that opens a fresh
+ <code>ArrowReader</code> for each scan.</div>
+</dd>
+<dt><a href="org/apache/datafusion/SimpleTableProvider.html#%3Cinit%3E(org.apache.arrow.vector.types.pojo.Schema,java.util.function.Function)" class="member-name-link">SimpleTableProvider(Schema, Function&lt;BufferAllocator, ArrowReader&gt;)</a> - Constructor for class org.apache.datafusion.<a href="org/apache/datafusion/SimpleTableProvider.html" title="class in org.apache.datafusion">SimpleTableProvider</a></dt>
+<dd>&nbsp;</dd>
+<dt><a href="org/apache/datafusion/CsvWriteOptions.html#singleFileOutput(boolean)" class="member-name-link">singleFileOutput(boolean)</a> - Method in class org.apache.datafusion.<a href="org/apache/datafusion/CsvWriteOptions.html" title="class in org.apache.datafusion">CsvWriteOptions</a></dt>
+<dd>
+<div class="block">When <code>true</code>, write to a single file at the supplied path.</div>
+</dd>
+<dt><a href="org/apache/datafusion/JsonWriteOptions.html#singleFileOutput(boolean)" class="member-name-link">singleFileOutput(boolean)</a> - Method in class org.apache.datafusion.<a href="org/apache/datafusion/JsonWriteOptions.html" title="class in org.apache.datafusion">JsonWriteOptions</a></dt>
+<dd>
+<div class="block">When <code>true</code>, write to a single file at the supplied path.</div>
+</dd>
 <dt><a href="org/apache/datafusion/ParquetWriteOptions.html#singleFileOutput(boolean)" class="member-name-link">singleFileOutput(boolean)</a> - Method in class org.apache.datafusion.<a href="org/apache/datafusion/ParquetWriteOptions.html" title="class in org.apache.datafusion">ParquetWriteOptions</a></dt>
 <dd>
 <div class="block">When <code>true</code>, write to a single file at the supplied path.</div>
@@ -525,6 +639,10 @@ loadScripts(document, 'script');</script>
 </dl>
 <h2 class="title" id="I:T">T</h2>
 <dl class="index">
+<dt><a href="org/apache/datafusion/TableProvider.html" class="type-name-link" title="interface in org.apache.datafusion">TableProvider</a> - Interface in <a href="org/apache/datafusion/package-summary.html">org.apache.datafusion</a></dt>
+<dd>
+<div class="block">A Java-implemented table that can be registered with a <a href="org/apache/datafusion/SessionContext.html" title="class in org.apache.datafusion"><code>SessionContext</code></a> via <a href="org/apache/datafusion/SessionContext.html#registerTable(java.lang.String,org.apache.datafusion.TableProvider)"><code>SessionContext.registerTable(String, TableProvider)</code></a>.</div>
+</dd>
 <dt><a href="org/apache/datafusion/SessionContext.html#tableSchema(java.lang.String)" class="member-name-link">tableSchema(String)</a> - Method in class org.apache.datafusion.<a href="org/apache/datafusion/SessionContext.html" title="class in org.apache.datafusion">SessionContext</a></dt>
 <dd>
 <div class="block">Return the Arrow <code>Schema</code> of a registered table.</div>
@@ -629,6 +747,22 @@ the order they are declared.</div>
 <dd>
 <div class="block">Rename a column.</div>
 </dd>
+<dt><a href="org/apache/datafusion/DataFrame.html#writeCsv(java.lang.String)" class="member-name-link">writeCsv(String)</a> - Method in class org.apache.datafusion.<a href="org/apache/datafusion/DataFrame.html" title="class in org.apache.datafusion">DataFrame</a></dt>
+<dd>
+<div class="block">Materialize this DataFrame as CSV at <code>path</code>.</div>
+</dd>
+<dt><a href="org/apache/datafusion/DataFrame.html#writeCsv(java.lang.String,org.apache.datafusion.CsvWriteOptions)" class="member-name-link">writeCsv(String, CsvWriteOptions)</a> - Method in class org.apache.datafusion.<a href="org/apache/datafusion/DataFrame.html" title="class in org.apache.datafusion">DataFrame</a></dt>
+<dd>
+<div class="block">Materialize this DataFrame as CSV at <code>path</code> with the supplied <a href="org/apache/datafusion/CsvWriteOptions.html" title="class in org.apache.datafusion"><code>CsvWriteOptions</code></a>.</div>
+</dd>
+<dt><a href="org/apache/datafusion/DataFrame.html#writeJson(java.lang.String)" class="member-name-link">writeJson(String)</a> - Method in class org.apache.datafusion.<a href="org/apache/datafusion/DataFrame.html" title="class in org.apache.datafusion">DataFrame</a></dt>
+<dd>
+<div class="block">Materialize this DataFrame as newline-delimited JSON at <code>path</code>.</div>
+</dd>
+<dt><a href="org/apache/datafusion/DataFrame.html#writeJson(java.lang.String,org.apache.datafusion.JsonWriteOptions)" class="member-name-link">writeJson(String, JsonWriteOptions)</a> - Method in class org.apache.datafusion.<a href="org/apache/datafusion/DataFrame.html" title="class in org.apache.datafusion">DataFrame</a></dt>
+<dd>
+<div class="block">Materialize this DataFrame as newline-delimited JSON at <code>path</code> with the supplied <a href="org/apache/datafusion/JsonWriteOptions.html" title="class in org.apache.datafusion"><code>JsonWriteOptions</code></a>.</div>
+</dd>
 <dt><a href="org/apache/datafusion/DataFrame.html#writeParquet(java.lang.String)" class="member-name-link">writeParquet(String)</a> - Method in class org.apache.datafusion.<a href="org/apache/datafusion/DataFrame.html" title="class in org.apache.datafusion">DataFrame</a></dt>
 <dd>
 <div class="block">Materialize this DataFrame as Parquet at <code>path</code>.</div>
diff --git a/api/index.html b/api/index.html
index dcff985..6b86e04 100644
--- a/api/index.html
+++ b/api/index.html
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML>
 <html lang>
 <head>
-<!-- Generated by javadoc (17) on Mon May 18 17:40:42 UTC 2026 -->
+<!-- Generated by javadoc (17) on Tue May 19 22:05:47 UTC 2026 -->
 <title>Overview (Apache DataFusion Java 0.1.0-SNAPSHOT)</title>
 <meta name="viewport" content="width=device-width, initial-scale=1">
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<meta name="dc.created" content="2026-05-18">
+<meta name="dc.created" content="2026-05-19">
 <meta name="description" content="package index">
 <meta name="generator" content="javadoc/PackageIndexWriter">
 <link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
diff --git a/api/member-search-index.js b/api/member-search-index.js
index e638200..6068ff5 100644
--- a/api/member-search-index.js
+++ b/api/member-search-index.js
@@ -1 +1 @@
-memberSearchIndex = [{"p":"org.apache.datafusion","c":"ScalarFunctionArgs","l":"args()"},{"p":"org.apache.datafusion","c":"ScalarFunction","l":"argTypes()"},{"p":"org.apache.datafusion","c":"ScalarUdf","l":"argTypes()"},{"p":"org.apache.datafusion","c":"ColumnarValue","l":"array(FieldVector)","u":"array(org.apache.arrow.vector.FieldVector)"},{"p":"org.apache.datafusion","c":"ColumnarValue.Array","l":"Array(FieldVector)","u":"%3Cinit%3E(org.apache.arrow.vector.FieldVector)"},{"p":"org.apa [...]
\ No newline at end of file
+memberSearchIndex = [{"p":"org.apache.datafusion","c":"ScalarFunctionArgs","l":"args()"},{"p":"org.apache.datafusion","c":"ScalarFunction","l":"argTypes()"},{"p":"org.apache.datafusion","c":"ScalarUdf","l":"argTypes()"},{"p":"org.apache.datafusion","c":"ColumnarValue","l":"array(FieldVector)","u":"array(org.apache.arrow.vector.FieldVector)"},{"p":"org.apache.datafusion","c":"ColumnarValue.Array","l":"Array(FieldVector)","u":"%3Cinit%3E(org.apache.arrow.vector.FieldVector)"},{"p":"org.apa [...]
\ No newline at end of file
diff --git a/api/org/apache/datafusion/ArrowReadOptions.html b/api/org/apache/datafusion/ArrowReadOptions.html
index 7029192..67d4511 100644
--- a/api/org/apache/datafusion/ArrowReadOptions.html
+++ b/api/org/apache/datafusion/ArrowReadOptions.html
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML>
 <html lang>
 <head>
-<!-- Generated by javadoc (17) on Mon May 18 17:40:42 UTC 2026 -->
+<!-- Generated by javadoc (17) on Tue May 19 22:05:47 UTC 2026 -->
 <title>ArrowReadOptions (Apache DataFusion Java 0.1.0-SNAPSHOT)</title>
 <meta name="viewport" content="width=device-width, initial-scale=1">
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<meta name="dc.created" content="2026-05-18">
+<meta name="dc.created" content="2026-05-19">
 <meta name="description" content="declaration: package: org.apache.datafusion, class: ArrowReadOptions">
 <meta name="generator" content="javadoc/ClassWriterImpl">
 <link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
diff --git a/api/org/apache/datafusion/ArrowReadOptions.html b/api/org/apache/datafusion/AvroReadOptions.html
similarity index 79%
copy from api/org/apache/datafusion/ArrowReadOptions.html
copy to api/org/apache/datafusion/AvroReadOptions.html
index 7029192..840b73f 100644
--- a/api/org/apache/datafusion/ArrowReadOptions.html
+++ b/api/org/apache/datafusion/AvroReadOptions.html
@@ -1,12 +1,12 @@
 <!DOCTYPE HTML>
 <html lang>
 <head>
-<!-- Generated by javadoc (17) on Mon May 18 17:40:42 UTC 2026 -->
-<title>ArrowReadOptions (Apache DataFusion Java 0.1.0-SNAPSHOT)</title>
+<!-- Generated by javadoc (17) on Tue May 19 22:05:47 UTC 2026 -->
+<title>AvroReadOptions (Apache DataFusion Java 0.1.0-SNAPSHOT)</title>
 <meta name="viewport" content="width=device-width, initial-scale=1">
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<meta name="dc.created" content="2026-05-18">
-<meta name="description" content="declaration: package: org.apache.datafusion, class: ArrowReadOptions">
+<meta name="dc.created" content="2026-05-19">
+<meta name="description" content="declaration: package: org.apache.datafusion, class: AvroReadOptions">
 <meta name="generator" content="javadoc/ClassWriterImpl">
 <link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
 <link rel="stylesheet" type="text/css" href="../../../script-dir/jquery-ui.min.css" title="Style">
@@ -35,7 +35,7 @@ loadScripts(document, 'script');</script>
 <li><a href="../../../index.html">Overview</a></li>
 <li><a href="package-summary.html">Package</a></li>
 <li class="nav-bar-cell1-rev">Class</li>
-<li><a href="class-use/ArrowReadOptions.html">Use</a></li>
+<li><a href="class-use/AvroReadOptions.html">Use</a></li>
 <li><a href="package-tree.html">Tree</a></li>
 <li><a href="../../../index-all.html">Index</a></li>
 <li><a href="../../../help-doc.html#class">Help</a></li>
@@ -70,24 +70,25 @@ loadScripts(document, 'script');</script>
 <!-- ======== START OF CLASS DATA ======== -->
 <div class="header">
 <div class="sub-title"><span class="package-label-in-type">Package</span>&nbsp;<a href="package-summary.html">org.apache.datafusion</a></div>
-<h1 title="Class ArrowReadOptions" class="title">Class ArrowReadOptions</h1>
+<h1 title="Class AvroReadOptions" class="title">Class AvroReadOptions</h1>
 </div>
 <div class="inheritance" title="Inheritance Tree"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">java.lang.Object</a>
-<div class="inheritance">org.apache.datafusion.ArrowReadOptions</div>
+<div class="inheritance">org.apache.datafusion.AvroReadOptions</div>
 </div>
 <section class="class-description" id="class-description">
 <hr>
-<div class="type-signature"><span class="modifiers">public final class </span><span class="element-name type-name-label">ArrowReadOptions</span>
+<div class="type-signature"><span class="modifiers">public final class </span><span class="element-name type-name-label">AvroReadOptions</span>
 <span class="extends-implements">extends <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a></span></div>
-<div class="block">Configuration knobs for Arrow IPC sources passed to <a href="SessionContext.html#registerArrow(java.lang.String,java.lang.String,org.apache.datafusion.ArrowReadOptions)"><code>SessionContext.registerArrow(String, String, ArrowReadOptions)</code></a> and <a href="SessionContext.html#readArrow(java.lang.String,org.apache.datafusion.ArrowReadOptions)"><code>SessionContext.readArrow(String, ArrowReadOptions)</code></a>.
+<div class="block">Configuration knobs for Avro sources passed to <a href="SessionContext.html#registerAvro(java.lang.String,java.lang.String,org.apache.datafusion.AvroReadOptions)"><code>SessionContext.registerAvro(String, String, AvroReadOptions)</code></a> and <a href="SessionContext.html#readAvro(java.lang.String,org.apache.datafusion.AvroReadOptions)"><code>SessionContext.readAvro(String, AvroReadOptions)</code></a>.
 
- <p>Mirrors the subset of DataFusion's <code>ArrowReadOptions</code> that maps onto the Java surface
- today: <code>fileExtension</code> (default <code>".arrow"</code>) and an explicit Arrow <code>schema</code> that
- bypasses on-read schema inference. <code>tablePartitionCols</code> is intentionally deferred --
- neither Parquet nor CSV expose Hive-style partitioning on the Java side yet.
+ <p>Mirrors the subset of DataFusion's <code>AvroReadOptions</code> that maps onto the Java surface
+ today: <code>fileExtension</code> (default <code>".avro"</code>) and an explicit Arrow <code>schema</code> that
+ bypasses on-read schema inference. <code>tablePartitionCols</code> is intentionally deferred -- no
+ other Java reader exposes Hive-style partitioning yet.
 
- <p>Arrow IPC files carry their own body compression (LZ4_FRAME / ZSTD per-buffer) inside the file
- format itself, so unlike CSV / NDJSON there is no <code>FileCompressionType</code> setter.</div>
+ <p>Avro carries its own per-block compression (snappy, deflate, bzip2, xz, zstandard) inside the
+ object container itself, negotiated when the file is written, so unlike CSV / NDJSON there is no
+ <code>FileCompressionType</code> setter.</div>
 </section>
 <section class="summary">
 <ul class="summary-list">
@@ -99,7 +100,7 @@ loadScripts(document, 'script');</script>
 <div class="summary-table two-column-summary">
 <div class="table-header col-first">Constructor</div>
 <div class="table-header col-last">Description</div>
-<div class="col-constructor-name even-row-color"><code><a href="#%3Cinit%3E()" class="member-name-link">ArrowReadOptions</a>()</code></div>
+<div class="col-constructor-name even-row-color"><code><a href="#%3Cinit%3E()" class="member-name-link">AvroReadOptions</a>()</code></div>
 <div class="col-last even-row-color">&nbsp;</div>
 </div>
 </section>
@@ -115,10 +116,10 @@ loadScripts(document, 'script');</script>
 <div class="table-header col-first">Modifier and Type</div>
 <div class="table-header col-second">Method</div>
 <div class="table-header col-last">Description</div>
-<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="ArrowReadOptions.html" title="class in org.apache.datafusion">ArrowReadOptions</a></code></div>
+<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="AvroReadOptions.html" title="class in org.apache.datafusion">AvroReadOptions</a></code></div>
 <div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#fileExtension(java.lang.String)" class="member-name-link">fileExtension</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;ext)</code></div>
 <div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">&nbsp;</div>
-<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="ArrowReadOptions.html" title="class in org.apache.datafusion">ArrowReadOptions</a></code></div>
+<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="AvroReadOptions.html" title="class in org.apache.datafusion">AvroReadOptions</a></code></div>
 <div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#schema(org.apache.arrow.vector.types.pojo.Schema)" class="member-name-link">schema</a><wbr>(org.apache.arrow.vector.types.pojo.Schema&nbsp;schema)</code></div>
 <div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">&nbsp;</div>
 </div>
@@ -140,8 +141,8 @@ loadScripts(document, 'script');</script>
 <ul class="member-list">
 <li>
 <section class="detail" id="&lt;init&gt;()">
-<h3>ArrowReadOptions</h3>
-<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="element-name">ArrowReadOptions</span>()</div>
+<h3>AvroReadOptions</h3>
+<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="element-name">AvroReadOptions</span>()</div>
 </section>
 </li>
 </ul>
@@ -155,13 +156,13 @@ loadScripts(document, 'script');</script>
 <li>
 <section class="detail" id="fileExtension(java.lang.String)">
 <h3>fileExtension</h3>
-<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="ArrowReadOptions.html" title="class in org.apache.datafusion">ArrowReadOptions</a></span>&nbsp;<span class="element-name">fileExtension</span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;ext)</span></div>
+<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="AvroReadOptions.html" title="class in org.apache.datafusion">AvroReadOptions</a></span>&nbsp;<span class="element-name">fileExtension</span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;ext)</span></div>
 </section>
 </li>
 <li>
 <section class="detail" id="schema(org.apache.arrow.vector.types.pojo.Schema)">
 <h3>schema</h3>
-<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="ArrowReadOptions.html" title="class in org.apache.datafusion">ArrowReadOptions</a></span>&nbsp;<span class="element-name">schema</span><wbr><span class="parameters">(org.apache.arrow.vector.types.pojo.Schema&nbsp;schema)</span></div>
+<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="AvroReadOptions.html" title="class in org.apache.datafusion">AvroReadOptions</a></span>&nbsp;<span class="element-name">schema</span><wbr><span class="parameters">(org.apache.arrow.vector.types.pojo.Schema&nbsp;schema)</span></div>
 </section>
 </li>
 </ul>
diff --git a/api/org/apache/datafusion/ColumnarValue.Array.html b/api/org/apache/datafusion/ColumnarValue.Array.html
index 1c3511c..e1ec7c7 100644
--- a/api/org/apache/datafusion/ColumnarValue.Array.html
+++ b/api/org/apache/datafusion/ColumnarValue.Array.html
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML>
 <html lang>
 <head>
-<!-- Generated by javadoc (17) on Mon May 18 17:40:42 UTC 2026 -->
+<!-- Generated by javadoc (17) on Tue May 19 22:05:47 UTC 2026 -->
 <title>ColumnarValue.Array (Apache DataFusion Java 0.1.0-SNAPSHOT)</title>
 <meta name="viewport" content="width=device-width, initial-scale=1">
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<meta name="dc.created" content="2026-05-18">
+<meta name="dc.created" content="2026-05-19">
 <meta name="description" content="declaration: package: org.apache.datafusion, interface: ColumnarValue, record: Array">
 <meta name="generator" content="javadoc/ClassWriterImpl">
 <link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
diff --git a/api/org/apache/datafusion/ColumnarValue.Scalar.html b/api/org/apache/datafusion/ColumnarValue.Scalar.html
index fd22ed1..1013565 100644
--- a/api/org/apache/datafusion/ColumnarValue.Scalar.html
+++ b/api/org/apache/datafusion/ColumnarValue.Scalar.html
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML>
 <html lang>
 <head>
-<!-- Generated by javadoc (17) on Mon May 18 17:40:42 UTC 2026 -->
+<!-- Generated by javadoc (17) on Tue May 19 22:05:47 UTC 2026 -->
 <title>ColumnarValue.Scalar (Apache DataFusion Java 0.1.0-SNAPSHOT)</title>
 <meta name="viewport" content="width=device-width, initial-scale=1">
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<meta name="dc.created" content="2026-05-18">
+<meta name="dc.created" content="2026-05-19">
 <meta name="description" content="declaration: package: org.apache.datafusion, interface: ColumnarValue, record: Scalar">
 <meta name="generator" content="javadoc/ClassWriterImpl">
 <link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
diff --git a/api/org/apache/datafusion/ColumnarValue.html b/api/org/apache/datafusion/ColumnarValue.html
index cb95183..31dc2b7 100644
--- a/api/org/apache/datafusion/ColumnarValue.html
+++ b/api/org/apache/datafusion/ColumnarValue.html
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML>
 <html lang>
 <head>
-<!-- Generated by javadoc (17) on Mon May 18 17:40:42 UTC 2026 -->
+<!-- Generated by javadoc (17) on Tue May 19 22:05:47 UTC 2026 -->
 <title>ColumnarValue (Apache DataFusion Java 0.1.0-SNAPSHOT)</title>
 <meta name="viewport" content="width=device-width, initial-scale=1">
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<meta name="dc.created" content="2026-05-18">
+<meta name="dc.created" content="2026-05-19">
 <meta name="description" content="declaration: package: org.apache.datafusion, interface: ColumnarValue">
 <meta name="generator" content="javadoc/ClassWriterImpl">
 <link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
diff --git a/api/org/apache/datafusion/CsvReadOptions.html b/api/org/apache/datafusion/CsvReadOptions.html
index c9d18b8..d48fffb 100644
--- a/api/org/apache/datafusion/CsvReadOptions.html
+++ b/api/org/apache/datafusion/CsvReadOptions.html
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML>
 <html lang>
 <head>
-<!-- Generated by javadoc (17) on Mon May 18 17:40:42 UTC 2026 -->
+<!-- Generated by javadoc (17) on Tue May 19 22:05:47 UTC 2026 -->
 <title>CsvReadOptions (Apache DataFusion Java 0.1.0-SNAPSHOT)</title>
 <meta name="viewport" content="width=device-width, initial-scale=1">
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<meta name="dc.created" content="2026-05-18">
+<meta name="dc.created" content="2026-05-19">
 <meta name="description" content="declaration: package: org.apache.datafusion, class: CsvReadOptions">
 <meta name="generator" content="javadoc/ClassWriterImpl">
 <link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
diff --git a/api/org/apache/datafusion/CsvReadOptions.html b/api/org/apache/datafusion/CsvWriteOptions.html
similarity index 57%
copy from api/org/apache/datafusion/CsvReadOptions.html
copy to api/org/apache/datafusion/CsvWriteOptions.html
index c9d18b8..ca1e9ae 100644
--- a/api/org/apache/datafusion/CsvReadOptions.html
+++ b/api/org/apache/datafusion/CsvWriteOptions.html
@@ -1,12 +1,12 @@
 <!DOCTYPE HTML>
 <html lang>
 <head>
-<!-- Generated by javadoc (17) on Mon May 18 17:40:42 UTC 2026 -->
-<title>CsvReadOptions (Apache DataFusion Java 0.1.0-SNAPSHOT)</title>
+<!-- Generated by javadoc (17) on Tue May 19 22:05:47 UTC 2026 -->
+<title>CsvWriteOptions (Apache DataFusion Java 0.1.0-SNAPSHOT)</title>
 <meta name="viewport" content="width=device-width, initial-scale=1">
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<meta name="dc.created" content="2026-05-18">
-<meta name="description" content="declaration: package: org.apache.datafusion, class: CsvReadOptions">
+<meta name="dc.created" content="2026-05-19">
+<meta name="description" content="declaration: package: org.apache.datafusion, class: CsvWriteOptions">
 <meta name="generator" content="javadoc/ClassWriterImpl">
 <link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
 <link rel="stylesheet" type="text/css" href="../../../script-dir/jquery-ui.min.css" title="Style">
@@ -35,7 +35,7 @@ loadScripts(document, 'script');</script>
 <li><a href="../../../index.html">Overview</a></li>
 <li><a href="package-summary.html">Package</a></li>
 <li class="nav-bar-cell1-rev">Class</li>
-<li><a href="class-use/CsvReadOptions.html">Use</a></li>
+<li><a href="class-use/CsvWriteOptions.html">Use</a></li>
 <li><a href="package-tree.html">Tree</a></li>
 <li><a href="../../../index-all.html">Index</a></li>
 <li><a href="../../../help-doc.html#class">Help</a></li>
@@ -70,22 +70,28 @@ loadScripts(document, 'script');</script>
 <!-- ======== START OF CLASS DATA ======== -->
 <div class="header">
 <div class="sub-title"><span class="package-label-in-type">Package</span>&nbsp;<a href="package-summary.html">org.apache.datafusion</a></div>
-<h1 title="Class CsvReadOptions" class="title">Class CsvReadOptions</h1>
+<h1 title="Class CsvWriteOptions" class="title">Class CsvWriteOptions</h1>
 </div>
 <div class="inheritance" title="Inheritance Tree"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">java.lang.Object</a>
-<div class="inheritance">org.apache.datafusion.CsvReadOptions</div>
+<div class="inheritance">org.apache.datafusion.CsvWriteOptions</div>
 </div>
 <section class="class-description" id="class-description">
 <hr>
-<div class="type-signature"><span class="modifiers">public final class </span><span class="element-name type-name-label">CsvReadOptions</span>
+<div class="type-signature"><span class="modifiers">public final class </span><span class="element-name type-name-label">CsvWriteOptions</span>
 <span class="extends-implements">extends <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a></span></div>
-<div class="block">Configuration knobs for CSV sources passed to <a href="SessionContext.html#registerCsv(java.lang.String,java.lang.String,org.apache.datafusion.CsvReadOptions)"><code>SessionContext.registerCsv(String, String, CsvReadOptions)</code></a> and <a href="SessionContext.html#readCsv(java.lang.String,org.apache.datafusion.CsvReadOptions)"><code>SessionContext.readCsv(String, CsvReadOptions)</code></a>.
+<div class="block">Configuration knobs for writing CSV, passed to <a href="DataFrame.html#writeCsv(java.lang.String,org.apache.datafusion.CsvWriteOptions)"><code>DataFrame.writeCsv(String, CsvWriteOptions)</code></a>.
 
- <p>Mirrors a subset of DataFusion's <code>CsvReadOptions</code>. All setters return <code>this</code> for
- fluent chaining. Defaults match the Rust struct: <code>hasHeader = true</code>, <code>delimiter =
- ','</code>, <code>quote = '"'</code>, <code>fileExtension = ".csv"</code>, <code>fileCompressionType =
- UNCOMPRESSED</code>, all other fields <code>null</code> (meaning the DataFusion default is used, or the
- schema is inferred from the file).</div>
+ <p>Mirrors a subset of DataFusion's <code>DataFrameWriteOptions</code> and the writer-side <code>
+ CsvOptions</code>. All setters return <code>this</code> for fluent chaining. Defaults: every field <code>
+ null</code> or empty (meaning the DataFusion default is used).
+
+ <p>Path semantics: when <a href="#singleFileOutput(boolean)"><code>singleFileOutput(boolean)</code></a> is <code>true</code>, the path passed to
+ <code>writeCsv</code> is the literal output filename. When left unset (the default) and there are no
+ partition columns, the path is treated as a directory that DataFusion populates with one or more
+ part-files.
+
+ <p>Compression reuses <a href="FileCompressionType.html" title="enum class in org.apache.datafusion"><code>FileCompressionType</code></a> -- both the read and write sides accept the
+ same codec set (<code>UNCOMPRESSED</code>, <code>GZIP</code>, <code>BZIP2</code>, <code>XZ</code>, <code>ZSTD</code>).</div>
 </section>
 <section class="summary">
 <ul class="summary-list">
@@ -97,7 +103,7 @@ loadScripts(document, 'script');</script>
 <div class="summary-table two-column-summary">
 <div class="table-header col-first">Constructor</div>
 <div class="table-header col-last">Description</div>
-<div class="col-constructor-name even-row-color"><code><a href="#%3Cinit%3E()" class="member-name-link">CsvReadOptions</a>()</code></div>
+<div class="col-constructor-name even-row-color"><code><a href="#%3Cinit%3E()" class="member-name-link">CsvWriteOptions</a>()</code></div>
 <div class="col-last even-row-color">&nbsp;</div>
 </div>
 </section>
@@ -113,39 +119,46 @@ loadScripts(document, 'script');</script>
 <div class="table-header col-first">Modifier and Type</div>
 <div class="table-header col-second">Method</div>
 <div class="table-header col-last">Description</div>
-<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="CsvReadOptions.html" title="class in org.apache.datafusion">CsvReadOptions</a></code></div>
-<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#comment(byte)" class="member-name-link">comment</a><wbr>(byte&nbsp;b)</code></div>
-<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">&nbsp;</div>
-<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="CsvReadOptions.html" title="class in org.apache.datafusion">CsvReadOptions</a></code></div>
-<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#delimiter(byte)" class="member-name-link">delimiter</a><wbr>(byte&nbsp;b)</code></div>
-<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">&nbsp;</div>
-<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="CsvReadOptions.html" title="class in org.apache.datafusion">CsvReadOptions</a></code></div>
-<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#escape(byte)" class="member-name-link">escape</a><wbr>(byte&nbsp;b)</code></div>
-<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">&nbsp;</div>
-<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="CsvReadOptions.html" title="class in org.apache.datafusion">CsvReadOptions</a></code></div>
-<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#fileCompressionType(org.apache.datafusion.FileCompressionType)" class="member-name-link">fileCompressionType</a><wbr>(<a href="FileCompressionType.html" title="enum class in org.apache.datafusion">FileCompressionType</a>&nbsp;t)</code></div>
-<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">&nbsp;</div>
-<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="CsvReadOptions.html" title="class in org.apache.datafusion">CsvReadOptions</a></code></div>
-<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#fileExtension(java.lang.String)" class="member-name-link">fileExtension</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;ext)</code></div>
-<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">&nbsp;</div>
-<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="CsvReadOptions.html" title="class in org.apache.datafusion">CsvReadOptions</a></code></div>
+<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="CsvWriteOptions.html" title="class in org.apache.datafusion">CsvWriteOptions</a></code></div>
+<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#delimiter(byte)" class="member-name-link">delimiter</a><wbr>(byte&nbsp;b)</code></div>
+<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
+<div class="block">Field delimiter byte.</div>
+</div>
+<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="CsvWriteOptions.html" title="class in org.apache.datafusion">CsvWriteOptions</a></code></div>
+<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#escape(byte)" class="member-name-link">escape</a><wbr>(byte&nbsp;b)</code></div>
+<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
+<div class="block">Escape character byte.</div>
+</div>
+<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="CsvWriteOptions.html" title="class in org.apache.datafusion">CsvWriteOptions</a></code></div>
+<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#fileCompressionType(org.apache.datafusion.FileCompressionType)" class="member-name-link">fileCompressionType</a><wbr>(<a href="FileCompressionType.html" title="enum class in org.apache.datafusion">FileCompressionType</a>&nbsp;t)</code></div>
+<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
+<div class="block">Output compression codec.</div>
+</div>
+<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="CsvWriteOptions.html" title="class in org.apache.datafusion">CsvWriteOptions</a></code></div>
 <div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#hasHeader(boolean)" class="member-name-link">hasHeader</a><wbr>(boolean&nbsp;v)</code></div>
-<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">&nbsp;</div>
-<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="CsvReadOptions.html" title="class in org.apache.datafusion">CsvReadOptions</a></code></div>
-<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#newlinesInValues(boolean)" class="member-name-link">newlinesInValues</a><wbr>(boolean&nbsp;v)</code></div>
-<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">&nbsp;</div>
-<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="CsvReadOptions.html" title="class in org.apache.datafusion">CsvReadOptions</a></code></div>
-<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#quote(byte)" class="member-name-link">quote</a><wbr>(byte&nbsp;b)</code></div>
-<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">&nbsp;</div>
-<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="CsvReadOptions.html" title="class in org.apache.datafusion">CsvReadOptions</a></code></div>
-<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#schema(org.apache.arrow.vector.types.pojo.Schema)" class="member-name-link">schema</a><wbr>(org.apache.arrow.vector.types.pojo.Schema&nbsp;schema)</code></div>
-<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">&nbsp;</div>
-<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="CsvReadOptions.html" title="class in org.apache.datafusion">CsvReadOptions</a></code></div>
-<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#schemaInferMaxRecords(long)" class="member-name-link">schemaInferMaxRecords</a><wbr>(long&nbsp;n)</code></div>
-<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">&nbsp;</div>
-<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="CsvReadOptions.html" title="class in org.apache.datafusion">CsvReadOptions</a></code></div>
-<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#terminator(byte)" class="member-name-link">terminator</a><wbr>(byte&nbsp;b)</code></div>
-<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">&nbsp;</div>
+<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
+<div class="block">Whether to write a header row.</div>
+</div>
+<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="CsvWriteOptions.html" title="class in org.apache.datafusion">CsvWriteOptions</a></code></div>
+<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#nullValue(java.lang.String)" class="member-name-link">nullValue</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;s)</code></div>
+<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
+<div class="block">String to write for SQL NULL values.</div>
+</div>
+<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="CsvWriteOptions.html" title="class in org.apache.datafusion">CsvWriteOptions</a></code></div>
+<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#partitionCols(java.lang.String...)" class="member-name-link">partitionCols</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>...&nbsp;cols)</code></div>
+<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
+<div class="block">Hive-style partition columns.</div>
+</div>
+<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="CsvWriteOptions.html" title="class in org.apache.datafusion">CsvWriteOptions</a></code></div>
+<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#quote(byte)" class="member-name-link">quote</a><wbr>(byte&nbsp;b)</code></div>
+<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
+<div class="block">Quote character byte.</div>
+</div>
+<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="CsvWriteOptions.html" title="class in org.apache.datafusion">CsvWriteOptions</a></code></div>
+<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#singleFileOutput(boolean)" class="member-name-link">singleFileOutput</a><wbr>(boolean&nbsp;v)</code></div>
+<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
+<div class="block">When <code>true</code>, write to a single file at the supplied path.</div>
+</div>
 </div>
 </div>
 </div>
@@ -165,8 +178,8 @@ loadScripts(document, 'script');</script>
 <ul class="member-list">
 <li>
 <section class="detail" id="&lt;init&gt;()">
-<h3>CsvReadOptions</h3>
-<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="element-name">CsvReadOptions</span>()</div>
+<h3>CsvWriteOptions</h3>
+<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="element-name">CsvWriteOptions</span>()</div>
 </section>
 </li>
 </ul>
@@ -178,69 +191,62 @@ loadScripts(document, 'script');</script>
 <h2>Method Details</h2>
 <ul class="member-list">
 <li>
+<section class="detail" id="singleFileOutput(boolean)">
+<h3>singleFileOutput</h3>
+<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="CsvWriteOptions.html" title="class in org.apache.datafusion">CsvWriteOptions</a></span>&nbsp;<span class="element-name">singleFileOutput</span><wbr><span class="parameters">(boolean&nbsp;v)</span></div>
+<div class="block">When <code>true</code>, write to a single file at the supplied path. When left unset (the default)
+ and no partition columns are configured, the path is treated as a directory and DataFusion
+ writes one or more part-files.</div>
+</section>
+</li>
+<li>
+<section class="detail" id="partitionCols(java.lang.String...)">
+<h3>partitionCols</h3>
+<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="CsvWriteOptions.html" title="class in org.apache.datafusion">CsvWriteOptions</a></span>&nbsp;<span class="element-name">partitionCols</span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>...&nbsp;cols)</span></div>
+<div class="block">Hive-style partition columns. Each column listed here is removed from the data rows and encoded
+ into the directory layout (one subdirectory per distinct value). Mutually exclusive with <a href="#singleFileOutput(boolean)"><code>singleFileOutput(boolean)</code></a> -- DataFusion rejects the combination at write time.</div>
+</section>
+</li>
+<li>
 <section class="detail" id="hasHeader(boolean)">
 <h3>hasHeader</h3>
-<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="CsvReadOptions.html" title="class in org.apache.datafusion">CsvReadOptions</a></span>&nbsp;<span class="element-name">hasHeader</span><wbr><span class="parameters">(boolean&nbsp;v)</span></div>
+<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="CsvWriteOptions.html" title="class in org.apache.datafusion">CsvWriteOptions</a></span>&nbsp;<span class="element-name">hasHeader</span><wbr><span class="parameters">(boolean&nbsp;v)</span></div>
+<div class="block">Whether to write a header row. Defaults to DataFusion's setting (typically <code>true</code>).</div>
 </section>
 </li>
 <li>
 <section class="detail" id="delimiter(byte)">
 <h3>delimiter</h3>
-<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="CsvReadOptions.html" title="class in org.apache.datafusion">CsvReadOptions</a></span>&nbsp;<span class="element-name">delimiter</span><wbr><span class="parameters">(byte&nbsp;b)</span></div>
+<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="CsvWriteOptions.html" title="class in org.apache.datafusion">CsvWriteOptions</a></span>&nbsp;<span class="element-name">delimiter</span><wbr><span class="parameters">(byte&nbsp;b)</span></div>
+<div class="block">Field delimiter byte. Defaults to <code>','</code>.</div>
 </section>
 </li>
 <li>
 <section class="detail" id="quote(byte)">
 <h3>quote</h3>
-<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="CsvReadOptions.html" title="class in org.apache.datafusion">CsvReadOptions</a></span>&nbsp;<span class="element-name">quote</span><wbr><span class="parameters">(byte&nbsp;b)</span></div>
-</section>
-</li>
-<li>
-<section class="detail" id="terminator(byte)">
-<h3>terminator</h3>
-<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="CsvReadOptions.html" title="class in org.apache.datafusion">CsvReadOptions</a></span>&nbsp;<span class="element-name">terminator</span><wbr><span class="parameters">(byte&nbsp;b)</span></div>
+<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="CsvWriteOptions.html" title="class in org.apache.datafusion">CsvWriteOptions</a></span>&nbsp;<span class="element-name">quote</span><wbr><span class="parameters">(byte&nbsp;b)</span></div>
+<div class="block">Quote character byte. Defaults to <code>'"'</code>.</div>
 </section>
 </li>
 <li>
 <section class="detail" id="escape(byte)">
 <h3>escape</h3>
-<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="CsvReadOptions.html" title="class in org.apache.datafusion">CsvReadOptions</a></span>&nbsp;<span class="element-name">escape</span><wbr><span class="parameters">(byte&nbsp;b)</span></div>
-</section>
-</li>
-<li>
-<section class="detail" id="comment(byte)">
-<h3>comment</h3>
-<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="CsvReadOptions.html" title="class in org.apache.datafusion">CsvReadOptions</a></span>&nbsp;<span class="element-name">comment</span><wbr><span class="parameters">(byte&nbsp;b)</span></div>
+<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="CsvWriteOptions.html" title="class in org.apache.datafusion">CsvWriteOptions</a></span>&nbsp;<span class="element-name">escape</span><wbr><span class="parameters">(byte&nbsp;b)</span></div>
+<div class="block">Escape character byte. Defaults to none.</div>
 </section>
 </li>
 <li>
-<section class="detail" id="newlinesInValues(boolean)">
-<h3>newlinesInValues</h3>
-<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="CsvReadOptions.html" title="class in org.apache.datafusion">CsvReadOptions</a></span>&nbsp;<span class="element-name">newlinesInValues</span><wbr><span class="parameters">(boolean&nbsp;v)</span></div>
-</section>
-</li>
-<li>
-<section class="detail" id="schemaInferMaxRecords(long)">
-<h3>schemaInferMaxRecords</h3>
-<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="CsvReadOptions.html" title="class in org.apache.datafusion">CsvReadOptions</a></span>&nbsp;<span class="element-name">schemaInferMaxRecords</span><wbr><span class="parameters">(long&nbsp;n)</span></div>
-</section>
-</li>
-<li>
-<section class="detail" id="fileExtension(java.lang.String)">
-<h3>fileExtension</h3>
-<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="CsvReadOptions.html" title="class in org.apache.datafusion">CsvReadOptions</a></span>&nbsp;<span class="element-name">fileExtension</span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;ext)</span></div>
+<section class="detail" id="nullValue(java.lang.String)">
+<h3>nullValue</h3>
+<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="CsvWriteOptions.html" title="class in org.apache.datafusion">CsvWriteOptions</a></span>&nbsp;<span class="element-name">nullValue</span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;s)</span></div>
+<div class="block">String to write for SQL NULL values. Defaults to the empty string.</div>
 </section>
 </li>
 <li>
 <section class="detail" id="fileCompressionType(org.apache.datafusion.FileCompressionType)">
 <h3>fileCompressionType</h3>
-<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="CsvReadOptions.html" title="class in org.apache.datafusion">CsvReadOptions</a></span>&nbsp;<span class="element-name">fileCompressionType</span><wbr><span class="parameters">(<a href="FileCompressionType.html" title="enum class in org.apache.datafusion">FileCompressionType</a>&nbsp;t)</span></div>
-</section>
-</li>
-<li>
-<section class="detail" id="schema(org.apache.arrow.vector.types.pojo.Schema)">
-<h3>schema</h3>
-<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="CsvReadOptions.html" title="class in org.apache.datafusion">CsvReadOptions</a></span>&nbsp;<span class="element-name">schema</span><wbr><span class="parameters">(org.apache.arrow.vector.types.pojo.Schema&nbsp;schema)</span></div>
+<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="CsvWriteOptions.html" title="class in org.apache.datafusion">CsvWriteOptions</a></span>&nbsp;<span class="element-name">fileCompressionType</span><wbr><span class="parameters">(<a href="FileCompressionType.html" title="enum class in org.apache.datafusion">FileCompressionType</a>&nbsp;t)</span></div>
+<div class="block">Output compression codec. Defaults to uncompressed.</div>
 </section>
 </li>
 </ul>
diff --git a/api/org/apache/datafusion/DataFrame.html b/api/org/apache/datafusion/DataFrame.html
index 995ffa2..ef6994c 100644
--- a/api/org/apache/datafusion/DataFrame.html
+++ b/api/org/apache/datafusion/DataFrame.html
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML>
 <html lang>
 <head>
-<!-- Generated by javadoc (17) on Mon May 18 17:40:42 UTC 2026 -->
+<!-- Generated by javadoc (17) on Tue May 19 22:05:47 UTC 2026 -->
 <title>DataFrame (Apache DataFusion Java 0.1.0-SNAPSHOT)</title>
 <meta name="viewport" content="width=device-width, initial-scale=1">
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<meta name="dc.created" content="2026-05-18">
+<meta name="dc.created" content="2026-05-19">
 <meta name="description" content="declaration: package: org.apache.datafusion, class: DataFrame">
 <meta name="generator" content="javadoc/ClassWriterImpl">
 <link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
@@ -85,11 +85,12 @@ loadScripts(document, 'script');</script>
 <span class="extends-implements">extends <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a>
 implements <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/AutoCloseable.html" title="class or interface in java.lang" class="external-link">AutoCloseable</a></span></div>
 <div class="block">A lazy representation of a query plan, mirroring the Rust DataFusion <code>DataFrame</code>. Created
- by <a href="SessionContext.html#sql(java.lang.String)"><code>SessionContext.sql(String)</code></a> or other planning entry points and executed by <a href="#collect(org.apache.arrow.memory.BufferAllocator)"><code>collect(org.apache.arrow.memory.BufferAllocator)</code></a>.
+ by <a href="SessionContext.html#sql(java.lang.String)"><code>SessionContext.sql(String)</code></a> or other planning entry points and executed by either
+ <a href="#collect(org.apache.arrow.memory.BufferAllocator)"><code>collect(org.apache.arrow.memory.BufferAllocator)</code></a> (materializes every batch on the native heap before returning) or <a href="#executeStream(org.apache.arrow.memory.BufferAllocator)"><code>executeStream(org.apache.arrow.memory.BufferAllocator)</code></a> (yields one batch at a time as Java drains the reader).
 
- <p>Instances are <strong>not thread-safe</strong> and must be closed. <a href="#collect(org.apache.arrow.memory.BufferAllocator)"><code>collect(org.apache.arrow.memory.BufferAllocator)</code></a> consumes
- the DataFrame: a successfully collected DataFrame cannot be collected again, and <a href="#close()"><code>close()</code></a>
- on an already-collected instance is a no-op.</div>
+ <p>Instances are <strong>not thread-safe</strong> and must be closed. Both <a href="#collect(org.apache.arrow.memory.BufferAllocator)"><code>collect(org.apache.arrow.memory.BufferAllocator)</code></a> and
+ <a href="#executeStream(org.apache.arrow.memory.BufferAllocator)"><code>executeStream(org.apache.arrow.memory.BufferAllocator)</code></a> consume the DataFrame: a successfully consumed DataFrame cannot be
+ consumed again by either method (or by other executors such as <a href="#count()"><code>count()</code></a>), and <a href="#close()"><code>close()</code></a> on an already-consumed instance is a no-op.</div>
 </section>
 <section class="summary">
 <ul class="summary-list">
@@ -127,69 +128,96 @@ implements <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base
 <div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
 <div class="block">Drop the named columns.</div>
 </div>
-<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="DataFrame.html" title="class in org.apache.datafusion">DataFrame</a></code></div>
-<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#filter(java.lang.String)" class="member-name-link">filter</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;predicate)</code></div>
+<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>org.apache.arrow.vector.ipc.ArrowReader</code></div>
+<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#executeStream(org.apache.arrow.memory.BufferAllocator)" class="member-name-link">executeStream</a><wbr>(org.apache.arrow.memory.BufferAllocator&nbsp;allocator)</code></div>
 <div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
-<div class="block">Apply a SQL predicate to produce a filtered DataFrame.</div>
+<div class="block">Execute the plan and return its record batches as a streaming <code>ArrowReader</code>.</div>
 </div>
 <div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="DataFrame.html" title="class in org.apache.datafusion">DataFrame</a></code></div>
-<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#limit(int)" class="member-name-link">limit</a><wbr>(int&nbsp;fetch)</code></div>
+<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#filter(java.lang.String)" class="member-name-link">filter</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;predicate)</code></div>
 <div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
-<div class="block">Take the first <code>fetch</code> rows.</div>
+<div class="block">Apply a SQL predicate to produce a filtered DataFrame.</div>
 </div>
 <div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="DataFrame.html" title="class in org.apache.datafusion">DataFrame</a></code></div>
-<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#limit(int,int)" class="member-name-link">limit</a><wbr>(int&nbsp;skip,
- int&nbsp;fetch)</code></div>
+<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#limit(int)" class="member-name-link">limit</a><wbr>(int&nbsp;fetch)</code></div>
 <div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
-<div class="block">Skip <code>skip</code> rows, then take the next <code>fetch</code> rows.</div>
+<div class="block">Take the first <code>fetch</code> rows.</div>
 </div>
 <div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="DataFrame.html" title="class in org.apache.datafusion">DataFrame</a></code></div>
-<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#select(java.lang.String...)" class="member-name-link">select</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>...&nbsp;columnNames)</code></div>
+<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#limit(int,int)" class="member-name-link">limit</a><wbr>(int&nbsp;skip,
+ int&nbsp;fetch)</code></div>
 <div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
-<div class="block">Project the listed columns into a new DataFrame.</div>
+<div class="block">Skip <code>skip</code> rows, then take the next <code>fetch</code> rows.</div>
 </div>
-<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>void</code></div>
-<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#show()" class="member-name-link">show</a>()</code></div>
+<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="DataFrame.html" title="class in org.apache.datafusion">DataFrame</a></code></div>
+<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#select(java.lang.String...)" class="member-name-link">select</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>...&nbsp;columnNames)</code></div>
 <div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
-<div class="block">Execute the plan and print formatted batches to native stdout.</div>
+<div class="block">Project the listed columns into a new DataFrame.</div>
 </div>
 <div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>void</code></div>
-<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#show(int)" class="member-name-link">show</a><wbr>(int&nbsp;limit)</code></div>
+<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#show()" class="member-name-link">show</a>()</code></div>
 <div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
-<div class="block">Execute the plan and print the first <code>limit</code> rows to native stdout.</div>
+<div class="block">Execute the plan and print formatted batches to native stdout.</div>
 </div>
-<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="DataFrame.html" title="class in org.apache.datafusion">DataFrame</a></code></div>
-<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#unnestColumns(java.lang.String...)" class="member-name-link">unnestColumns</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>...&nbsp;columns)</code></div>
+<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>void</code></div>
+<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#show(int)" class="member-name-link">show</a><wbr>(int&nbsp;limit)</code></div>
 <div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
-<div class="block">Expand list or struct columns into rows or fields, with default <a href="UnnestOptions.html" title="class in org.apache.datafusion"><code>UnnestOptions</code></a> (i.e.</div>
+<div class="block">Execute the plan and print the first <code>limit</code> rows to native stdout.</div>
 </div>
 <div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="DataFrame.html" title="class in org.apache.datafusion">DataFrame</a></code></div>
-<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#unnestColumns(org.apache.datafusion.UnnestOptions,java.lang.String...)" class="member-name-link">unnestColumns</a><wbr>(<a href="UnnestOptions.html" title="class in org.apache.datafusion">UnnestOptions</a>&nbsp;options,
- <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>...&nbsp;columns)</code></div>
+<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#unnestColumns(java.lang.String...)" class="member-name-link">unnestColumns</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>...&nbsp;columns)</code></div>
 <div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
-<div class="block">Expand list or struct columns into rows or fields with the supplied <a href="UnnestOptions.html" title="class in org.apache.datafusion"><code>UnnestOptions</code></a>.</div>
+<div class="block">Expand list or struct columns into rows or fields, with default <a href="UnnestOptions.html" title="class in org.apache.datafusion"><code>UnnestOptions</code></a> (i.e.</div>
 </div>
 <div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="DataFrame.html" title="class in org.apache.datafusion">DataFrame</a></code></div>
-<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#withColumn(java.lang.String,java.lang.String)" class="member-name-link">withColumn</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;name,
- <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;expr)</code></div>
+<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#unnestColumns(org.apache.datafusion.UnnestOptions,java.lang.String...)" class="member-name-link">unnestColumns</a><wbr>(<a href="UnnestOptions.html" title="class in org.apache.datafusion">UnnestOptions</a>&nbsp;options,
+ <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>...&nbsp;columns)</code></div>
 <div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
-<div class="block">Add a column to this DataFrame computed from a SQL expression.</div>
+<div class="block">Expand list or struct columns into rows or fields with the supplied <a href="UnnestOptions.html" title="class in org.apache.datafusion"><code>UnnestOptions</code></a>.</div>
 </div>
 <div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="DataFrame.html" title="class in org.apache.datafusion">DataFrame</a></code></div>
-<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#withColumnRenamed(java.lang.String,java.lang.String)" class="member-name-link">withColumnRenamed</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;oldName,
- <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;newName)</code></div>
+<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#withColumn(java.lang.String,java.lang.String)" class="member-name-link">withColumn</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;name,
+ <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;expr)</code></div>
 <div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
+<div class="block">Add a column to this DataFrame computed from a SQL expression.</div>
+</div>
+<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="DataFrame.html" title="class in org.apache.datafusion">DataFrame</a></code></div>
+<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#withColumnRenamed(java.lang.String,java.lang.String)" class="member-name-link">withColumnRenamed</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;oldName,
+ <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;newName)</code></div>
+<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
 <div class="block">Rename a column.</div>
 </div>
+<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>void</code></div>
+<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#writeCsv(java.lang.String)" class="member-name-link">writeCsv</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;path)</code></div>
+<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
+<div class="block">Materialize this DataFrame as CSV at <code>path</code>.</div>
+</div>
 <div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>void</code></div>
-<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#writeParquet(java.lang.String)" class="member-name-link">writeParquet</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;path)</code></div>
+<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#writeCsv(java.lang.String,org.apache.datafusion.CsvWriteOptions)" class="member-name-link">writeCsv</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;path,
+ <a href="CsvWriteOptions.html" title="class in org.apache.datafusion">CsvWriteOptions</a>&nbsp;options)</code></div>
 <div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
-<div class="block">Materialize this DataFrame as Parquet at <code>path</code>.</div>
+<div class="block">Materialize this DataFrame as CSV at <code>path</code> with the supplied <a href="CsvWriteOptions.html" title="class in org.apache.datafusion"><code>CsvWriteOptions</code></a>.</div>
 </div>
 <div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>void</code></div>
-<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#writeParquet(java.lang.String,org.apache.datafusion.ParquetWriteOptions)" class="member-name-link">writeParquet</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;path,
- <a href="ParquetWriteOptions.html" title="class in org.apache.datafusion">ParquetWriteOptions</a>&nbsp;options)</code></div>
+<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#writeJson(java.lang.String)" class="member-name-link">writeJson</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;path)</code></div>
 <div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
+<div class="block">Materialize this DataFrame as newline-delimited JSON at <code>path</code>.</div>
+</div>
+<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>void</code></div>
+<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#writeJson(java.lang.String,org.apache.datafusion.JsonWriteOptions)" class="member-name-link">writeJson</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;path,
+ <a href="JsonWriteOptions.html" title="class in org.apache.datafusion">JsonWriteOptions</a>&nbsp;options)</code></div>
+<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
+<div class="block">Materialize this DataFrame as newline-delimited JSON at <code>path</code> with the supplied <a href="JsonWriteOptions.html" title="class in org.apache.datafusion"><code>JsonWriteOptions</code></a>.</div>
+</div>
+<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>void</code></div>
+<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#writeParquet(java.lang.String)" class="member-name-link">writeParquet</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;path)</code></div>
+<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
+<div class="block">Materialize this DataFrame as Parquet at <code>path</code>.</div>
+</div>
+<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>void</code></div>
+<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#writeParquet(java.lang.String,org.apache.datafusion.ParquetWriteOptions)" class="member-name-link">writeParquet</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;path,
+ <a href="ParquetWriteOptions.html" title="class in org.apache.datafusion">ParquetWriteOptions</a>&nbsp;options)</code></div>
+<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
 <div class="block">Materialize this DataFrame as Parquet at <code>path</code> with the supplied <a href="ParquetWriteOptions.html" title="class in org.apache.datafusion"><code>ParquetWriteOptions</code></a>.</div>
 </div>
 </div>
@@ -217,7 +245,28 @@ implements <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base
 
  <p>Consumes this DataFrame: the native plan is released as soon as the stream is established.
  The caller is responsible for closing the returned reader, and the supplied allocator must
- outlive it.</div>
+ outlive it.
+
+ <p>This method materializes every batch on the native heap before the first batch crosses the
+ FFI boundary, which can OOM the Rust side for unbounded or very large result sets. Prefer
+ <a href="#executeStream(org.apache.arrow.memory.BufferAllocator)"><code>executeStream(BufferAllocator)</code></a> for analytics-scale queries.</div>
+</section>
+</li>
+<li>
+<section class="detail" id="executeStream(org.apache.arrow.memory.BufferAllocator)">
+<h3>executeStream</h3>
+<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">org.apache.arrow.vector.ipc.ArrowReader</span>&nbsp;<span class="element-name">executeStream</span><wbr><span class="parameters">(org.apache.arrow.memory.BufferAllocator&nbsp;allocator)</span></div>
+<div class="block">Execute the plan and return its record batches as a streaming <code>ArrowReader</code>. Each call to
+ <code>ArrowReader.loadNextBatch()</code> drives one async <code>stream.next()</code> on the native side, so
+ memory pressure stays bounded by the executor pipeline plus one in-flight batch instead of the
+ full result set.
+
+ <p>Consumes this DataFrame with the same lifecycle rules as <a href="#collect(org.apache.arrow.memory.BufferAllocator)"><code>collect(BufferAllocator)</code></a>:
+ the native plan is released as soon as the stream is established, the caller closes the
+ returned reader, and the supplied allocator must outlive it.
+
+ <p>For result sets that fit comfortably in native memory and are read in their entirety, <a href="#collect(org.apache.arrow.memory.BufferAllocator)"><code>collect(BufferAllocator)</code></a> remains a reasonable choice. For TB-scale or unbounded result sets,
+ use this method.</div>
 </section>
 </li>
 <li>
@@ -361,6 +410,61 @@ implements <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base
 </section>
 </li>
 <li>
+<section class="detail" id="writeCsv(java.lang.String)">
+<h3>writeCsv</h3>
+<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">void</span>&nbsp;<span class="element-name">writeCsv</span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;path)</span></div>
+<div class="block">Materialize this DataFrame as CSV at <code>path</code>. The path is treated as a directory unless
+ overridden via <a href="CsvWriteOptions.html#singleFileOutput(boolean)"><code>CsvWriteOptions.singleFileOutput(boolean)</code></a>. The receiver remains usable
+ and must still be closed independently.</div>
+<dl class="notes">
+<dt>Throws:</dt>
+<dd><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/RuntimeException.html" title="class or interface in java.lang" class="external-link">RuntimeException</a></code> - if the write fails.</dd>
+</dl>
+</section>
+</li>
+<li>
+<section class="detail" id="writeCsv(java.lang.String,org.apache.datafusion.CsvWriteOptions)">
+<h3>writeCsv</h3>
+<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">void</span>&nbsp;<span class="element-name">writeCsv</span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;path,
+ <a href="CsvWriteOptions.html" title="class in org.apache.datafusion">CsvWriteOptions</a>&nbsp;options)</span></div>
+<div class="block">Materialize this DataFrame as CSV at <code>path</code> with the supplied <a href="CsvWriteOptions.html" title="class in org.apache.datafusion"><code>CsvWriteOptions</code></a>.
+ The receiver remains usable and must still be closed independently.</div>
+<dl class="notes">
+<dt>Throws:</dt>
+<dd><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/IllegalArgumentException.html" title="class or interface in java.lang" class="external-link">IllegalArgumentException</a></code> - if <code>path</code> or <code>options</code> is <code>null</code>.</dd>
+<dd><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/RuntimeException.html" title="class or interface in java.lang" class="external-link">RuntimeException</a></code> - if the write fails (path inaccessible, invalid compression spec,
+     etc.).</dd>
+</dl>
+</section>
+</li>
+<li>
+<section class="detail" id="writeJson(java.lang.String)">
+<h3>writeJson</h3>
+<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">void</span>&nbsp;<span class="element-name">writeJson</span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;path)</span></div>
+<div class="block">Materialize this DataFrame as newline-delimited JSON at <code>path</code>. The path is treated as a
+ directory unless overridden via <a href="JsonWriteOptions.html#singleFileOutput(boolean)"><code>JsonWriteOptions.singleFileOutput(boolean)</code></a>. The
+ receiver remains usable and must still be closed independently.</div>
+<dl class="notes">
+<dt>Throws:</dt>
+<dd><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/RuntimeException.html" title="class or interface in java.lang" class="external-link">RuntimeException</a></code> - if the write fails.</dd>
+</dl>
+</section>
+</li>
+<li>
+<section class="detail" id="writeJson(java.lang.String,org.apache.datafusion.JsonWriteOptions)">
+<h3>writeJson</h3>
+<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">void</span>&nbsp;<span class="element-name">writeJson</span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;path,
+ <a href="JsonWriteOptions.html" title="class in org.apache.datafusion">JsonWriteOptions</a>&nbsp;options)</span></div>
+<div class="block">Materialize this DataFrame as newline-delimited JSON at <code>path</code> with the supplied <a href="JsonWriteOptions.html" title="class in org.apache.datafusion"><code>JsonWriteOptions</code></a>. The receiver remains usable and must still be closed independently.</div>
+<dl class="notes">
+<dt>Throws:</dt>
+<dd><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/IllegalArgumentException.html" title="class or interface in java.lang" class="external-link">IllegalArgumentException</a></code> - if <code>path</code> or <code>options</code> is <code>null</code>.</dd>
+<dd><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/RuntimeException.html" title="class or interface in java.lang" class="external-link">RuntimeException</a></code> - if the write fails (path inaccessible, invalid compression spec,
+     etc.).</dd>
+</dl>
+</section>
+</li>
+<li>
 <section class="detail" id="close()">
 <h3>close</h3>
 <div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">void</span>&nbsp;<span class="element-name">close</span>()</div>
diff --git a/api/org/apache/datafusion/FileCompressionType.html b/api/org/apache/datafusion/FileCompressionType.html
index 73770cc..f738721 100644
--- a/api/org/apache/datafusion/FileCompressionType.html
+++ b/api/org/apache/datafusion/FileCompressionType.html
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML>
 <html lang>
 <head>
-<!-- Generated by javadoc (17) on Mon May 18 17:40:42 UTC 2026 -->
+<!-- Generated by javadoc (17) on Tue May 19 22:05:47 UTC 2026 -->
 <title>FileCompressionType (Apache DataFusion Java 0.1.0-SNAPSHOT)</title>
 <meta name="viewport" content="width=device-width, initial-scale=1">
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<meta name="dc.created" content="2026-05-18">
+<meta name="dc.created" content="2026-05-19">
 <meta name="description" content="declaration: package: org.apache.datafusion, enum: FileCompressionType">
 <meta name="generator" content="javadoc/ClassWriterImpl">
 <link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
diff --git a/api/org/apache/datafusion/NdJsonReadOptions.html b/api/org/apache/datafusion/JsonWriteOptions.html
similarity index 65%
copy from api/org/apache/datafusion/NdJsonReadOptions.html
copy to api/org/apache/datafusion/JsonWriteOptions.html
index dec2e73..b22176a 100644
--- a/api/org/apache/datafusion/NdJsonReadOptions.html
+++ b/api/org/apache/datafusion/JsonWriteOptions.html
@@ -1,12 +1,12 @@
 <!DOCTYPE HTML>
 <html lang>
 <head>
-<!-- Generated by javadoc (17) on Mon May 18 17:40:42 UTC 2026 -->
-<title>NdJsonReadOptions (Apache DataFusion Java 0.1.0-SNAPSHOT)</title>
+<!-- Generated by javadoc (17) on Tue May 19 22:05:47 UTC 2026 -->
+<title>JsonWriteOptions (Apache DataFusion Java 0.1.0-SNAPSHOT)</title>
 <meta name="viewport" content="width=device-width, initial-scale=1">
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<meta name="dc.created" content="2026-05-18">
-<meta name="description" content="declaration: package: org.apache.datafusion, class: NdJsonReadOptions">
+<meta name="dc.created" content="2026-05-19">
+<meta name="description" content="declaration: package: org.apache.datafusion, class: JsonWriteOptions">
 <meta name="generator" content="javadoc/ClassWriterImpl">
 <link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
 <link rel="stylesheet" type="text/css" href="../../../script-dir/jquery-ui.min.css" title="Style">
@@ -35,7 +35,7 @@ loadScripts(document, 'script');</script>
 <li><a href="../../../index.html">Overview</a></li>
 <li><a href="package-summary.html">Package</a></li>
 <li class="nav-bar-cell1-rev">Class</li>
-<li><a href="class-use/NdJsonReadOptions.html">Use</a></li>
+<li><a href="class-use/JsonWriteOptions.html">Use</a></li>
 <li><a href="package-tree.html">Tree</a></li>
 <li><a href="../../../index-all.html">Index</a></li>
 <li><a href="../../../help-doc.html#class">Help</a></li>
@@ -70,21 +70,31 @@ loadScripts(document, 'script');</script>
 <!-- ======== START OF CLASS DATA ======== -->
 <div class="header">
 <div class="sub-title"><span class="package-label-in-type">Package</span>&nbsp;<a href="package-summary.html">org.apache.datafusion</a></div>
-<h1 title="Class NdJsonReadOptions" class="title">Class NdJsonReadOptions</h1>
+<h1 title="Class JsonWriteOptions" class="title">Class JsonWriteOptions</h1>
 </div>
 <div class="inheritance" title="Inheritance Tree"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">java.lang.Object</a>
-<div class="inheritance">org.apache.datafusion.NdJsonReadOptions</div>
+<div class="inheritance">org.apache.datafusion.JsonWriteOptions</div>
 </div>
 <section class="class-description" id="class-description">
 <hr>
-<div class="type-signature"><span class="modifiers">public final class </span><span class="element-name type-name-label">NdJsonReadOptions</span>
+<div class="type-signature"><span class="modifiers">public final class </span><span class="element-name type-name-label">JsonWriteOptions</span>
 <span class="extends-implements">extends <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a></span></div>
-<div class="block">Configuration knobs for newline-delimited JSON sources passed to <a href="SessionContext.html#registerJson(java.lang.String,java.lang.String,org.apache.datafusion.NdJsonReadOptions)"><code>SessionContext.registerJson(String, String, NdJsonReadOptions)</code></a> and <a href="SessionContext.html#readJson(java.lang.String,org.apache.datafusion.NdJsonReadOptions)"><code>SessionContext.readJson(String, NdJsonReadOptions)</code></a>.
+<div class="block">Configuration knobs for writing JSON, passed to <a href="DataFrame.html#writeJson(java.lang.String,org.apache.datafusion.JsonWriteOptions)"><code>DataFrame.writeJson(String, JsonWriteOptions)</code></a>.
 
- <p>Mirrors a subset of DataFusion's <code>NdJsonReadOptions</code>. All setters return <code>this</code>
- for fluent chaining. Defaults match the Rust struct: <code>fileExtension = ".json"</code>, <code>
- fileCompressionType = UNCOMPRESSED</code>; <code>schemaInferMaxRecords</code> unset (the DataFusion default
- is used).</div>
+ <p>Mirrors a subset of DataFusion's <code>DataFrameWriteOptions</code> and the writer-side <code>
+ JsonOptions</code>. All setters return <code>this</code> for fluent chaining. Defaults: every field <code>
+ null</code> or empty (meaning the DataFusion default is used).
+
+ <p>Path semantics: when <a href="#singleFileOutput(boolean)"><code>singleFileOutput(boolean)</code></a> is <code>true</code>, the path passed to
+ <code>writeJson</code> is the literal output filename. When left unset (the default) and there are no
+ partition columns, the path is treated as a directory that DataFusion populates with one or more
+ part-files.
+
+ <p>The output is always newline-delimited JSON (NDJSON). DataFusion's JSON writer does not emit
+ the bracketed array form, so there is no toggle for it here.
+
+ <p>Compression reuses <a href="FileCompressionType.html" title="enum class in org.apache.datafusion"><code>FileCompressionType</code></a> -- the same codec set (<code>UNCOMPRESSED</code>,
+ <code>GZIP</code>, <code>BZIP2</code>, <code>XZ</code>, <code>ZSTD</code>) the read side and the CSV writer accept.</div>
 </section>
 <section class="summary">
 <ul class="summary-list">
@@ -96,7 +106,7 @@ loadScripts(document, 'script');</script>
 <div class="summary-table two-column-summary">
 <div class="table-header col-first">Constructor</div>
 <div class="table-header col-last">Description</div>
-<div class="col-constructor-name even-row-color"><code><a href="#%3Cinit%3E()" class="member-name-link">NdJsonReadOptions</a>()</code></div>
+<div class="col-constructor-name even-row-color"><code><a href="#%3Cinit%3E()" class="member-name-link">JsonWriteOptions</a>()</code></div>
 <div class="col-last even-row-color">&nbsp;</div>
 </div>
 </section>
@@ -112,18 +122,21 @@ loadScripts(document, 'script');</script>
 <div class="table-header col-first">Modifier and Type</div>
 <div class="table-header col-second">Method</div>
 <div class="table-header col-last">Description</div>
-<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="NdJsonReadOptions.html" title="class in org.apache.datafusion">NdJsonReadOptions</a></code></div>
+<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="JsonWriteOptions.html" title="class in org.apache.datafusion">JsonWriteOptions</a></code></div>
 <div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#fileCompressionType(org.apache.datafusion.FileCompressionType)" class="member-name-link">fileCompressionType</a><wbr>(<a href="FileCompressionType.html" title="enum class in org.apache.datafusion">FileCompressionType</a>&nbsp;t)</code></div>
-<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">&nbsp;</div>
-<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="NdJsonReadOptions.html" title="class in org.apache.datafusion">NdJsonReadOptions</a></code></div>
-<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#fileExtension(java.lang.String)" class="member-name-link">fileExtension</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;ext)</code></div>
-<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">&nbsp;</div>
-<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="NdJsonReadOptions.html" title="class in org.apache.datafusion">NdJsonReadOptions</a></code></div>
-<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#schema(org.apache.arrow.vector.types.pojo.Schema)" class="member-name-link">schema</a><wbr>(org.apache.arrow.vector.types.pojo.Schema&nbsp;schema)</code></div>
-<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">&nbsp;</div>
-<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="NdJsonReadOptions.html" title="class in org.apache.datafusion">NdJsonReadOptions</a></code></div>
-<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#schemaInferMaxRecords(long)" class="member-name-link">schemaInferMaxRecords</a><wbr>(long&nbsp;n)</code></div>
-<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">&nbsp;</div>
+<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
+<div class="block">Output compression codec.</div>
+</div>
+<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="JsonWriteOptions.html" title="class in org.apache.datafusion">JsonWriteOptions</a></code></div>
+<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#partitionCols(java.lang.String...)" class="member-name-link">partitionCols</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>...&nbsp;cols)</code></div>
+<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
+<div class="block">Hive-style partition columns.</div>
+</div>
+<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="JsonWriteOptions.html" title="class in org.apache.datafusion">JsonWriteOptions</a></code></div>
+<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#singleFileOutput(boolean)" class="member-name-link">singleFileOutput</a><wbr>(boolean&nbsp;v)</code></div>
+<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
+<div class="block">When <code>true</code>, write to a single file at the supplied path.</div>
+</div>
 </div>
 </div>
 </div>
@@ -143,8 +156,8 @@ loadScripts(document, 'script');</script>
 <ul class="member-list">
 <li>
 <section class="detail" id="&lt;init&gt;()">
-<h3>NdJsonReadOptions</h3>
-<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="element-name">NdJsonReadOptions</span>()</div>
+<h3>JsonWriteOptions</h3>
+<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="element-name">JsonWriteOptions</span>()</div>
 </section>
 </li>
 </ul>
@@ -156,27 +169,27 @@ loadScripts(document, 'script');</script>
 <h2>Method Details</h2>
 <ul class="member-list">
 <li>
-<section class="detail" id="fileExtension(java.lang.String)">
-<h3>fileExtension</h3>
-<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="NdJsonReadOptions.html" title="class in org.apache.datafusion">NdJsonReadOptions</a></span>&nbsp;<span class="element-name">fileExtension</span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;ext)</span></div>
+<section class="detail" id="singleFileOutput(boolean)">
+<h3>singleFileOutput</h3>
+<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="JsonWriteOptions.html" title="class in org.apache.datafusion">JsonWriteOptions</a></span>&nbsp;<span class="element-name">singleFileOutput</span><wbr><span class="parameters">(boolean&nbsp;v)</span></div>
+<div class="block">When <code>true</code>, write to a single file at the supplied path. When left unset (the default)
+ and no partition columns are configured, the path is treated as a directory and DataFusion
+ writes one or more part-files.</div>
 </section>
 </li>
 <li>
-<section class="detail" id="fileCompressionType(org.apache.datafusion.FileCompressionType)">
-<h3>fileCompressionType</h3>
-<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="NdJsonReadOptions.html" title="class in org.apache.datafusion">NdJsonReadOptions</a></span>&nbsp;<span class="element-name">fileCompressionType</span><wbr><span class="parameters">(<a href="FileCompressionType.html" title="enum class in org.apache.datafusion">FileCompressionType</a>&nbsp;t)</span></div>
-</section>
-</li>
-<li>
-<section class="detail" id="schemaInferMaxRecords(long)">
-<h3>schemaInferMaxRecords</h3>
-<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="NdJsonReadOptions.html" title="class in org.apache.datafusion">NdJsonReadOptions</a></span>&nbsp;<span class="element-name">schemaInferMaxRecords</span><wbr><span class="parameters">(long&nbsp;n)</span></div>
+<section class="detail" id="partitionCols(java.lang.String...)">
+<h3>partitionCols</h3>
+<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="JsonWriteOptions.html" title="class in org.apache.datafusion">JsonWriteOptions</a></span>&nbsp;<span class="element-name">partitionCols</span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>...&nbsp;cols)</span></div>
+<div class="block">Hive-style partition columns. Each column listed here is removed from the data rows and encoded
+ into the directory layout (one subdirectory per distinct value). Mutually exclusive with <a href="#singleFileOutput(boolean)"><code>singleFileOutput(boolean)</code></a> -- DataFusion rejects the combination at write time.</div>
 </section>
 </li>
 <li>
-<section class="detail" id="schema(org.apache.arrow.vector.types.pojo.Schema)">
-<h3>schema</h3>
-<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="NdJsonReadOptions.html" title="class in org.apache.datafusion">NdJsonReadOptions</a></span>&nbsp;<span class="element-name">schema</span><wbr><span class="parameters">(org.apache.arrow.vector.types.pojo.Schema&nbsp;schema)</span></div>
+<section class="detail" id="fileCompressionType(org.apache.datafusion.FileCompressionType)">
+<h3>fileCompressionType</h3>
+<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="JsonWriteOptions.html" title="class in org.apache.datafusion">JsonWriteOptions</a></span>&nbsp;<span class="element-name">fileCompressionType</span><wbr><span class="parameters">(<a href="FileCompressionType.html" title="enum class in org.apache.datafusion">FileCompressionType</a>&nbsp;t)</span></div>
+<div class="block">Output compression codec. Defaults to uncompressed.</div>
 </section>
 </li>
 </ul>
diff --git a/api/org/apache/datafusion/NativeLibraryLoader.html b/api/org/apache/datafusion/NativeLibraryLoader.html
index 26c3917..e5a3cde 100644
--- a/api/org/apache/datafusion/NativeLibraryLoader.html
+++ b/api/org/apache/datafusion/NativeLibraryLoader.html
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML>
 <html lang>
 <head>
-<!-- Generated by javadoc (17) on Mon May 18 17:40:42 UTC 2026 -->
+<!-- Generated by javadoc (17) on Tue May 19 22:05:47 UTC 2026 -->
 <title>NativeLibraryLoader (Apache DataFusion Java 0.1.0-SNAPSHOT)</title>
 <meta name="viewport" content="width=device-width, initial-scale=1">
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<meta name="dc.created" content="2026-05-18">
+<meta name="dc.created" content="2026-05-19">
 <meta name="description" content="declaration: package: org.apache.datafusion, class: NativeLibraryLoader">
 <meta name="generator" content="javadoc/ClassWriterImpl">
 <link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
diff --git a/api/org/apache/datafusion/NdJsonReadOptions.html b/api/org/apache/datafusion/NdJsonReadOptions.html
index dec2e73..e6fff95 100644
--- a/api/org/apache/datafusion/NdJsonReadOptions.html
+++ b/api/org/apache/datafusion/NdJsonReadOptions.html
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML>
 <html lang>
 <head>
-<!-- Generated by javadoc (17) on Mon May 18 17:40:42 UTC 2026 -->
+<!-- Generated by javadoc (17) on Tue May 19 22:05:47 UTC 2026 -->
 <title>NdJsonReadOptions (Apache DataFusion Java 0.1.0-SNAPSHOT)</title>
 <meta name="viewport" content="width=device-width, initial-scale=1">
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<meta name="dc.created" content="2026-05-18">
+<meta name="dc.created" content="2026-05-19">
 <meta name="description" content="declaration: package: org.apache.datafusion, class: NdJsonReadOptions">
 <meta name="generator" content="javadoc/ClassWriterImpl">
 <link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
diff --git a/api/org/apache/datafusion/ParquetReadOptions.html b/api/org/apache/datafusion/ParquetReadOptions.html
index e5caa98..cb6ad6d 100644
--- a/api/org/apache/datafusion/ParquetReadOptions.html
+++ b/api/org/apache/datafusion/ParquetReadOptions.html
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML>
 <html lang>
 <head>
-<!-- Generated by javadoc (17) on Mon May 18 17:40:42 UTC 2026 -->
+<!-- Generated by javadoc (17) on Tue May 19 22:05:47 UTC 2026 -->
 <title>ParquetReadOptions (Apache DataFusion Java 0.1.0-SNAPSHOT)</title>
 <meta name="viewport" content="width=device-width, initial-scale=1">
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<meta name="dc.created" content="2026-05-18">
+<meta name="dc.created" content="2026-05-19">
 <meta name="description" content="declaration: package: org.apache.datafusion, class: ParquetReadOptions">
 <meta name="generator" content="javadoc/ClassWriterImpl">
 <link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
diff --git a/api/org/apache/datafusion/ParquetWriteOptions.html b/api/org/apache/datafusion/ParquetWriteOptions.html
index 6f9087b..fb914c2 100644
--- a/api/org/apache/datafusion/ParquetWriteOptions.html
+++ b/api/org/apache/datafusion/ParquetWriteOptions.html
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML>
 <html lang>
 <head>
-<!-- Generated by javadoc (17) on Mon May 18 17:40:42 UTC 2026 -->
+<!-- Generated by javadoc (17) on Tue May 19 22:05:47 UTC 2026 -->
 <title>ParquetWriteOptions (Apache DataFusion Java 0.1.0-SNAPSHOT)</title>
 <meta name="viewport" content="width=device-width, initial-scale=1">
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<meta name="dc.created" content="2026-05-18">
+<meta name="dc.created" content="2026-05-19">
 <meta name="description" content="declaration: package: org.apache.datafusion, class: ParquetWriteOptions">
 <meta name="generator" content="javadoc/ClassWriterImpl">
 <link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
diff --git a/api/org/apache/datafusion/ScalarFunction.html b/api/org/apache/datafusion/ScalarFunction.html
index ea4c2eb..eb32ea8 100644
--- a/api/org/apache/datafusion/ScalarFunction.html
+++ b/api/org/apache/datafusion/ScalarFunction.html
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML>
 <html lang>
 <head>
-<!-- Generated by javadoc (17) on Mon May 18 17:40:42 UTC 2026 -->
+<!-- Generated by javadoc (17) on Tue May 19 22:05:47 UTC 2026 -->
 <title>ScalarFunction (Apache DataFusion Java 0.1.0-SNAPSHOT)</title>
 <meta name="viewport" content="width=device-width, initial-scale=1">
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<meta name="dc.created" content="2026-05-18">
+<meta name="dc.created" content="2026-05-19">
 <meta name="description" content="declaration: package: org.apache.datafusion, interface: ScalarFunction">
 <meta name="generator" content="javadoc/ClassWriterImpl">
 <link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
diff --git a/api/org/apache/datafusion/ScalarFunctionArgs.html b/api/org/apache/datafusion/ScalarFunctionArgs.html
index e1dbef9..9b551df 100644
--- a/api/org/apache/datafusion/ScalarFunctionArgs.html
+++ b/api/org/apache/datafusion/ScalarFunctionArgs.html
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML>
 <html lang>
 <head>
-<!-- Generated by javadoc (17) on Mon May 18 17:40:42 UTC 2026 -->
+<!-- Generated by javadoc (17) on Tue May 19 22:05:47 UTC 2026 -->
 <title>ScalarFunctionArgs (Apache DataFusion Java 0.1.0-SNAPSHOT)</title>
 <meta name="viewport" content="width=device-width, initial-scale=1">
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<meta name="dc.created" content="2026-05-18">
+<meta name="dc.created" content="2026-05-19">
 <meta name="description" content="declaration: package: org.apache.datafusion, record: ScalarFunctionArgs">
 <meta name="generator" content="javadoc/ClassWriterImpl">
 <link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
diff --git a/api/org/apache/datafusion/ScalarUdf.html b/api/org/apache/datafusion/ScalarUdf.html
index 135aed4..dd562d7 100644
--- a/api/org/apache/datafusion/ScalarUdf.html
+++ b/api/org/apache/datafusion/ScalarUdf.html
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML>
 <html lang>
 <head>
-<!-- Generated by javadoc (17) on Mon May 18 17:40:42 UTC 2026 -->
+<!-- Generated by javadoc (17) on Tue May 19 22:05:47 UTC 2026 -->
 <title>ScalarUdf (Apache DataFusion Java 0.1.0-SNAPSHOT)</title>
 <meta name="viewport" content="width=device-width, initial-scale=1">
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<meta name="dc.created" content="2026-05-18">
+<meta name="dc.created" content="2026-05-19">
 <meta name="description" content="declaration: package: org.apache.datafusion, class: ScalarUdf">
 <meta name="generator" content="javadoc/ClassWriterImpl">
 <link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
diff --git a/api/org/apache/datafusion/SessionContext.html b/api/org/apache/datafusion/SessionContext.html
index 19db9e0..335462d 100644
--- a/api/org/apache/datafusion/SessionContext.html
+++ b/api/org/apache/datafusion/SessionContext.html
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML>
 <html lang>
 <head>
-<!-- Generated by javadoc (17) on Mon May 18 17:40:42 UTC 2026 -->
+<!-- Generated by javadoc (17) on Tue May 19 22:05:47 UTC 2026 -->
 <title>SessionContext (Apache DataFusion Java 0.1.0-SNAPSHOT)</title>
 <meta name="viewport" content="width=device-width, initial-scale=1">
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<meta name="dc.created" content="2026-05-18">
+<meta name="dc.created" content="2026-05-19">
 <meta name="description" content="declaration: package: org.apache.datafusion, class: SessionContext">
 <meta name="generator" content="javadoc/ClassWriterImpl">
 <link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
@@ -147,6 +147,17 @@ implements <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base
 <div class="block">Read an Arrow IPC file as a <a href="DataFrame.html" title="class in org.apache.datafusion"><code>DataFrame</code></a> with the supplied <a href="ArrowReadOptions.html" title="class in org.apache.datafusion"><code>ArrowReadOptions</code></a>.</div>
 </div>
 <div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="DataFrame.html" title="class in org.apache.datafusion">DataFrame</a></code></div>
+<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#readAvro(java.lang.String)" class="member-name-link">readAvro</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;path)</code></div>
+<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
+<div class="block">Read an Avro file as a <a href="DataFrame.html" title="class in org.apache.datafusion"><code>DataFrame</code></a> without registering it.</div>
+</div>
+<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="DataFrame.html" title="class in org.apache.datafusion">DataFrame</a></code></div>
+<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#readAvro(java.lang.String,org.apache.datafusion.AvroReadOptions)" class="member-name-link">readAvro</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;path,
+ <a href="AvroReadOptions.html" title="class in org.apache.datafusion">AvroReadOptions</a>&nbsp;options)</code></div>
+<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
+<div class="block">Read an Avro file as a <a href="DataFrame.html" title="class in org.apache.datafusion"><code>DataFrame</code></a> with the supplied <a href="AvroReadOptions.html" title="class in org.apache.datafusion"><code>AvroReadOptions</code></a>.</div>
+</div>
+<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="DataFrame.html" title="class in org.apache.datafusion">DataFrame</a></code></div>
 <div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#readCsv(java.lang.String)" class="member-name-link">readCsv</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;path)</code></div>
 <div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
 <div class="block">Read a CSV file as a <a href="DataFrame.html" title="class in org.apache.datafusion"><code>DataFrame</code></a> without registering it.</div>
@@ -194,6 +205,19 @@ implements <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base
  <a href="ArrowReadOptions.html" title="class in org.apache.datafusion"><code>ArrowReadOptions</code></a>.</div>
 </div>
 <div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>void</code></div>
+<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#registerAvro(java.lang.String,java.lang.String)" class="member-name-link">registerAvro</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;name,
+ <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;path)</code></div>
+<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
+<div class="block">Register an Avro file (or directory of Avro files) as a table.</div>
+</div>
+<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>void</code></div>
+<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#registerAvro(java.lang.String,java.lang.String,org.apache.datafusion.AvroReadOptions)" class="member-name-link">registerAvro</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;name,
+ <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;path,
+ <a href="AvroReadOptions.html" title="class in org.apache.datafusion">AvroReadOptions</a>&nbsp;options)</code></div>
+<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
+<div class="block">Register an Avro file (or directory of Avro files) as a table with the supplied <a href="AvroReadOptions.html" title="class in org.apache.datafusion"><code>AvroReadOptions</code></a>.</div>
+</div>
+<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>void</code></div>
 <div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#registerCsv(java.lang.String,java.lang.String)" class="member-name-link">registerCsv</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;name,
  <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;path)</code></div>
 <div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">&nbsp;</div>
@@ -228,18 +252,24 @@ implements <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base
 <div class="block">Register a parquet file as a table with the supplied <a href="ParquetReadOptions.html" title="class in org.apache.datafusion"><code>ParquetReadOptions</code></a>.</div>
 </div>
 <div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>void</code></div>
-<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#registerUdf(org.apache.datafusion.ScalarUdf)" class="member-name-link">registerUdf</a><wbr>(<a href="ScalarUdf.html" title="class in org.apache.datafusion">ScalarUdf</a>&nbsp;udf)</code></div>
+<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#registerTable(java.lang.String,org.apache.datafusion.TableProvider)" class="member-name-link">registerTable</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;name,
+ <a href="TableProvider.html" title="interface in org.apache.datafusion">TableProvider</a>&nbsp;provider)</code></div>
 <div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
-<div class="block">Register a Java-implemented scalar UDF.</div>
+<div class="block">Register a Java-implemented <a href="TableProvider.html" title="interface in org.apache.datafusion"><code>TableProvider</code></a> under <code>name</code>.</div>
 </div>
-<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="DataFrame.html" title="class in org.apache.datafusion">DataFrame</a></code></div>
-<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#sql(java.lang.String)" class="member-name-link">sql</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;query)</code></div>
+<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>void</code></div>
+<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#registerUdf(org.apache.datafusion.ScalarUdf)" class="member-name-link">registerUdf</a><wbr>(<a href="ScalarUdf.html" title="class in org.apache.datafusion">ScalarUdf</a>&nbsp;udf)</code></div>
 <div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
-<div class="block">Parse and plan <code>query</code>, returning a lazy <a href="DataFrame.html" title="class in org.apache.datafusion"><code>DataFrame</code></a>.</div>
+<div class="block">Register a Java-implemented scalar UDF.</div>
 </div>
-<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>org.apache.arrow.vector.types.pojo.Schema</code></div>
-<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#tableSchema(java.lang.String)" class="member-name-link">tableSchema</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;tableName)</code></div>
+<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="DataFrame.html" title="class in org.apache.datafusion">DataFrame</a></code></div>
+<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#sql(java.lang.String)" class="member-name-link">sql</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;query)</code></div>
 <div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
+<div class="block">Parse and plan <code>query</code>, returning a lazy <a href="DataFrame.html" title="class in org.apache.datafusion"><code>DataFrame</code></a>.</div>
+</div>
+<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>org.apache.arrow.vector.types.pojo.Schema</code></div>
+<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#tableSchema(java.lang.String)" class="member-name-link">tableSchema</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;tableName)</code></div>
+<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
 <div class="block">Return the Arrow <code>Schema</code> of a registered table.</div>
 </div>
 </div>
@@ -501,6 +531,49 @@ implements <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base
 </section>
 </li>
 <li>
+<section class="detail" id="registerAvro(java.lang.String,java.lang.String)">
+<h3>registerAvro</h3>
+<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">void</span>&nbsp;<span class="element-name">registerAvro</span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;name,
+ <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;path)</span></div>
+<div class="block">Register an Avro file (or directory of Avro files) as a table.</div>
+</section>
+</li>
+<li>
+<section class="detail" id="registerAvro(java.lang.String,java.lang.String,org.apache.datafusion.AvroReadOptions)">
+<h3>registerAvro</h3>
+<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">void</span>&nbsp;<span class="element-name">registerAvro</span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;name,
+ <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;path,
+ <a href="AvroReadOptions.html" title="class in org.apache.datafusion">AvroReadOptions</a>&nbsp;options)</span></div>
+<div class="block">Register an Avro file (or directory of Avro files) as a table with the supplied <a href="AvroReadOptions.html" title="class in org.apache.datafusion"><code>AvroReadOptions</code></a>.</div>
+<dl class="notes">
+<dt>Throws:</dt>
+<dd><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/IllegalArgumentException.html" title="class or interface in java.lang" class="external-link">IllegalArgumentException</a></code> - if any of <code>name</code>, <code>path</code>, or <code>options</code> is
+     <code>null</code>.</dd>
+<dd><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/RuntimeException.html" title="class or interface in java.lang" class="external-link">RuntimeException</a></code> - if registration fails (path not found, schema mismatch, etc.).</dd>
+</dl>
+</section>
+</li>
+<li>
+<section class="detail" id="readAvro(java.lang.String)">
+<h3>readAvro</h3>
+<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="DataFrame.html" title="class in org.apache.datafusion">DataFrame</a></span>&nbsp;<span class="element-name">readAvro</span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;path)</span></div>
+<div class="block">Read an Avro file as a <a href="DataFrame.html" title="class in org.apache.datafusion"><code>DataFrame</code></a> without registering it.</div>
+</section>
+</li>
+<li>
+<section class="detail" id="readAvro(java.lang.String,org.apache.datafusion.AvroReadOptions)">
+<h3>readAvro</h3>
+<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="DataFrame.html" title="class in org.apache.datafusion">DataFrame</a></span>&nbsp;<span class="element-name">readAvro</span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;path,
+ <a href="AvroReadOptions.html" title="class in org.apache.datafusion">AvroReadOptions</a>&nbsp;options)</span></div>
+<div class="block">Read an Avro file as a <a href="DataFrame.html" title="class in org.apache.datafusion"><code>DataFrame</code></a> with the supplied <a href="AvroReadOptions.html" title="class in org.apache.datafusion"><code>AvroReadOptions</code></a>.</div>
+<dl class="notes">
+<dt>Throws:</dt>
+<dd><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/IllegalArgumentException.html" title="class or interface in java.lang" class="external-link">IllegalArgumentException</a></code> - if <code>path</code> or <code>options</code> is <code>null</code>.</dd>
+<dd><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/RuntimeException.html" title="class or interface in java.lang" class="external-link">RuntimeException</a></code> - if the read fails.</dd>
+</dl>
+</section>
+</li>
+<li>
 <section class="detail" id="registerUdf(org.apache.datafusion.ScalarUdf)">
 <h3>registerUdf</h3>
 <div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">void</span>&nbsp;<span class="element-name">registerUdf</span><wbr><span class="parameters">(<a href="ScalarUdf.html" title="class in org.apache.datafusion">ScalarUdf</a>&nbsp;udf)</span></div>
@@ -517,6 +590,30 @@ implements <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base
 </section>
 </li>
 <li>
+<section class="detail" id="registerTable(java.lang.String,org.apache.datafusion.TableProvider)">
+<h3>registerTable</h3>
+<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">void</span>&nbsp;<span class="element-name">registerTable</span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;name,
+ <a href="TableProvider.html" title="interface in org.apache.datafusion">TableProvider</a>&nbsp;provider)</span></div>
+<div class="block">Register a Java-implemented <a href="TableProvider.html" title="interface in org.apache.datafusion"><code>TableProvider</code></a> under <code>name</code>. SQL queries that
+ reference <code>name</code> call back into <code>provider</code> to fetch batches.
+
+ <p><a href="TableProvider.html#schema()"><code>TableProvider.schema()</code></a> is called once here, on the calling thread, and cached on the
+ native side. <a href="TableProvider.html#scan(org.apache.arrow.memory.BufferAllocator)"><code>TableProvider.scan(org.apache.arrow.memory.BufferAllocator)</code></a> is called once
+ per query that touches the table, on a Tokio worker thread; it must return a fresh, independent
+ <code>ArrowReader</code> on every call, with its buffers allocated from
+ the <code>BufferAllocator</code> the framework supplies.
+
+ <p>This is the Java counterpart to DataFusion's Rust <code>SessionContext::register_table</code>.</div>
+<dl class="notes">
+<dt>Throws:</dt>
+<dd><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/IllegalArgumentException.html" title="class or interface in java.lang" class="external-link">IllegalArgumentException</a></code> - if <code>name</code> or <code>provider</code> is <code>null</code>.</dd>
+<dd><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/IllegalStateException.html" title="class or interface in java.lang" class="external-link">IllegalStateException</a></code> - if <code>provider.schema()</code> returns <code>null</code>, or this
+     context is closed.</dd>
+<dd><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/RuntimeException.html" title="class or interface in java.lang" class="external-link">RuntimeException</a></code> - if native registration fails.</dd>
+</dl>
+</section>
+</li>
+<li>
 <section class="detail" id="close()">
 <h3>close</h3>
 <div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">void</span>&nbsp;<span class="element-name">close</span>()</div>
diff --git a/api/org/apache/datafusion/SessionContextBuilder.html b/api/org/apache/datafusion/SessionContextBuilder.html
index 17e9f8a..b848c45 100644
--- a/api/org/apache/datafusion/SessionContextBuilder.html
+++ b/api/org/apache/datafusion/SessionContextBuilder.html
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML>
 <html lang>
 <head>
-<!-- Generated by javadoc (17) on Mon May 18 17:40:42 UTC 2026 -->
+<!-- Generated by javadoc (17) on Tue May 19 22:05:47 UTC 2026 -->
 <title>SessionContextBuilder (Apache DataFusion Java 0.1.0-SNAPSHOT)</title>
 <meta name="viewport" content="width=device-width, initial-scale=1">
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<meta name="dc.created" content="2026-05-18">
+<meta name="dc.created" content="2026-05-19">
 <meta name="description" content="declaration: package: org.apache.datafusion, class: SessionContextBuilder">
 <meta name="generator" content="javadoc/ClassWriterImpl">
 <link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
diff --git a/api/org/apache/datafusion/ParquetWriteOptions.html b/api/org/apache/datafusion/SimpleTableProvider.html
similarity index 59%
copy from api/org/apache/datafusion/ParquetWriteOptions.html
copy to api/org/apache/datafusion/SimpleTableProvider.html
index 6f9087b..ad883f0 100644
--- a/api/org/apache/datafusion/ParquetWriteOptions.html
+++ b/api/org/apache/datafusion/SimpleTableProvider.html
@@ -1,12 +1,12 @@
 <!DOCTYPE HTML>
 <html lang>
 <head>
-<!-- Generated by javadoc (17) on Mon May 18 17:40:42 UTC 2026 -->
-<title>ParquetWriteOptions (Apache DataFusion Java 0.1.0-SNAPSHOT)</title>
+<!-- Generated by javadoc (17) on Tue May 19 22:05:47 UTC 2026 -->
+<title>SimpleTableProvider (Apache DataFusion Java 0.1.0-SNAPSHOT)</title>
 <meta name="viewport" content="width=device-width, initial-scale=1">
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<meta name="dc.created" content="2026-05-18">
-<meta name="description" content="declaration: package: org.apache.datafusion, class: ParquetWriteOptions">
+<meta name="dc.created" content="2026-05-19">
+<meta name="description" content="declaration: package: org.apache.datafusion, class: SimpleTableProvider">
 <meta name="generator" content="javadoc/ClassWriterImpl">
 <link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
 <link rel="stylesheet" type="text/css" href="../../../script-dir/jquery-ui.min.css" title="Style">
@@ -35,7 +35,7 @@ loadScripts(document, 'script');</script>
 <li><a href="../../../index.html">Overview</a></li>
 <li><a href="package-summary.html">Package</a></li>
 <li class="nav-bar-cell1-rev">Class</li>
-<li><a href="class-use/ParquetWriteOptions.html">Use</a></li>
+<li><a href="class-use/SimpleTableProvider.html">Use</a></li>
 <li><a href="package-tree.html">Tree</a></li>
 <li><a href="../../../index-all.html">Index</a></li>
 <li><a href="../../../help-doc.html#class">Help</a></li>
@@ -70,24 +70,30 @@ loadScripts(document, 'script');</script>
 <!-- ======== START OF CLASS DATA ======== -->
 <div class="header">
 <div class="sub-title"><span class="package-label-in-type">Package</span>&nbsp;<a href="package-summary.html">org.apache.datafusion</a></div>
-<h1 title="Class ParquetWriteOptions" class="title">Class ParquetWriteOptions</h1>
+<h1 title="Class SimpleTableProvider" class="title">Class SimpleTableProvider</h1>
 </div>
 <div class="inheritance" title="Inheritance Tree"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">java.lang.Object</a>
-<div class="inheritance">org.apache.datafusion.ParquetWriteOptions</div>
+<div class="inheritance">org.apache.datafusion.SimpleTableProvider</div>
 </div>
 <section class="class-description" id="class-description">
+<dl class="notes">
+<dt>All Implemented Interfaces:</dt>
+<dd><code><a href="TableProvider.html" title="interface in org.apache.datafusion">TableProvider</a></code></dd>
+</dl>
 <hr>
-<div class="type-signature"><span class="modifiers">public final class </span><span class="element-name type-name-label">ParquetWriteOptions</span>
-<span class="extends-implements">extends <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a></span></div>
-<div class="block">Configuration knobs for writing parquet, passed to <a href="DataFrame.html#writeParquet(java.lang.String,org.apache.datafusion.ParquetWriteOptions)"><code>DataFrame.writeParquet(String, ParquetWriteOptions)</code></a>.
+<div class="type-signature"><span class="modifiers">public final class </span><span class="element-name type-name-label">SimpleTableProvider</span>
+<span class="extends-implements">extends <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a>
+implements <a href="TableProvider.html" title="interface in org.apache.datafusion">TableProvider</a></span></div>
+<div class="block">A <a href="TableProvider.html" title="interface in org.apache.datafusion"><code>TableProvider</code></a> that pairs a fixed <code>Schema</code> with a function that opens a fresh
+ <code>ArrowReader</code> for each scan. Provided as a convenience for the common case where there is
+ no projection / filter pushdown to implement.
 
- <p>Mirrors a subset of DataFusion's <code>DataFrameWriteOptions</code> and <code>
- TableParquetOptions</code>. All setters return <code>this</code> for fluent chaining. Defaults: all fields
- <code>null</code> (meaning the DataFusion default is used).
+ <p>Each call to <a href="#scan(org.apache.arrow.memory.BufferAllocator)"><code>scan(BufferAllocator)</code></a> invokes the supplied function and returns whatever
+ <code>ArrowReader</code> it produces, so the function MUST return a fresh, independent reader on every
+ invocation (see the contract on <a href="TableProvider.html#scan(org.apache.arrow.memory.BufferAllocator)"><code>TableProvider.scan(BufferAllocator)</code></a>).
 
- <p>Path semantics: when <a href="#singleFileOutput(boolean)"><code>singleFileOutput(boolean)</code></a> is <code>true</code>, the path passed to
- <code>writeParquet</code> is the literal output filename. When left unset (the default), the path is a
- directory that DataFusion populates with one or more part-files.</div>
+ <p>As <a href="TableProvider.html" title="interface in org.apache.datafusion"><code>TableProvider</code></a> grows additional methods in the future, this class will provide
+ defaults so existing callers keep working without changes.</div>
 </section>
 <section class="summary">
 <ul class="summary-list">
@@ -99,7 +105,8 @@ loadScripts(document, 'script');</script>
 <div class="summary-table two-column-summary">
 <div class="table-header col-first">Constructor</div>
 <div class="table-header col-last">Description</div>
-<div class="col-constructor-name even-row-color"><code><a href="#%3Cinit%3E()" class="member-name-link">ParquetWriteOptions</a>()</code></div>
+<div class="col-constructor-name even-row-color"><code><a href="#%3Cinit%3E(org.apache.arrow.vector.types.pojo.Schema,java.util.function.Function)" class="member-name-link">SimpleTableProvider</a><wbr>(org.apache.arrow.vector.types.pojo.Schema&nbsp;schema,
+ <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/function/Function.html" title="class or interface in java.util.function" class="external-link">Function</a>&lt;org.apache.arrow.memory.BufferAllocator,<wbr>org.apache.arrow.vector.ipc.ArrowReader&gt;&nbsp;scanFn)</code></div>
 <div class="col-last even-row-color">&nbsp;</div>
 </div>
 </section>
@@ -115,15 +122,15 @@ loadScripts(document, 'script');</script>
 <div class="table-header col-first">Modifier and Type</div>
 <div class="table-header col-second">Method</div>
 <div class="table-header col-last">Description</div>
-<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="ParquetWriteOptions.html" title="class in org.apache.datafusion">ParquetWriteOptions</a></code></div>
-<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#compression(java.lang.String)" class="member-name-link">compression</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;spec)</code></div>
+<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>org.apache.arrow.vector.ipc.ArrowReader</code></div>
+<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#scan(org.apache.arrow.memory.BufferAllocator)" class="member-name-link">scan</a><wbr>(org.apache.arrow.memory.BufferAllocator&nbsp;allocator)</code></div>
 <div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
-<div class="block">Compression codec spec, passed verbatim to DataFusion.</div>
+<div class="block">Open a fresh batch stream for this table.</div>
 </div>
-<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="ParquetWriteOptions.html" title="class in org.apache.datafusion">ParquetWriteOptions</a></code></div>
-<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#singleFileOutput(boolean)" class="member-name-link">singleFileOutput</a><wbr>(boolean&nbsp;v)</code></div>
+<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>org.apache.arrow.vector.types.pojo.Schema</code></div>
+<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#schema()" class="member-name-link">schema</a>()</code></div>
 <div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
-<div class="block">When <code>true</code>, write to a single file at the supplied path.</div>
+<div class="block">The fixed schema of this table.</div>
 </div>
 </div>
 </div>
@@ -143,9 +150,16 @@ loadScripts(document, 'script');</script>
 <h2>Constructor Details</h2>
 <ul class="member-list">
 <li>
-<section class="detail" id="&lt;init&gt;()">
-<h3>ParquetWriteOptions</h3>
-<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="element-name">ParquetWriteOptions</span>()</div>
+<section class="detail" id="&lt;init&gt;(org.apache.arrow.vector.types.pojo.Schema,java.util.function.Function)">
+<h3>SimpleTableProvider</h3>
+<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="element-name">SimpleTableProvider</span><wbr><span class="parameters">(org.apache.arrow.vector.types.pojo.Schema&nbsp;schema,
+ <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/function/Function.html" title="class or interface in java.util.function" class="external-link">Function</a>&lt;org.apache.arrow.memory.BufferAllocator,<wbr>org.apache.arrow.vector.ipc.ArrowReader&gt;&nbsp;scanFn)</span></div>
+<dl class="notes">
+<dt>Parameters:</dt>
+<dd><code>schema</code> - the table schema; returned as-is from <a href="#schema()"><code>schema()</code></a></dd>
+<dd><code>scanFn</code> - called on every <a href="#scan(org.apache.arrow.memory.BufferAllocator)"><code>scan(BufferAllocator)</code></a> with the framework-supplied
+     allocator; must return a fresh, independent <code>ArrowReader</code> each time</dd>
+</dl>
 </section>
 </li>
 </ul>
@@ -157,20 +171,33 @@ loadScripts(document, 'script');</script>
 <h2>Method Details</h2>
 <ul class="member-list">
 <li>
-<section class="detail" id="compression(java.lang.String)">
-<h3>compression</h3>
-<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="ParquetWriteOptions.html" title="class in org.apache.datafusion">ParquetWriteOptions</a></span>&nbsp;<span class="element-name">compression</span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;spec)</span></div>
-<div class="block">Compression codec spec, passed verbatim to DataFusion. Examples: <code>"snappy"</code>, <code>
- "zstd(3)"</code>, <code>"gzip(6)"</code>, <code>"lz4"</code>, <code>"uncompressed"</code>. Invalid values surface as
- <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/RuntimeException.html" title="class or interface in java.lang" class="external-link"><code>RuntimeException</code></a> at write time.</div>
+<section class="detail" id="schema()">
+<h3>schema</h3>
+<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">org.apache.arrow.vector.types.pojo.Schema</span>&nbsp;<span class="element-name">schema</span>()</div>
+<div class="block"><span class="descfrm-type-label">Description copied from interface:&nbsp;<code><a href="TableProvider.html#schema()">TableProvider</a></code></span></div>
+<div class="block">The fixed schema of this table. Called once, at registration time.</div>
+<dl class="notes">
+<dt>Specified by:</dt>
+<dd><code><a href="TableProvider.html#schema()">schema</a></code>&nbsp;in interface&nbsp;<code><a href="TableProvider.html" title="interface in org.apache.datafusion">TableProvider</a></code></dd>
+</dl>
 </section>
 </li>
 <li>
-<section class="detail" id="singleFileOutput(boolean)">
-<h3>singleFileOutput</h3>
-<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="ParquetWriteOptions.html" title="class in org.apache.datafusion">ParquetWriteOptions</a></span>&nbsp;<span class="element-name">singleFileOutput</span><wbr><span class="parameters">(boolean&nbsp;v)</span></div>
-<div class="block">When <code>true</code>, write to a single file at the supplied path. When left unset (the default),
- the path is treated as a directory and DataFusion writes one or more part-files.</div>
+<section class="detail" id="scan(org.apache.arrow.memory.BufferAllocator)">
+<h3>scan</h3>
+<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">org.apache.arrow.vector.ipc.ArrowReader</span>&nbsp;<span class="element-name">scan</span><wbr><span class="parameters">(org.apache.arrow.memory.BufferAllocator&nbsp;allocator)</span></div>
+<div class="block"><span class="descfrm-type-label">Description copied from interface:&nbsp;<code><a href="TableProvider.html#scan(org.apache.arrow.memory.BufferAllocator)">TableProvider</a></code></span></div>
+<div class="block">Open a fresh batch stream for this table. Called once per physical scan of the table — a single
+ query may invoke this more than once (self-joins, <code>UNION ALL</code> over the same table, etc.).
+
+ <p>Each invocation MUST return an independent <code>ArrowReader</code>. The reader's schema MUST
+ equal <a href="TableProvider.html#schema()"><code>TableProvider.schema()</code></a>. The reader's buffers MUST be allocated from <code>allocator</code> (or from
+ a child of it) — the framework needs the reader's allocator hierarchy to share a root with the
+ one it passes here. The allocator contract mirrors the one on <a href="ScalarFunction.html#evaluate(org.apache.arrow.memory.BufferAllocator,org.apache.datafusion.ScalarFunctionArgs)"><code>ScalarFunction.evaluate(org.apache.arrow.memory.BufferAllocator, org.apache.datafusion.ScalarFunctionArgs)</code></a>.</div>
+<dl class="notes">
+<dt>Specified by:</dt>
+<dd><code><a href="TableProvider.html#scan(org.apache.arrow.memory.BufferAllocator)">scan</a></code>&nbsp;in interface&nbsp;<code><a href="TableProvider.html" title="interface in org.apache.datafusion">TableProvider</a></code></dd>
+</dl>
 </section>
 </li>
 </ul>
diff --git a/api/org/apache/datafusion/TableProvider.html b/api/org/apache/datafusion/TableProvider.html
new file mode 100644
index 0000000..81d0e95
--- /dev/null
+++ b/api/org/apache/datafusion/TableProvider.html
@@ -0,0 +1,169 @@
+<!DOCTYPE HTML>
+<html lang>
+<head>
+<!-- Generated by javadoc (17) on Tue May 19 22:05:47 UTC 2026 -->
+<title>TableProvider (Apache DataFusion Java 0.1.0-SNAPSHOT)</title>
+<meta name="viewport" content="width=device-width, initial-scale=1">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<meta name="dc.created" content="2026-05-19">
+<meta name="description" content="declaration: package: org.apache.datafusion, interface: TableProvider">
+<meta name="generator" content="javadoc/ClassWriterImpl">
+<link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
+<link rel="stylesheet" type="text/css" href="../../../script-dir/jquery-ui.min.css" title="Style">
+<link rel="stylesheet" type="text/css" href="../../../jquery-ui.overrides.css" title="Style">
+<script type="text/javascript" src="../../../script.js"></script>
+<script type="text/javascript" src="../../../script-dir/jquery-3.7.1.min.js"></script>
+<script type="text/javascript" src="../../../script-dir/jquery-ui.min.js"></script>
+</head>
+<body class="class-declaration-page">
+<script type="text/javascript">var evenRowColor = "even-row-color";
+var oddRowColor = "odd-row-color";
+var tableTab = "table-tab";
+var activeTableTab = "active-table-tab";
+var pathtoroot = "../../../";
+loadScripts(document, 'script');</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<div class="flex-box">
+<header role="banner" class="flex-header">
+<nav role="navigation">
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="top-nav" id="navbar-top">
+<div class="skip-nav"><a href="#skip-navbar-top" title="Skip navigation links">Skip navigation links</a></div>
+<ul id="navbar-top-firstrow" class="nav-list" title="Navigation">
+<li><a href="../../../index.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="nav-bar-cell1-rev">Class</li>
+<li><a href="class-use/TableProvider.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../index-all.html">Index</a></li>
+<li><a href="../../../help-doc.html#class">Help</a></li>
+</ul>
+</div>
+<div class="sub-nav">
+<div>
+<ul class="sub-nav-list">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li>Constr&nbsp;|&nbsp;</li>
+<li><a href="#method-summary">Method</a></li>
+</ul>
+<ul class="sub-nav-list">
+<li>Detail:&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li>Constr&nbsp;|&nbsp;</li>
+<li><a href="#method-detail">Method</a></li>
+</ul>
+</div>
+<div class="nav-list-search"><label for="search-input">SEARCH:</label>
+<input type="text" id="search-input" value="search" disabled="disabled">
+<input type="reset" id="reset-button" value="reset" disabled="disabled">
+</div>
+</div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<span class="skip-nav" id="skip-navbar-top"></span></nav>
+</header>
+<div class="flex-content">
+<main role="main">
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="sub-title"><span class="package-label-in-type">Package</span>&nbsp;<a href="package-summary.html">org.apache.datafusion</a></div>
+<h1 title="Interface TableProvider" class="title">Interface TableProvider</h1>
+</div>
+<section class="class-description" id="class-description">
+<dl class="notes">
+<dt>All Known Implementing Classes:</dt>
+<dd><code><a href="SimpleTableProvider.html" title="class in org.apache.datafusion">SimpleTableProvider</a></code></dd>
+</dl>
+<hr>
+<div class="type-signature"><span class="modifiers">public interface </span><span class="element-name type-name-label">TableProvider</span></div>
+<div class="block">A Java-implemented table that can be registered with a <a href="SessionContext.html" title="class in org.apache.datafusion"><code>SessionContext</code></a> via <a href="SessionContext.html#registerTable(java.lang.String,org.apache.datafusion.TableProvider)"><code>SessionContext.registerTable(String, TableProvider)</code></a>. Mirrors the role of DataFusion's Rust
+ <code>TableProvider</code> trait, but at present only exposes the methods needed for a full table
+ scan; future versions may add filter/projection pushdown and multi-partition support as default
+ methods so existing implementations keep working.
+
+ <p><a href="SimpleTableProvider.html" title="class in org.apache.datafusion"><code>SimpleTableProvider</code></a> is a ready-made implementation for the common case of "I have a
+ schema and a function that returns an <code>ArrowReader</code>".
+
+ <p>Each call to <a href="#scan(org.apache.arrow.memory.BufferAllocator)"><code>scan(BufferAllocator)</code></a> must return a fresh, independent <code>ArrowReader</code> so that queries which touch the table more than once (self-joins, <code>UNION ALL</code>,
+ repeated reads) work correctly. The returned reader is closed by the framework when the stream
+ ends.
+
+ <p>The schema returned by <a href="#schema()"><code>schema()</code></a> is captured once at registration time. Every batch
+ produced by every <code>ArrowReader</code> returned from <a href="#scan(org.apache.arrow.memory.BufferAllocator)"><code>scan(BufferAllocator)</code></a> must conform
+ to it; a mismatch fails the query.</div>
+</section>
+<section class="summary">
+<ul class="summary-list">
+<!-- ========== METHOD SUMMARY =========== -->
+<li>
+<section class="method-summary" id="method-summary">
+<h2>Method Summary</h2>
+<div id="method-summary-table">
+<div class="table-tabs" role="tablist" aria-orientation="horizontal"><button id="method-summary-table-tab0" role="tab" aria-selected="true" aria-controls="method-summary-table.tabpanel" tabindex="0" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table', 3)" class="active-table-tab">All Methods</button><button id="method-summary-table-tab2" role="tab" aria-selected="false" aria-controls="method-summary-table.tabpanel" tabindex="-1" onkeydown="switchTab( [...]
+<div id="method-summary-table.tabpanel" role="tabpanel" aria-labelledby="method-summary-table-tab0">
+<div class="summary-table three-column-summary">
+<div class="table-header col-first">Modifier and Type</div>
+<div class="table-header col-second">Method</div>
+<div class="table-header col-last">Description</div>
+<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3"><code>org.apache.arrow.vector.ipc.ArrowReader</code></div>
+<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3"><code><a href="#scan(org.apache.arrow.memory.BufferAllocator)" class="member-name-link">scan</a><wbr>(org.apache.arrow.memory.BufferAllocator&nbsp;allocator)</code></div>
+<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3">
+<div class="block">Open a fresh batch stream for this table.</div>
+</div>
+<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3"><code>org.apache.arrow.vector.types.pojo.Schema</code></div>
+<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3"><code><a href="#schema()" class="member-name-link">schema</a>()</code></div>
+<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3">
+<div class="block">The fixed schema of this table.</div>
+</div>
+</div>
+</div>
+</div>
+</section>
+</li>
+</ul>
+</section>
+<section class="details">
+<ul class="details-list">
+<!-- ============ METHOD DETAIL ========== -->
+<li>
+<section class="method-details" id="method-detail">
+<h2>Method Details</h2>
+<ul class="member-list">
+<li>
+<section class="detail" id="schema()">
+<h3>schema</h3>
+<div class="member-signature"><span class="return-type">org.apache.arrow.vector.types.pojo.Schema</span>&nbsp;<span class="element-name">schema</span>()</div>
+<div class="block">The fixed schema of this table. Called once, at registration time.</div>
+</section>
+</li>
+<li>
+<section class="detail" id="scan(org.apache.arrow.memory.BufferAllocator)">
+<h3>scan</h3>
+<div class="member-signature"><span class="return-type">org.apache.arrow.vector.ipc.ArrowReader</span>&nbsp;<span class="element-name">scan</span><wbr><span class="parameters">(org.apache.arrow.memory.BufferAllocator&nbsp;allocator)</span></div>
+<div class="block">Open a fresh batch stream for this table. Called once per physical scan of the table — a single
+ query may invoke this more than once (self-joins, <code>UNION ALL</code> over the same table, etc.).
+
+ <p>Each invocation MUST return an independent <code>ArrowReader</code>. The reader's schema MUST
+ equal <a href="#schema()"><code>schema()</code></a>. The reader's buffers MUST be allocated from <code>allocator</code> (or from
+ a child of it) — the framework needs the reader's allocator hierarchy to share a root with the
+ one it passes here. The allocator contract mirrors the one on <a href="ScalarFunction.html#evaluate(org.apache.arrow.memory.BufferAllocator,org.apache.datafusion.ScalarFunctionArgs)"><code>ScalarFunction.evaluate(org.apache.arrow.memory.BufferAllocator, org.apache.datafusion.ScalarFunctionArgs)</code></a>.</div>
+</section>
+</li>
+</ul>
+</section>
+</li>
+</ul>
+</section>
+<!-- ========= END OF CLASS DATA ========= -->
+</main>
+<footer role="contentinfo">
+<hr>
+<p class="legal-copy"><small>Copyright &#169; 2026. All rights reserved.</small></p>
+</footer>
+</div>
+</div>
+</body>
+</html>
diff --git a/api/org/apache/datafusion/UnnestOptions.html b/api/org/apache/datafusion/UnnestOptions.html
index 60c1fe4..4b58fe7 100644
--- a/api/org/apache/datafusion/UnnestOptions.html
+++ b/api/org/apache/datafusion/UnnestOptions.html
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML>
 <html lang>
 <head>
-<!-- Generated by javadoc (17) on Mon May 18 17:40:42 UTC 2026 -->
+<!-- Generated by javadoc (17) on Tue May 19 22:05:47 UTC 2026 -->
 <title>UnnestOptions (Apache DataFusion Java 0.1.0-SNAPSHOT)</title>
 <meta name="viewport" content="width=device-width, initial-scale=1">
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<meta name="dc.created" content="2026-05-18">
+<meta name="dc.created" content="2026-05-19">
 <meta name="description" content="declaration: package: org.apache.datafusion, class: UnnestOptions">
 <meta name="generator" content="javadoc/ClassWriterImpl">
 <link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
diff --git a/api/org/apache/datafusion/Volatility.html b/api/org/apache/datafusion/Volatility.html
index 953dab1..41df3b7 100644
--- a/api/org/apache/datafusion/Volatility.html
+++ b/api/org/apache/datafusion/Volatility.html
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML>
 <html lang>
 <head>
-<!-- Generated by javadoc (17) on Mon May 18 17:40:42 UTC 2026 -->
+<!-- Generated by javadoc (17) on Tue May 19 22:05:47 UTC 2026 -->
 <title>Volatility (Apache DataFusion Java 0.1.0-SNAPSHOT)</title>
 <meta name="viewport" content="width=device-width, initial-scale=1">
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<meta name="dc.created" content="2026-05-18">
+<meta name="dc.created" content="2026-05-19">
 <meta name="description" content="declaration: package: org.apache.datafusion, enum: Volatility">
 <meta name="generator" content="javadoc/ClassWriterImpl">
 <link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
diff --git a/api/org/apache/datafusion/class-use/ArrowReadOptions.html b/api/org/apache/datafusion/class-use/ArrowReadOptions.html
index 89dc779..cfbe597 100644
--- a/api/org/apache/datafusion/class-use/ArrowReadOptions.html
+++ b/api/org/apache/datafusion/class-use/ArrowReadOptions.html
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML>
 <html lang>
 <head>
-<!-- Generated by javadoc (17) on Mon May 18 17:40:42 UTC 2026 -->
+<!-- Generated by javadoc (17) on Tue May 19 22:05:47 UTC 2026 -->
 <title>Uses of Class org.apache.datafusion.ArrowReadOptions (Apache DataFusion Java 0.1.0-SNAPSHOT)</title>
 <meta name="viewport" content="width=device-width, initial-scale=1">
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<meta name="dc.created" content="2026-05-18">
+<meta name="dc.created" content="2026-05-19">
 <meta name="description" content="use: package: org.apache.datafusion, class: ArrowReadOptions">
 <meta name="generator" content="javadoc/ClassUseWriter">
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
diff --git a/api/org/apache/datafusion/class-use/ArrowReadOptions.html b/api/org/apache/datafusion/class-use/AvroReadOptions.html
similarity index 57%
copy from api/org/apache/datafusion/class-use/ArrowReadOptions.html
copy to api/org/apache/datafusion/class-use/AvroReadOptions.html
index 89dc779..661da20 100644
--- a/api/org/apache/datafusion/class-use/ArrowReadOptions.html
+++ b/api/org/apache/datafusion/class-use/AvroReadOptions.html
@@ -1,12 +1,12 @@
 <!DOCTYPE HTML>
 <html lang>
 <head>
-<!-- Generated by javadoc (17) on Mon May 18 17:40:42 UTC 2026 -->
-<title>Uses of Class org.apache.datafusion.ArrowReadOptions (Apache DataFusion Java 0.1.0-SNAPSHOT)</title>
+<!-- Generated by javadoc (17) on Tue May 19 22:05:47 UTC 2026 -->
+<title>Uses of Class org.apache.datafusion.AvroReadOptions (Apache DataFusion Java 0.1.0-SNAPSHOT)</title>
 <meta name="viewport" content="width=device-width, initial-scale=1">
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<meta name="dc.created" content="2026-05-18">
-<meta name="description" content="use: package: org.apache.datafusion, class: ArrowReadOptions">
+<meta name="dc.created" content="2026-05-19">
+<meta name="description" content="use: package: org.apache.datafusion, class: AvroReadOptions">
 <meta name="generator" content="javadoc/ClassUseWriter">
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <link rel="stylesheet" type="text/css" href="../../../../script-dir/jquery-ui.min.css" title="Style">
@@ -30,7 +30,7 @@ loadScripts(document, 'script');</script>
 <ul id="navbar-top-firstrow" class="nav-list" title="Navigation">
 <li><a href="../../../../index.html">Overview</a></li>
 <li><a href="../package-summary.html">Package</a></li>
-<li><a href="../ArrowReadOptions.html" title="class in org.apache.datafusion">Class</a></li>
+<li><a href="../AvroReadOptions.html" title="class in org.apache.datafusion">Class</a></li>
 <li class="nav-bar-cell1-rev">Use</li>
 <li><a href="../package-tree.html">Tree</a></li>
 <li><a href="../../../../index-all.html">Index</a></li>
@@ -49,9 +49,9 @@ loadScripts(document, 'script');</script>
 <div class="flex-content">
 <main role="main">
 <div class="header">
-<h1 title="Uses of Class org.apache.datafusion.ArrowReadOptions" class="title">Uses of Class<br>org.apache.datafusion.ArrowReadOptions</h1>
+<h1 title="Uses of Class org.apache.datafusion.AvroReadOptions" class="title">Uses of Class<br>org.apache.datafusion.AvroReadOptions</h1>
 </div>
-<div class="caption"><span>Packages that use <a href="../ArrowReadOptions.html" title="class in org.apache.datafusion">ArrowReadOptions</a></span></div>
+<div class="caption"><span>Packages that use <a href="../AvroReadOptions.html" title="class in org.apache.datafusion">AvroReadOptions</a></span></div>
 <div class="summary-table two-column-summary">
 <div class="table-header col-first">Package</div>
 <div class="table-header col-last">Description</div>
@@ -62,37 +62,36 @@ loadScripts(document, 'script');</script>
 <ul class="block-list">
 <li>
 <section class="detail" id="org.apache.datafusion">
-<h2>Uses of <a href="../ArrowReadOptions.html" title="class in org.apache.datafusion">ArrowReadOptions</a> in <a href="../package-summary.html">org.apache.datafusion</a></h2>
-<div class="caption"><span>Methods in <a href="../package-summary.html">org.apache.datafusion</a> that return <a href="../ArrowReadOptions.html" title="class in org.apache.datafusion">ArrowReadOptions</a></span></div>
+<h2>Uses of <a href="../AvroReadOptions.html" title="class in org.apache.datafusion">AvroReadOptions</a> in <a href="../package-summary.html">org.apache.datafusion</a></h2>
+<div class="caption"><span>Methods in <a href="../package-summary.html">org.apache.datafusion</a> that return <a href="../AvroReadOptions.html" title="class in org.apache.datafusion">AvroReadOptions</a></span></div>
 <div class="summary-table three-column-summary">
 <div class="table-header col-first">Modifier and Type</div>
 <div class="table-header col-second">Method</div>
 <div class="table-header col-last">Description</div>
-<div class="col-first even-row-color"><code><a href="../ArrowReadOptions.html" title="class in org.apache.datafusion">ArrowReadOptions</a></code></div>
-<div class="col-second even-row-color"><span class="type-name-label">ArrowReadOptions.</span><code><a href="../ArrowReadOptions.html#fileExtension(java.lang.String)" class="member-name-link">fileExtension</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;ext)</code></div>
+<div class="col-first even-row-color"><code><a href="../AvroReadOptions.html" title="class in org.apache.datafusion">AvroReadOptions</a></code></div>
+<div class="col-second even-row-color"><span class="type-name-label">AvroReadOptions.</span><code><a href="../AvroReadOptions.html#fileExtension(java.lang.String)" class="member-name-link">fileExtension</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;ext)</code></div>
 <div class="col-last even-row-color">&nbsp;</div>
-<div class="col-first odd-row-color"><code><a href="../ArrowReadOptions.html" title="class in org.apache.datafusion">ArrowReadOptions</a></code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">ArrowReadOptions.</span><code><a href="../ArrowReadOptions.html#schema(org.apache.arrow.vector.types.pojo.Schema)" class="member-name-link">schema</a><wbr>(org.apache.arrow.vector.types.pojo.Schema&nbsp;schema)</code></div>
+<div class="col-first odd-row-color"><code><a href="../AvroReadOptions.html" title="class in org.apache.datafusion">AvroReadOptions</a></code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">AvroReadOptions.</span><code><a href="../AvroReadOptions.html#schema(org.apache.arrow.vector.types.pojo.Schema)" class="member-name-link">schema</a><wbr>(org.apache.arrow.vector.types.pojo.Schema&nbsp;schema)</code></div>
 <div class="col-last odd-row-color">&nbsp;</div>
 </div>
-<div class="caption"><span>Methods in <a href="../package-summary.html">org.apache.datafusion</a> with parameters of type <a href="../ArrowReadOptions.html" title="class in org.apache.datafusion">ArrowReadOptions</a></span></div>
+<div class="caption"><span>Methods in <a href="../package-summary.html">org.apache.datafusion</a> with parameters of type <a href="../AvroReadOptions.html" title="class in org.apache.datafusion">AvroReadOptions</a></span></div>
 <div class="summary-table three-column-summary">
 <div class="table-header col-first">Modifier and Type</div>
 <div class="table-header col-second">Method</div>
 <div class="table-header col-last">Description</div>
 <div class="col-first even-row-color"><code><a href="../DataFrame.html" title="class in org.apache.datafusion">DataFrame</a></code></div>
-<div class="col-second even-row-color"><span class="type-name-label">SessionContext.</span><code><a href="../SessionContext.html#readArrow(java.lang.String,org.apache.datafusion.ArrowReadOptions)" class="member-name-link">readArrow</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;path,
- <a href="../ArrowReadOptions.html" title="class in org.apache.datafusion">ArrowReadOptions</a>&nbsp;options)</code></div>
+<div class="col-second even-row-color"><span class="type-name-label">SessionContext.</span><code><a href="../SessionContext.html#readAvro(java.lang.String,org.apache.datafusion.AvroReadOptions)" class="member-name-link">readAvro</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;path,
+ <a href="../AvroReadOptions.html" title="class in org.apache.datafusion">AvroReadOptions</a>&nbsp;options)</code></div>
 <div class="col-last even-row-color">
-<div class="block">Read an Arrow IPC file as a <a href="../DataFrame.html" title="class in org.apache.datafusion"><code>DataFrame</code></a> with the supplied <a href="../ArrowReadOptions.html" title="class in org.apache.datafusion"><code>ArrowReadOptions</code></a>.</div>
+<div class="block">Read an Avro file as a <a href="../DataFrame.html" title="class in org.apache.datafusion"><code>DataFrame</code></a> with the supplied <a href="../AvroReadOptions.html" title="class in org.apache.datafusion"><code>AvroReadOptions</code></a>.</div>
 </div>
 <div class="col-first odd-row-color"><code>void</code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">SessionContext.</span><code><a href="../SessionContext.html#registerArrow(java.lang.String,java.lang.String,org.apache.datafusion.ArrowReadOptions)" class="member-name-link">registerArrow</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;name,
+<div class="col-second odd-row-color"><span class="type-name-label">SessionContext.</span><code><a href="../SessionContext.html#registerAvro(java.lang.String,java.lang.String,org.apache.datafusion.AvroReadOptions)" class="member-name-link">registerAvro</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;name,
  <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;path,
- <a href="../ArrowReadOptions.html" title="class in org.apache.datafusion">ArrowReadOptions</a>&nbsp;options)</code></div>
+ <a href="../AvroReadOptions.html" title="class in org.apache.datafusion">AvroReadOptions</a>&nbsp;options)</code></div>
 <div class="col-last odd-row-color">
-<div class="block">Register an Arrow IPC file (or directory of Arrow IPC files) as a table with the supplied
- <a href="../ArrowReadOptions.html" title="class in org.apache.datafusion"><code>ArrowReadOptions</code></a>.</div>
+<div class="block">Register an Avro file (or directory of Avro files) as a table with the supplied <a href="../AvroReadOptions.html" title="class in org.apache.datafusion"><code>AvroReadOptions</code></a>.</div>
 </div>
 </div>
 </section>
diff --git a/api/org/apache/datafusion/class-use/ColumnarValue.Array.html b/api/org/apache/datafusion/class-use/ColumnarValue.Array.html
index fd5761e..8ff6006 100644
--- a/api/org/apache/datafusion/class-use/ColumnarValue.Array.html
+++ b/api/org/apache/datafusion/class-use/ColumnarValue.Array.html
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML>
 <html lang>
 <head>
-<!-- Generated by javadoc (17) on Mon May 18 17:40:42 UTC 2026 -->
+<!-- Generated by javadoc (17) on Tue May 19 22:05:47 UTC 2026 -->
 <title>Uses of Record Class org.apache.datafusion.ColumnarValue.Array (Apache DataFusion Java 0.1.0-SNAPSHOT)</title>
 <meta name="viewport" content="width=device-width, initial-scale=1">
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<meta name="dc.created" content="2026-05-18">
+<meta name="dc.created" content="2026-05-19">
 <meta name="description" content="use: package: org.apache.datafusion, interface: ColumnarValue, record: Array">
 <meta name="generator" content="javadoc/ClassUseWriter">
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
diff --git a/api/org/apache/datafusion/class-use/ColumnarValue.Scalar.html b/api/org/apache/datafusion/class-use/ColumnarValue.Scalar.html
index 21f6d13..1a14747 100644
--- a/api/org/apache/datafusion/class-use/ColumnarValue.Scalar.html
+++ b/api/org/apache/datafusion/class-use/ColumnarValue.Scalar.html
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML>
 <html lang>
 <head>
-<!-- Generated by javadoc (17) on Mon May 18 17:40:42 UTC 2026 -->
+<!-- Generated by javadoc (17) on Tue May 19 22:05:47 UTC 2026 -->
 <title>Uses of Record Class org.apache.datafusion.ColumnarValue.Scalar (Apache DataFusion Java 0.1.0-SNAPSHOT)</title>
 <meta name="viewport" content="width=device-width, initial-scale=1">
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<meta name="dc.created" content="2026-05-18">
+<meta name="dc.created" content="2026-05-19">
 <meta name="description" content="use: package: org.apache.datafusion, interface: ColumnarValue, record: Scalar">
 <meta name="generator" content="javadoc/ClassUseWriter">
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
diff --git a/api/org/apache/datafusion/class-use/ColumnarValue.html b/api/org/apache/datafusion/class-use/ColumnarValue.html
index 880f3fc..89b0207 100644
--- a/api/org/apache/datafusion/class-use/ColumnarValue.html
+++ b/api/org/apache/datafusion/class-use/ColumnarValue.html
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML>
 <html lang>
 <head>
-<!-- Generated by javadoc (17) on Mon May 18 17:40:42 UTC 2026 -->
+<!-- Generated by javadoc (17) on Tue May 19 22:05:47 UTC 2026 -->
 <title>Uses of Interface org.apache.datafusion.ColumnarValue (Apache DataFusion Java 0.1.0-SNAPSHOT)</title>
 <meta name="viewport" content="width=device-width, initial-scale=1">
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<meta name="dc.created" content="2026-05-18">
+<meta name="dc.created" content="2026-05-19">
 <meta name="description" content="use: package: org.apache.datafusion, interface: ColumnarValue">
 <meta name="generator" content="javadoc/ClassUseWriter">
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
diff --git a/api/org/apache/datafusion/class-use/CsvReadOptions.html b/api/org/apache/datafusion/class-use/CsvReadOptions.html
index db7a20b..c06ce99 100644
--- a/api/org/apache/datafusion/class-use/CsvReadOptions.html
+++ b/api/org/apache/datafusion/class-use/CsvReadOptions.html
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML>
 <html lang>
 <head>
-<!-- Generated by javadoc (17) on Mon May 18 17:40:42 UTC 2026 -->
+<!-- Generated by javadoc (17) on Tue May 19 22:05:47 UTC 2026 -->
 <title>Uses of Class org.apache.datafusion.CsvReadOptions (Apache DataFusion Java 0.1.0-SNAPSHOT)</title>
 <meta name="viewport" content="width=device-width, initial-scale=1">
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<meta name="dc.created" content="2026-05-18">
+<meta name="dc.created" content="2026-05-19">
 <meta name="description" content="use: package: org.apache.datafusion, class: CsvReadOptions">
 <meta name="generator" content="javadoc/ClassUseWriter">
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
diff --git a/api/org/apache/datafusion/class-use/CsvWriteOptions.html b/api/org/apache/datafusion/class-use/CsvWriteOptions.html
new file mode 100644
index 0000000..b6d62a0
--- /dev/null
+++ b/api/org/apache/datafusion/class-use/CsvWriteOptions.html
@@ -0,0 +1,136 @@
+<!DOCTYPE HTML>
+<html lang>
+<head>
+<!-- Generated by javadoc (17) on Tue May 19 22:05:47 UTC 2026 -->
+<title>Uses of Class org.apache.datafusion.CsvWriteOptions (Apache DataFusion Java 0.1.0-SNAPSHOT)</title>
+<meta name="viewport" content="width=device-width, initial-scale=1">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<meta name="dc.created" content="2026-05-19">
+<meta name="description" content="use: package: org.apache.datafusion, class: CsvWriteOptions">
+<meta name="generator" content="javadoc/ClassUseWriter">
+<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
+<link rel="stylesheet" type="text/css" href="../../../../script-dir/jquery-ui.min.css" title="Style">
+<link rel="stylesheet" type="text/css" href="../../../../jquery-ui.overrides.css" title="Style">
+<script type="text/javascript" src="../../../../script.js"></script>
+<script type="text/javascript" src="../../../../script-dir/jquery-3.7.1.min.js"></script>
+<script type="text/javascript" src="../../../../script-dir/jquery-ui.min.js"></script>
+</head>
+<body class="class-use-page">
+<script type="text/javascript">var pathtoroot = "../../../../";
+loadScripts(document, 'script');</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<div class="flex-box">
+<header role="banner" class="flex-header">
+<nav role="navigation">
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="top-nav" id="navbar-top">
+<div class="skip-nav"><a href="#skip-navbar-top" title="Skip navigation links">Skip navigation links</a></div>
+<ul id="navbar-top-firstrow" class="nav-list" title="Navigation">
+<li><a href="../../../../index.html">Overview</a></li>
+<li><a href="../package-summary.html">Package</a></li>
+<li><a href="../CsvWriteOptions.html" title="class in org.apache.datafusion">Class</a></li>
+<li class="nav-bar-cell1-rev">Use</li>
+<li><a href="../package-tree.html">Tree</a></li>
+<li><a href="../../../../index-all.html">Index</a></li>
+<li><a href="../../../../help-doc.html#use">Help</a></li>
+</ul>
+</div>
+<div class="sub-nav">
+<div class="nav-list-search"><label for="search-input">SEARCH:</label>
+<input type="text" id="search-input" value="search" disabled="disabled">
+<input type="reset" id="reset-button" value="reset" disabled="disabled">
+</div>
+</div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<span class="skip-nav" id="skip-navbar-top"></span></nav>
+</header>
+<div class="flex-content">
+<main role="main">
+<div class="header">
+<h1 title="Uses of Class org.apache.datafusion.CsvWriteOptions" class="title">Uses of Class<br>org.apache.datafusion.CsvWriteOptions</h1>
+</div>
+<div class="caption"><span>Packages that use <a href="../CsvWriteOptions.html" title="class in org.apache.datafusion">CsvWriteOptions</a></span></div>
+<div class="summary-table two-column-summary">
+<div class="table-header col-first">Package</div>
+<div class="table-header col-last">Description</div>
+<div class="col-first even-row-color"><a href="#org.apache.datafusion">org.apache.datafusion</a></div>
+<div class="col-last even-row-color">&nbsp;</div>
+</div>
+<section class="class-uses">
+<ul class="block-list">
+<li>
+<section class="detail" id="org.apache.datafusion">
+<h2>Uses of <a href="../CsvWriteOptions.html" title="class in org.apache.datafusion">CsvWriteOptions</a> in <a href="../package-summary.html">org.apache.datafusion</a></h2>
+<div class="caption"><span>Methods in <a href="../package-summary.html">org.apache.datafusion</a> that return <a href="../CsvWriteOptions.html" title="class in org.apache.datafusion">CsvWriteOptions</a></span></div>
+<div class="summary-table three-column-summary">
+<div class="table-header col-first">Modifier and Type</div>
+<div class="table-header col-second">Method</div>
+<div class="table-header col-last">Description</div>
+<div class="col-first even-row-color"><code><a href="../CsvWriteOptions.html" title="class in org.apache.datafusion">CsvWriteOptions</a></code></div>
+<div class="col-second even-row-color"><span class="type-name-label">CsvWriteOptions.</span><code><a href="../CsvWriteOptions.html#delimiter(byte)" class="member-name-link">delimiter</a><wbr>(byte&nbsp;b)</code></div>
+<div class="col-last even-row-color">
+<div class="block">Field delimiter byte.</div>
+</div>
+<div class="col-first odd-row-color"><code><a href="../CsvWriteOptions.html" title="class in org.apache.datafusion">CsvWriteOptions</a></code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">CsvWriteOptions.</span><code><a href="../CsvWriteOptions.html#escape(byte)" class="member-name-link">escape</a><wbr>(byte&nbsp;b)</code></div>
+<div class="col-last odd-row-color">
+<div class="block">Escape character byte.</div>
+</div>
+<div class="col-first even-row-color"><code><a href="../CsvWriteOptions.html" title="class in org.apache.datafusion">CsvWriteOptions</a></code></div>
+<div class="col-second even-row-color"><span class="type-name-label">CsvWriteOptions.</span><code><a href="../CsvWriteOptions.html#fileCompressionType(org.apache.datafusion.FileCompressionType)" class="member-name-link">fileCompressionType</a><wbr>(<a href="../FileCompressionType.html" title="enum class in org.apache.datafusion">FileCompressionType</a>&nbsp;t)</code></div>
+<div class="col-last even-row-color">
+<div class="block">Output compression codec.</div>
+</div>
+<div class="col-first odd-row-color"><code><a href="../CsvWriteOptions.html" title="class in org.apache.datafusion">CsvWriteOptions</a></code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">CsvWriteOptions.</span><code><a href="../CsvWriteOptions.html#hasHeader(boolean)" class="member-name-link">hasHeader</a><wbr>(boolean&nbsp;v)</code></div>
+<div class="col-last odd-row-color">
+<div class="block">Whether to write a header row.</div>
+</div>
+<div class="col-first even-row-color"><code><a href="../CsvWriteOptions.html" title="class in org.apache.datafusion">CsvWriteOptions</a></code></div>
+<div class="col-second even-row-color"><span class="type-name-label">CsvWriteOptions.</span><code><a href="../CsvWriteOptions.html#nullValue(java.lang.String)" class="member-name-link">nullValue</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;s)</code></div>
+<div class="col-last even-row-color">
+<div class="block">String to write for SQL NULL values.</div>
+</div>
+<div class="col-first odd-row-color"><code><a href="../CsvWriteOptions.html" title="class in org.apache.datafusion">CsvWriteOptions</a></code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">CsvWriteOptions.</span><code><a href="../CsvWriteOptions.html#partitionCols(java.lang.String...)" class="member-name-link">partitionCols</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>...&nbsp;cols)</code></div>
+<div class="col-last odd-row-color">
+<div class="block">Hive-style partition columns.</div>
+</div>
+<div class="col-first even-row-color"><code><a href="../CsvWriteOptions.html" title="class in org.apache.datafusion">CsvWriteOptions</a></code></div>
+<div class="col-second even-row-color"><span class="type-name-label">CsvWriteOptions.</span><code><a href="../CsvWriteOptions.html#quote(byte)" class="member-name-link">quote</a><wbr>(byte&nbsp;b)</code></div>
+<div class="col-last even-row-color">
+<div class="block">Quote character byte.</div>
+</div>
+<div class="col-first odd-row-color"><code><a href="../CsvWriteOptions.html" title="class in org.apache.datafusion">CsvWriteOptions</a></code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">CsvWriteOptions.</span><code><a href="../CsvWriteOptions.html#singleFileOutput(boolean)" class="member-name-link">singleFileOutput</a><wbr>(boolean&nbsp;v)</code></div>
+<div class="col-last odd-row-color">
+<div class="block">When <code>true</code>, write to a single file at the supplied path.</div>
+</div>
+</div>
+<div class="caption"><span>Methods in <a href="../package-summary.html">org.apache.datafusion</a> with parameters of type <a href="../CsvWriteOptions.html" title="class in org.apache.datafusion">CsvWriteOptions</a></span></div>
+<div class="summary-table three-column-summary">
+<div class="table-header col-first">Modifier and Type</div>
+<div class="table-header col-second">Method</div>
+<div class="table-header col-last">Description</div>
+<div class="col-first even-row-color"><code>void</code></div>
+<div class="col-second even-row-color"><span class="type-name-label">DataFrame.</span><code><a href="../DataFrame.html#writeCsv(java.lang.String,org.apache.datafusion.CsvWriteOptions)" class="member-name-link">writeCsv</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;path,
+ <a href="../CsvWriteOptions.html" title="class in org.apache.datafusion">CsvWriteOptions</a>&nbsp;options)</code></div>
+<div class="col-last even-row-color">
+<div class="block">Materialize this DataFrame as CSV at <code>path</code> with the supplied <a href="../CsvWriteOptions.html" title="class in org.apache.datafusion"><code>CsvWriteOptions</code></a>.</div>
+</div>
+</div>
+</section>
+</li>
+</ul>
+</section>
+</main>
+<footer role="contentinfo">
+<hr>
+<p class="legal-copy"><small>Copyright &#169; 2026. All rights reserved.</small></p>
+</footer>
+</div>
+</div>
+</body>
+</html>
diff --git a/api/org/apache/datafusion/class-use/DataFrame.html b/api/org/apache/datafusion/class-use/DataFrame.html
index e546f54..2b4364b 100644
--- a/api/org/apache/datafusion/class-use/DataFrame.html
+++ b/api/org/apache/datafusion/class-use/DataFrame.html
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML>
 <html lang>
 <head>
-<!-- Generated by javadoc (17) on Mon May 18 17:40:42 UTC 2026 -->
+<!-- Generated by javadoc (17) on Tue May 19 22:05:47 UTC 2026 -->
 <title>Uses of Class org.apache.datafusion.DataFrame (Apache DataFusion Java 0.1.0-SNAPSHOT)</title>
 <meta name="viewport" content="width=device-width, initial-scale=1">
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<meta name="dc.created" content="2026-05-18">
+<meta name="dc.created" content="2026-05-19">
 <meta name="description" content="use: package: org.apache.datafusion, class: DataFrame">
 <meta name="generator" content="javadoc/ClassUseWriter">
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
@@ -111,6 +111,17 @@ loadScripts(document, 'script');</script>
 <div class="block">Read an Arrow IPC file as a <a href="../DataFrame.html" title="class in org.apache.datafusion"><code>DataFrame</code></a> with the supplied <a href="../ArrowReadOptions.html" title="class in org.apache.datafusion"><code>ArrowReadOptions</code></a>.</div>
 </div>
 <div class="col-first even-row-color"><code><a href="../DataFrame.html" title="class in org.apache.datafusion">DataFrame</a></code></div>
+<div class="col-second even-row-color"><span class="type-name-label">SessionContext.</span><code><a href="../SessionContext.html#readAvro(java.lang.String)" class="member-name-link">readAvro</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;path)</code></div>
+<div class="col-last even-row-color">
+<div class="block">Read an Avro file as a <a href="../DataFrame.html" title="class in org.apache.datafusion"><code>DataFrame</code></a> without registering it.</div>
+</div>
+<div class="col-first odd-row-color"><code><a href="../DataFrame.html" title="class in org.apache.datafusion">DataFrame</a></code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">SessionContext.</span><code><a href="../SessionContext.html#readAvro(java.lang.String,org.apache.datafusion.AvroReadOptions)" class="member-name-link">readAvro</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;path,
+ <a href="../AvroReadOptions.html" title="class in org.apache.datafusion">AvroReadOptions</a>&nbsp;options)</code></div>
+<div class="col-last odd-row-color">
+<div class="block">Read an Avro file as a <a href="../DataFrame.html" title="class in org.apache.datafusion"><code>DataFrame</code></a> with the supplied <a href="../AvroReadOptions.html" title="class in org.apache.datafusion"><code>AvroReadOptions</code></a>.</div>
+</div>
+<div class="col-first even-row-color"><code><a href="../DataFrame.html" title="class in org.apache.datafusion">DataFrame</a></code></div>
 <div class="col-second even-row-color"><span class="type-name-label">SessionContext.</span><code><a href="../SessionContext.html#readCsv(java.lang.String)" class="member-name-link">readCsv</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;path)</code></div>
 <div class="col-last even-row-color">
 <div class="block">Read a CSV file as a <a href="../DataFrame.html" title="class in org.apache.datafusion"><code>DataFrame</code></a> without registering it.</div>
diff --git a/api/org/apache/datafusion/class-use/FileCompressionType.html b/api/org/apache/datafusion/class-use/FileCompressionType.html
index dbd1df7..de73281 100644
--- a/api/org/apache/datafusion/class-use/FileCompressionType.html
+++ b/api/org/apache/datafusion/class-use/FileCompressionType.html
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML>
 <html lang>
 <head>
-<!-- Generated by javadoc (17) on Mon May 18 17:40:42 UTC 2026 -->
+<!-- Generated by javadoc (17) on Tue May 19 22:05:47 UTC 2026 -->
 <title>Uses of Enum Class org.apache.datafusion.FileCompressionType (Apache DataFusion Java 0.1.0-SNAPSHOT)</title>
 <meta name="viewport" content="width=device-width, initial-scale=1">
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<meta name="dc.created" content="2026-05-18">
+<meta name="dc.created" content="2026-05-19">
 <meta name="description" content="use: package: org.apache.datafusion, enum: FileCompressionType">
 <meta name="generator" content="javadoc/ClassUseWriter">
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
@@ -88,6 +88,16 @@ the order they are declared.</div>
 <div class="col-first even-row-color"><code><a href="../CsvReadOptions.html" title="class in org.apache.datafusion">CsvReadOptions</a></code></div>
 <div class="col-second even-row-color"><span class="type-name-label">CsvReadOptions.</span><code><a href="../CsvReadOptions.html#fileCompressionType(org.apache.datafusion.FileCompressionType)" class="member-name-link">fileCompressionType</a><wbr>(<a href="../FileCompressionType.html" title="enum class in org.apache.datafusion">FileCompressionType</a>&nbsp;t)</code></div>
 <div class="col-last even-row-color">&nbsp;</div>
+<div class="col-first odd-row-color"><code><a href="../CsvWriteOptions.html" title="class in org.apache.datafusion">CsvWriteOptions</a></code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">CsvWriteOptions.</span><code><a href="../CsvWriteOptions.html#fileCompressionType(org.apache.datafusion.FileCompressionType)" class="member-name-link">fileCompressionType</a><wbr>(<a href="../FileCompressionType.html" title="enum class in org.apache.datafusion">FileCompressionType</a>&nbsp;t)</code></div>
+<div class="col-last odd-row-color">
+<div class="block">Output compression codec.</div>
+</div>
+<div class="col-first even-row-color"><code><a href="../JsonWriteOptions.html" title="class in org.apache.datafusion">JsonWriteOptions</a></code></div>
+<div class="col-second even-row-color"><span class="type-name-label">JsonWriteOptions.</span><code><a href="../JsonWriteOptions.html#fileCompressionType(org.apache.datafusion.FileCompressionType)" class="member-name-link">fileCompressionType</a><wbr>(<a href="../FileCompressionType.html" title="enum class in org.apache.datafusion">FileCompressionType</a>&nbsp;t)</code></div>
+<div class="col-last even-row-color">
+<div class="block">Output compression codec.</div>
+</div>
 <div class="col-first odd-row-color"><code><a href="../NdJsonReadOptions.html" title="class in org.apache.datafusion">NdJsonReadOptions</a></code></div>
 <div class="col-second odd-row-color"><span class="type-name-label">NdJsonReadOptions.</span><code><a href="../NdJsonReadOptions.html#fileCompressionType(org.apache.datafusion.FileCompressionType)" class="member-name-link">fileCompressionType</a><wbr>(<a href="../FileCompressionType.html" title="enum class in org.apache.datafusion">FileCompressionType</a>&nbsp;t)</code></div>
 <div class="col-last odd-row-color">&nbsp;</div>
diff --git a/api/org/apache/datafusion/class-use/ParquetWriteOptions.html b/api/org/apache/datafusion/class-use/JsonWriteOptions.html
similarity index 55%
copy from api/org/apache/datafusion/class-use/ParquetWriteOptions.html
copy to api/org/apache/datafusion/class-use/JsonWriteOptions.html
index b37afcf..575cac7 100644
--- a/api/org/apache/datafusion/class-use/ParquetWriteOptions.html
+++ b/api/org/apache/datafusion/class-use/JsonWriteOptions.html
@@ -1,12 +1,12 @@
 <!DOCTYPE HTML>
 <html lang>
 <head>
-<!-- Generated by javadoc (17) on Mon May 18 17:40:42 UTC 2026 -->
-<title>Uses of Class org.apache.datafusion.ParquetWriteOptions (Apache DataFusion Java 0.1.0-SNAPSHOT)</title>
+<!-- Generated by javadoc (17) on Tue May 19 22:05:47 UTC 2026 -->
+<title>Uses of Class org.apache.datafusion.JsonWriteOptions (Apache DataFusion Java 0.1.0-SNAPSHOT)</title>
 <meta name="viewport" content="width=device-width, initial-scale=1">
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<meta name="dc.created" content="2026-05-18">
-<meta name="description" content="use: package: org.apache.datafusion, class: ParquetWriteOptions">
+<meta name="dc.created" content="2026-05-19">
+<meta name="description" content="use: package: org.apache.datafusion, class: JsonWriteOptions">
 <meta name="generator" content="javadoc/ClassUseWriter">
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <link rel="stylesheet" type="text/css" href="../../../../script-dir/jquery-ui.min.css" title="Style">
@@ -30,7 +30,7 @@ loadScripts(document, 'script');</script>
 <ul id="navbar-top-firstrow" class="nav-list" title="Navigation">
 <li><a href="../../../../index.html">Overview</a></li>
 <li><a href="../package-summary.html">Package</a></li>
-<li><a href="../ParquetWriteOptions.html" title="class in org.apache.datafusion">Class</a></li>
+<li><a href="../JsonWriteOptions.html" title="class in org.apache.datafusion">Class</a></li>
 <li class="nav-bar-cell1-rev">Use</li>
 <li><a href="../package-tree.html">Tree</a></li>
 <li><a href="../../../../index-all.html">Index</a></li>
@@ -49,9 +49,9 @@ loadScripts(document, 'script');</script>
 <div class="flex-content">
 <main role="main">
 <div class="header">
-<h1 title="Uses of Class org.apache.datafusion.ParquetWriteOptions" class="title">Uses of Class<br>org.apache.datafusion.ParquetWriteOptions</h1>
+<h1 title="Uses of Class org.apache.datafusion.JsonWriteOptions" class="title">Uses of Class<br>org.apache.datafusion.JsonWriteOptions</h1>
 </div>
-<div class="caption"><span>Packages that use <a href="../ParquetWriteOptions.html" title="class in org.apache.datafusion">ParquetWriteOptions</a></span></div>
+<div class="caption"><span>Packages that use <a href="../JsonWriteOptions.html" title="class in org.apache.datafusion">JsonWriteOptions</a></span></div>
 <div class="summary-table two-column-summary">
 <div class="table-header col-first">Package</div>
 <div class="table-header col-last">Description</div>
@@ -62,33 +62,38 @@ loadScripts(document, 'script');</script>
 <ul class="block-list">
 <li>
 <section class="detail" id="org.apache.datafusion">
-<h2>Uses of <a href="../ParquetWriteOptions.html" title="class in org.apache.datafusion">ParquetWriteOptions</a> in <a href="../package-summary.html">org.apache.datafusion</a></h2>
-<div class="caption"><span>Methods in <a href="../package-summary.html">org.apache.datafusion</a> that return <a href="../ParquetWriteOptions.html" title="class in org.apache.datafusion">ParquetWriteOptions</a></span></div>
+<h2>Uses of <a href="../JsonWriteOptions.html" title="class in org.apache.datafusion">JsonWriteOptions</a> in <a href="../package-summary.html">org.apache.datafusion</a></h2>
+<div class="caption"><span>Methods in <a href="../package-summary.html">org.apache.datafusion</a> that return <a href="../JsonWriteOptions.html" title="class in org.apache.datafusion">JsonWriteOptions</a></span></div>
 <div class="summary-table three-column-summary">
 <div class="table-header col-first">Modifier and Type</div>
 <div class="table-header col-second">Method</div>
 <div class="table-header col-last">Description</div>
-<div class="col-first even-row-color"><code><a href="../ParquetWriteOptions.html" title="class in org.apache.datafusion">ParquetWriteOptions</a></code></div>
-<div class="col-second even-row-color"><span class="type-name-label">ParquetWriteOptions.</span><code><a href="../ParquetWriteOptions.html#compression(java.lang.String)" class="member-name-link">compression</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;spec)</code></div>
+<div class="col-first even-row-color"><code><a href="../JsonWriteOptions.html" title="class in org.apache.datafusion">JsonWriteOptions</a></code></div>
+<div class="col-second even-row-color"><span class="type-name-label">JsonWriteOptions.</span><code><a href="../JsonWriteOptions.html#fileCompressionType(org.apache.datafusion.FileCompressionType)" class="member-name-link">fileCompressionType</a><wbr>(<a href="../FileCompressionType.html" title="enum class in org.apache.datafusion">FileCompressionType</a>&nbsp;t)</code></div>
 <div class="col-last even-row-color">
-<div class="block">Compression codec spec, passed verbatim to DataFusion.</div>
+<div class="block">Output compression codec.</div>
 </div>
-<div class="col-first odd-row-color"><code><a href="../ParquetWriteOptions.html" title="class in org.apache.datafusion">ParquetWriteOptions</a></code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">ParquetWriteOptions.</span><code><a href="../ParquetWriteOptions.html#singleFileOutput(boolean)" class="member-name-link">singleFileOutput</a><wbr>(boolean&nbsp;v)</code></div>
+<div class="col-first odd-row-color"><code><a href="../JsonWriteOptions.html" title="class in org.apache.datafusion">JsonWriteOptions</a></code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">JsonWriteOptions.</span><code><a href="../JsonWriteOptions.html#partitionCols(java.lang.String...)" class="member-name-link">partitionCols</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>...&nbsp;cols)</code></div>
 <div class="col-last odd-row-color">
+<div class="block">Hive-style partition columns.</div>
+</div>
+<div class="col-first even-row-color"><code><a href="../JsonWriteOptions.html" title="class in org.apache.datafusion">JsonWriteOptions</a></code></div>
+<div class="col-second even-row-color"><span class="type-name-label">JsonWriteOptions.</span><code><a href="../JsonWriteOptions.html#singleFileOutput(boolean)" class="member-name-link">singleFileOutput</a><wbr>(boolean&nbsp;v)</code></div>
+<div class="col-last even-row-color">
 <div class="block">When <code>true</code>, write to a single file at the supplied path.</div>
 </div>
 </div>
-<div class="caption"><span>Methods in <a href="../package-summary.html">org.apache.datafusion</a> with parameters of type <a href="../ParquetWriteOptions.html" title="class in org.apache.datafusion">ParquetWriteOptions</a></span></div>
+<div class="caption"><span>Methods in <a href="../package-summary.html">org.apache.datafusion</a> with parameters of type <a href="../JsonWriteOptions.html" title="class in org.apache.datafusion">JsonWriteOptions</a></span></div>
 <div class="summary-table three-column-summary">
 <div class="table-header col-first">Modifier and Type</div>
 <div class="table-header col-second">Method</div>
 <div class="table-header col-last">Description</div>
 <div class="col-first even-row-color"><code>void</code></div>
-<div class="col-second even-row-color"><span class="type-name-label">DataFrame.</span><code><a href="../DataFrame.html#writeParquet(java.lang.String,org.apache.datafusion.ParquetWriteOptions)" class="member-name-link">writeParquet</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;path,
- <a href="../ParquetWriteOptions.html" title="class in org.apache.datafusion">ParquetWriteOptions</a>&nbsp;options)</code></div>
+<div class="col-second even-row-color"><span class="type-name-label">DataFrame.</span><code><a href="../DataFrame.html#writeJson(java.lang.String,org.apache.datafusion.JsonWriteOptions)" class="member-name-link">writeJson</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;path,
+ <a href="../JsonWriteOptions.html" title="class in org.apache.datafusion">JsonWriteOptions</a>&nbsp;options)</code></div>
 <div class="col-last even-row-color">
-<div class="block">Materialize this DataFrame as Parquet at <code>path</code> with the supplied <a href="../ParquetWriteOptions.html" title="class in org.apache.datafusion"><code>ParquetWriteOptions</code></a>.</div>
+<div class="block">Materialize this DataFrame as newline-delimited JSON at <code>path</code> with the supplied <a href="../JsonWriteOptions.html" title="class in org.apache.datafusion"><code>JsonWriteOptions</code></a>.</div>
 </div>
 </div>
 </section>
diff --git a/api/org/apache/datafusion/class-use/NativeLibraryLoader.html b/api/org/apache/datafusion/class-use/NativeLibraryLoader.html
index ab23f07..219e87d 100644
--- a/api/org/apache/datafusion/class-use/NativeLibraryLoader.html
+++ b/api/org/apache/datafusion/class-use/NativeLibraryLoader.html
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML>
 <html lang>
 <head>
-<!-- Generated by javadoc (17) on Mon May 18 17:40:42 UTC 2026 -->
+<!-- Generated by javadoc (17) on Tue May 19 22:05:47 UTC 2026 -->
 <title>Uses of Class org.apache.datafusion.NativeLibraryLoader (Apache DataFusion Java 0.1.0-SNAPSHOT)</title>
 <meta name="viewport" content="width=device-width, initial-scale=1">
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<meta name="dc.created" content="2026-05-18">
+<meta name="dc.created" content="2026-05-19">
 <meta name="description" content="use: package: org.apache.datafusion, class: NativeLibraryLoader">
 <meta name="generator" content="javadoc/ClassUseWriter">
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
diff --git a/api/org/apache/datafusion/class-use/NdJsonReadOptions.html b/api/org/apache/datafusion/class-use/NdJsonReadOptions.html
index 6206719..09c975c 100644
--- a/api/org/apache/datafusion/class-use/NdJsonReadOptions.html
+++ b/api/org/apache/datafusion/class-use/NdJsonReadOptions.html
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML>
 <html lang>
 <head>
-<!-- Generated by javadoc (17) on Mon May 18 17:40:42 UTC 2026 -->
+<!-- Generated by javadoc (17) on Tue May 19 22:05:47 UTC 2026 -->
 <title>Uses of Class org.apache.datafusion.NdJsonReadOptions (Apache DataFusion Java 0.1.0-SNAPSHOT)</title>
 <meta name="viewport" content="width=device-width, initial-scale=1">
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<meta name="dc.created" content="2026-05-18">
+<meta name="dc.created" content="2026-05-19">
 <meta name="description" content="use: package: org.apache.datafusion, class: NdJsonReadOptions">
 <meta name="generator" content="javadoc/ClassUseWriter">
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
diff --git a/api/org/apache/datafusion/class-use/ParquetReadOptions.html b/api/org/apache/datafusion/class-use/ParquetReadOptions.html
index 3debbce..813f1e2 100644
--- a/api/org/apache/datafusion/class-use/ParquetReadOptions.html
+++ b/api/org/apache/datafusion/class-use/ParquetReadOptions.html
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML>
 <html lang>
 <head>
-<!-- Generated by javadoc (17) on Mon May 18 17:40:42 UTC 2026 -->
+<!-- Generated by javadoc (17) on Tue May 19 22:05:47 UTC 2026 -->
 <title>Uses of Class org.apache.datafusion.ParquetReadOptions (Apache DataFusion Java 0.1.0-SNAPSHOT)</title>
 <meta name="viewport" content="width=device-width, initial-scale=1">
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<meta name="dc.created" content="2026-05-18">
+<meta name="dc.created" content="2026-05-19">
 <meta name="description" content="use: package: org.apache.datafusion, class: ParquetReadOptions">
 <meta name="generator" content="javadoc/ClassUseWriter">
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
diff --git a/api/org/apache/datafusion/class-use/ParquetWriteOptions.html b/api/org/apache/datafusion/class-use/ParquetWriteOptions.html
index b37afcf..6185862 100644
--- a/api/org/apache/datafusion/class-use/ParquetWriteOptions.html
+++ b/api/org/apache/datafusion/class-use/ParquetWriteOptions.html
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML>
 <html lang>
 <head>
-<!-- Generated by javadoc (17) on Mon May 18 17:40:42 UTC 2026 -->
+<!-- Generated by javadoc (17) on Tue May 19 22:05:47 UTC 2026 -->
 <title>Uses of Class org.apache.datafusion.ParquetWriteOptions (Apache DataFusion Java 0.1.0-SNAPSHOT)</title>
 <meta name="viewport" content="width=device-width, initial-scale=1">
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<meta name="dc.created" content="2026-05-18">
+<meta name="dc.created" content="2026-05-19">
 <meta name="description" content="use: package: org.apache.datafusion, class: ParquetWriteOptions">
 <meta name="generator" content="javadoc/ClassUseWriter">
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
diff --git a/api/org/apache/datafusion/class-use/ScalarFunction.html b/api/org/apache/datafusion/class-use/ScalarFunction.html
index 397a578..a857463 100644
--- a/api/org/apache/datafusion/class-use/ScalarFunction.html
+++ b/api/org/apache/datafusion/class-use/ScalarFunction.html
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML>
 <html lang>
 <head>
-<!-- Generated by javadoc (17) on Mon May 18 17:40:42 UTC 2026 -->
+<!-- Generated by javadoc (17) on Tue May 19 22:05:47 UTC 2026 -->
 <title>Uses of Interface org.apache.datafusion.ScalarFunction (Apache DataFusion Java 0.1.0-SNAPSHOT)</title>
 <meta name="viewport" content="width=device-width, initial-scale=1">
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<meta name="dc.created" content="2026-05-18">
+<meta name="dc.created" content="2026-05-19">
 <meta name="description" content="use: package: org.apache.datafusion, interface: ScalarFunction">
 <meta name="generator" content="javadoc/ClassUseWriter">
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
diff --git a/api/org/apache/datafusion/class-use/ScalarFunctionArgs.html b/api/org/apache/datafusion/class-use/ScalarFunctionArgs.html
index 73a3c80..f9c802c 100644
--- a/api/org/apache/datafusion/class-use/ScalarFunctionArgs.html
+++ b/api/org/apache/datafusion/class-use/ScalarFunctionArgs.html
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML>
 <html lang>
 <head>
-<!-- Generated by javadoc (17) on Mon May 18 17:40:42 UTC 2026 -->
+<!-- Generated by javadoc (17) on Tue May 19 22:05:47 UTC 2026 -->
 <title>Uses of Record Class org.apache.datafusion.ScalarFunctionArgs (Apache DataFusion Java 0.1.0-SNAPSHOT)</title>
 <meta name="viewport" content="width=device-width, initial-scale=1">
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<meta name="dc.created" content="2026-05-18">
+<meta name="dc.created" content="2026-05-19">
 <meta name="description" content="use: package: org.apache.datafusion, record: ScalarFunctionArgs">
 <meta name="generator" content="javadoc/ClassUseWriter">
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
diff --git a/api/org/apache/datafusion/class-use/ScalarUdf.html b/api/org/apache/datafusion/class-use/ScalarUdf.html
index e241c91..185a2b0 100644
--- a/api/org/apache/datafusion/class-use/ScalarUdf.html
+++ b/api/org/apache/datafusion/class-use/ScalarUdf.html
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML>
 <html lang>
 <head>
-<!-- Generated by javadoc (17) on Mon May 18 17:40:42 UTC 2026 -->
+<!-- Generated by javadoc (17) on Tue May 19 22:05:47 UTC 2026 -->
 <title>Uses of Class org.apache.datafusion.ScalarUdf (Apache DataFusion Java 0.1.0-SNAPSHOT)</title>
 <meta name="viewport" content="width=device-width, initial-scale=1">
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<meta name="dc.created" content="2026-05-18">
+<meta name="dc.created" content="2026-05-19">
 <meta name="description" content="use: package: org.apache.datafusion, class: ScalarUdf">
 <meta name="generator" content="javadoc/ClassUseWriter">
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
diff --git a/api/org/apache/datafusion/class-use/SessionContext.html b/api/org/apache/datafusion/class-use/SessionContext.html
index c014fd5..59b9015 100644
--- a/api/org/apache/datafusion/class-use/SessionContext.html
+++ b/api/org/apache/datafusion/class-use/SessionContext.html
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML>
 <html lang>
 <head>
-<!-- Generated by javadoc (17) on Mon May 18 17:40:42 UTC 2026 -->
+<!-- Generated by javadoc (17) on Tue May 19 22:05:47 UTC 2026 -->
 <title>Uses of Class org.apache.datafusion.SessionContext (Apache DataFusion Java 0.1.0-SNAPSHOT)</title>
 <meta name="viewport" content="width=device-width, initial-scale=1">
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<meta name="dc.created" content="2026-05-18">
+<meta name="dc.created" content="2026-05-19">
 <meta name="description" content="use: package: org.apache.datafusion, class: SessionContext">
 <meta name="generator" content="javadoc/ClassUseWriter">
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
diff --git a/api/org/apache/datafusion/class-use/SessionContextBuilder.html b/api/org/apache/datafusion/class-use/SessionContextBuilder.html
index 14e333e..7ae6919 100644
--- a/api/org/apache/datafusion/class-use/SessionContextBuilder.html
+++ b/api/org/apache/datafusion/class-use/SessionContextBuilder.html
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML>
 <html lang>
 <head>
-<!-- Generated by javadoc (17) on Mon May 18 17:40:42 UTC 2026 -->
+<!-- Generated by javadoc (17) on Tue May 19 22:05:47 UTC 2026 -->
 <title>Uses of Class org.apache.datafusion.SessionContextBuilder (Apache DataFusion Java 0.1.0-SNAPSHOT)</title>
 <meta name="viewport" content="width=device-width, initial-scale=1">
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<meta name="dc.created" content="2026-05-18">
+<meta name="dc.created" content="2026-05-19">
 <meta name="description" content="use: package: org.apache.datafusion, class: SessionContextBuilder">
 <meta name="generator" content="javadoc/ClassUseWriter">
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
diff --git a/api/org/apache/datafusion/class-use/NativeLibraryLoader.html b/api/org/apache/datafusion/class-use/SimpleTableProvider.html
similarity index 83%
copy from api/org/apache/datafusion/class-use/NativeLibraryLoader.html
copy to api/org/apache/datafusion/class-use/SimpleTableProvider.html
index ab23f07..3b43589 100644
--- a/api/org/apache/datafusion/class-use/NativeLibraryLoader.html
+++ b/api/org/apache/datafusion/class-use/SimpleTableProvider.html
@@ -1,12 +1,12 @@
 <!DOCTYPE HTML>
 <html lang>
 <head>
-<!-- Generated by javadoc (17) on Mon May 18 17:40:42 UTC 2026 -->
-<title>Uses of Class org.apache.datafusion.NativeLibraryLoader (Apache DataFusion Java 0.1.0-SNAPSHOT)</title>
+<!-- Generated by javadoc (17) on Tue May 19 22:05:47 UTC 2026 -->
+<title>Uses of Class org.apache.datafusion.SimpleTableProvider (Apache DataFusion Java 0.1.0-SNAPSHOT)</title>
 <meta name="viewport" content="width=device-width, initial-scale=1">
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<meta name="dc.created" content="2026-05-18">
-<meta name="description" content="use: package: org.apache.datafusion, class: NativeLibraryLoader">
+<meta name="dc.created" content="2026-05-19">
+<meta name="description" content="use: package: org.apache.datafusion, class: SimpleTableProvider">
 <meta name="generator" content="javadoc/ClassUseWriter">
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <link rel="stylesheet" type="text/css" href="../../../../script-dir/jquery-ui.min.css" title="Style">
@@ -30,7 +30,7 @@ loadScripts(document, 'script');</script>
 <ul id="navbar-top-firstrow" class="nav-list" title="Navigation">
 <li><a href="../../../../index.html">Overview</a></li>
 <li><a href="../package-summary.html">Package</a></li>
-<li><a href="../NativeLibraryLoader.html" title="class in org.apache.datafusion">Class</a></li>
+<li><a href="../SimpleTableProvider.html" title="class in org.apache.datafusion">Class</a></li>
 <li class="nav-bar-cell1-rev">Use</li>
 <li><a href="../package-tree.html">Tree</a></li>
 <li><a href="../../../../index-all.html">Index</a></li>
@@ -49,9 +49,9 @@ loadScripts(document, 'script');</script>
 <div class="flex-content">
 <main role="main">
 <div class="header">
-<h1 title="Uses of Class org.apache.datafusion.NativeLibraryLoader" class="title">Uses of Class<br>org.apache.datafusion.NativeLibraryLoader</h1>
+<h1 title="Uses of Class org.apache.datafusion.SimpleTableProvider" class="title">Uses of Class<br>org.apache.datafusion.SimpleTableProvider</h1>
 </div>
-No usage of org.apache.datafusion.NativeLibraryLoader</main>
+No usage of org.apache.datafusion.SimpleTableProvider</main>
 <footer role="contentinfo">
 <hr>
 <p class="legal-copy"><small>Copyright &#169; 2026. All rights reserved.</small></p>
diff --git a/api/org/apache/datafusion/class-use/ScalarFunction.html b/api/org/apache/datafusion/class-use/TableProvider.html
similarity index 51%
copy from api/org/apache/datafusion/class-use/ScalarFunction.html
copy to api/org/apache/datafusion/class-use/TableProvider.html
index 397a578..811e2bb 100644
--- a/api/org/apache/datafusion/class-use/ScalarFunction.html
+++ b/api/org/apache/datafusion/class-use/TableProvider.html
@@ -1,12 +1,12 @@
 <!DOCTYPE HTML>
 <html lang>
 <head>
-<!-- Generated by javadoc (17) on Mon May 18 17:40:42 UTC 2026 -->
-<title>Uses of Interface org.apache.datafusion.ScalarFunction (Apache DataFusion Java 0.1.0-SNAPSHOT)</title>
+<!-- Generated by javadoc (17) on Tue May 19 22:05:47 UTC 2026 -->
+<title>Uses of Interface org.apache.datafusion.TableProvider (Apache DataFusion Java 0.1.0-SNAPSHOT)</title>
 <meta name="viewport" content="width=device-width, initial-scale=1">
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<meta name="dc.created" content="2026-05-18">
-<meta name="description" content="use: package: org.apache.datafusion, interface: ScalarFunction">
+<meta name="dc.created" content="2026-05-19">
+<meta name="description" content="use: package: org.apache.datafusion, interface: TableProvider">
 <meta name="generator" content="javadoc/ClassUseWriter">
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <link rel="stylesheet" type="text/css" href="../../../../script-dir/jquery-ui.min.css" title="Style">
@@ -30,7 +30,7 @@ loadScripts(document, 'script');</script>
 <ul id="navbar-top-firstrow" class="nav-list" title="Navigation">
 <li><a href="../../../../index.html">Overview</a></li>
 <li><a href="../package-summary.html">Package</a></li>
-<li><a href="../ScalarFunction.html" title="interface in org.apache.datafusion">Class</a></li>
+<li><a href="../TableProvider.html" title="interface in org.apache.datafusion">Class</a></li>
 <li class="nav-bar-cell1-rev">Use</li>
 <li><a href="../package-tree.html">Tree</a></li>
 <li><a href="../../../../index-all.html">Index</a></li>
@@ -49,9 +49,9 @@ loadScripts(document, 'script');</script>
 <div class="flex-content">
 <main role="main">
 <div class="header">
-<h1 title="Uses of Interface org.apache.datafusion.ScalarFunction" class="title">Uses of Interface<br>org.apache.datafusion.ScalarFunction</h1>
+<h1 title="Uses of Interface org.apache.datafusion.TableProvider" class="title">Uses of Interface<br>org.apache.datafusion.TableProvider</h1>
 </div>
-<div class="caption"><span>Packages that use <a href="../ScalarFunction.html" title="interface in org.apache.datafusion">ScalarFunction</a></span></div>
+<div class="caption"><span>Packages that use <a href="../TableProvider.html" title="interface in org.apache.datafusion">TableProvider</a></span></div>
 <div class="summary-table two-column-summary">
 <div class="table-header col-first">Package</div>
 <div class="table-header col-last">Description</div>
@@ -64,62 +64,47 @@ loadScripts(document, 'script');</script>
 <ul class="block-list">
 <li>
 <section class="detail" id="org.apache.datafusion">
-<h2>Uses of <a href="../ScalarFunction.html" title="interface in org.apache.datafusion">ScalarFunction</a> in <a href="../package-summary.html">org.apache.datafusion</a></h2>
-<div class="caption"><span>Methods in <a href="../package-summary.html">org.apache.datafusion</a> that return <a href="../ScalarFunction.html" title="interface in org.apache.datafusion">ScalarFunction</a></span></div>
+<h2>Uses of <a href="../TableProvider.html" title="interface in org.apache.datafusion">TableProvider</a> in <a href="../package-summary.html">org.apache.datafusion</a></h2>
+<div class="caption"><span>Classes in <a href="../package-summary.html">org.apache.datafusion</a> that implement <a href="../TableProvider.html" title="interface in org.apache.datafusion">TableProvider</a></span></div>
 <div class="summary-table three-column-summary">
 <div class="table-header col-first">Modifier and Type</div>
-<div class="table-header col-second">Method</div>
+<div class="table-header col-second">Class</div>
 <div class="table-header col-last">Description</div>
-<div class="col-first even-row-color"><code><a href="../ScalarFunction.html" title="interface in org.apache.datafusion">ScalarFunction</a></code></div>
-<div class="col-second even-row-color"><span class="type-name-label">ScalarUdf.</span><code><a href="../ScalarUdf.html#impl()" class="member-name-link">impl</a>()</code></div>
+<div class="col-first even-row-color"><code>final class&nbsp;</code></div>
+<div class="col-second even-row-color"><code><a href="../SimpleTableProvider.html" class="type-name-link" title="class in org.apache.datafusion">SimpleTableProvider</a></code></div>
 <div class="col-last even-row-color">
-<div class="block">The wrapped implementation.</div>
+<div class="block">A <a href="../TableProvider.html" title="interface in org.apache.datafusion"><code>TableProvider</code></a> that pairs a fixed <code>Schema</code> with a function that opens a fresh
+ <code>ArrowReader</code> for each scan.</div>
 </div>
 </div>
-<div class="caption"><span>Methods in <a href="../package-summary.html">org.apache.datafusion</a> with parameters of type <a href="../ScalarFunction.html" title="interface in org.apache.datafusion">ScalarFunction</a></span></div>
+<div class="caption"><span>Methods in <a href="../package-summary.html">org.apache.datafusion</a> with parameters of type <a href="../TableProvider.html" title="interface in org.apache.datafusion">TableProvider</a></span></div>
 <div class="summary-table three-column-summary">
 <div class="table-header col-first">Modifier and Type</div>
 <div class="table-header col-second">Method</div>
 <div class="table-header col-last">Description</div>
-<div class="col-first even-row-color"><code>static <a href="../ScalarUdf.html" title="class in org.apache.datafusion">ScalarUdf</a></code></div>
-<div class="col-second even-row-color"><span class="type-name-label">ScalarUdf.</span><code><a href="../ScalarUdf.html#fromImpl(org.apache.datafusion.ScalarFunction)" class="member-name-link">fromImpl</a><wbr>(<a href="../ScalarFunction.html" title="interface in org.apache.datafusion">ScalarFunction</a>&nbsp;impl)</code></div>
-<div class="col-last even-row-color">
-<div class="block">Equivalent to <code>new ScalarUdf(impl)</code>; mirrors Rust's <code>ScalarUDF::new_from_impl</code>.</div>
-</div>
-</div>
-<div class="caption"><span>Constructors in <a href="../package-summary.html">org.apache.datafusion</a> with parameters of type <a href="../ScalarFunction.html" title="interface in org.apache.datafusion">ScalarFunction</a></span></div>
-<div class="summary-table three-column-summary">
-<div class="table-header col-first">Modifier</div>
-<div class="table-header col-second">Constructor</div>
-<div class="table-header col-last">Description</div>
-<div class="col-first even-row-color"><code>&nbsp;</code></div>
-<div class="col-second even-row-color"><code><a href="../ScalarUdf.html#%3Cinit%3E(org.apache.datafusion.ScalarFunction)" class="member-name-link">ScalarUdf</a><wbr>(<a href="../ScalarFunction.html" title="interface in org.apache.datafusion">ScalarFunction</a>&nbsp;impl)</code></div>
+<div class="col-first even-row-color"><code>void</code></div>
+<div class="col-second even-row-color"><span class="type-name-label">SessionContext.</span><code><a href="../SessionContext.html#registerTable(java.lang.String,org.apache.datafusion.TableProvider)" class="member-name-link">registerTable</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;name,
+ <a href="../TableProvider.html" title="interface in org.apache.datafusion">TableProvider</a>&nbsp;provider)</code></div>
 <div class="col-last even-row-color">
-<div class="block">Wrap a <a href="../ScalarFunction.html" title="interface in org.apache.datafusion"><code>ScalarFunction</code></a> for registration.</div>
+<div class="block">Register a Java-implemented <a href="../TableProvider.html" title="interface in org.apache.datafusion"><code>TableProvider</code></a> under <code>name</code>.</div>
 </div>
 </div>
 </section>
 </li>
 <li>
 <section class="detail" id="org.apache.datafusion.internal">
-<h2>Uses of <a href="../ScalarFunction.html" title="interface in org.apache.datafusion">ScalarFunction</a> in <a href="../internal/package-summary.html">org.apache.datafusion.internal</a></h2>
-<div class="caption"><span>Methods in <a href="../internal/package-summary.html">org.apache.datafusion.internal</a> with parameters of type <a href="../ScalarFunction.html" title="interface in org.apache.datafusion">ScalarFunction</a></span></div>
+<h2>Uses of <a href="../TableProvider.html" title="interface in org.apache.datafusion">TableProvider</a> in <a href="../internal/package-summary.html">org.apache.datafusion.internal</a></h2>
+<div class="caption"><span>Methods in <a href="../internal/package-summary.html">org.apache.datafusion.internal</a> with parameters of type <a href="../TableProvider.html" title="interface in org.apache.datafusion">TableProvider</a></span></div>
 <div class="summary-table three-column-summary">
 <div class="table-header col-first">Modifier and Type</div>
 <div class="table-header col-second">Method</div>
 <div class="table-header col-last">Description</div>
-<div class="col-first even-row-color"><code>static byte</code></div>
-<div class="col-second even-row-color"><span class="type-name-label">JniBridge.</span><code><a href="../internal/JniBridge.html#invokeScalarUdf(org.apache.datafusion.ScalarFunction,long,long,long,long,byte%5B%5D,long,long,int)" class="member-name-link">invokeScalarUdf</a><wbr>(<a href="../ScalarFunction.html" title="interface in org.apache.datafusion">ScalarFunction</a>&nbsp;impl,
- long&nbsp;arrayArgsArrayAddr,
- long&nbsp;arrayArgsSchemaAddr,
- long&nbsp;scalarArgsArrayAddr,
- long&nbsp;scalarArgsSchemaAddr,
- byte[]&nbsp;argKinds,
- long&nbsp;resultArrayAddr,
- long&nbsp;resultSchemaAddr,
- int&nbsp;rowCount)</code></div>
+<div class="col-first even-row-color"><code>static void</code></div>
+<div class="col-second even-row-color"><span class="type-name-label">JniBridge.</span><code><a href="../internal/JniBridge.html#invokeTableScan(org.apache.datafusion.TableProvider,long)" class="member-name-link">invokeTableScan</a><wbr>(<a href="../TableProvider.html" title="interface in org.apache.datafusion">TableProvider</a>&nbsp;provider,
+ long&nbsp;ffiStreamAddr)</code></div>
 <div class="col-last even-row-color">
-<div class="block">Invoke a scalar UDF for one batch.</div>
+<div class="block">Open a fresh batch stream from a Java <a href="../TableProvider.html" title="interface in org.apache.datafusion"><code>TableProvider</code></a> and export it through the supplied
+ Arrow C Data Interface address.</div>
 </div>
 </div>
 </section>
diff --git a/api/org/apache/datafusion/class-use/UnnestOptions.html b/api/org/apache/datafusion/class-use/UnnestOptions.html
index 4329d6f..53889bf 100644
--- a/api/org/apache/datafusion/class-use/UnnestOptions.html
+++ b/api/org/apache/datafusion/class-use/UnnestOptions.html
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML>
 <html lang>
 <head>
-<!-- Generated by javadoc (17) on Mon May 18 17:40:42 UTC 2026 -->
+<!-- Generated by javadoc (17) on Tue May 19 22:05:47 UTC 2026 -->
 <title>Uses of Class org.apache.datafusion.UnnestOptions (Apache DataFusion Java 0.1.0-SNAPSHOT)</title>
 <meta name="viewport" content="width=device-width, initial-scale=1">
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<meta name="dc.created" content="2026-05-18">
+<meta name="dc.created" content="2026-05-19">
 <meta name="description" content="use: package: org.apache.datafusion, class: UnnestOptions">
 <meta name="generator" content="javadoc/ClassUseWriter">
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
diff --git a/api/org/apache/datafusion/class-use/Volatility.html b/api/org/apache/datafusion/class-use/Volatility.html
index 07a2e1a..f364314 100644
--- a/api/org/apache/datafusion/class-use/Volatility.html
+++ b/api/org/apache/datafusion/class-use/Volatility.html
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML>
 <html lang>
 <head>
-<!-- Generated by javadoc (17) on Mon May 18 17:40:42 UTC 2026 -->
+<!-- Generated by javadoc (17) on Tue May 19 22:05:47 UTC 2026 -->
 <title>Uses of Enum Class org.apache.datafusion.Volatility (Apache DataFusion Java 0.1.0-SNAPSHOT)</title>
 <meta name="viewport" content="width=device-width, initial-scale=1">
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<meta name="dc.created" content="2026-05-18">
+<meta name="dc.created" content="2026-05-19">
 <meta name="description" content="use: package: org.apache.datafusion, enum: Volatility">
 <meta name="generator" content="javadoc/ClassUseWriter">
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
diff --git a/api/org/apache/datafusion/internal/JniBridge.html b/api/org/apache/datafusion/internal/JniBridge.html
index fad2f78..15aff7a 100644
--- a/api/org/apache/datafusion/internal/JniBridge.html
+++ b/api/org/apache/datafusion/internal/JniBridge.html
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML>
 <html lang>
 <head>
-<!-- Generated by javadoc (17) on Mon May 18 17:40:42 UTC 2026 -->
+<!-- Generated by javadoc (17) on Tue May 19 22:05:47 UTC 2026 -->
 <title>JniBridge (Apache DataFusion Java 0.1.0-SNAPSHOT)</title>
 <meta name="viewport" content="width=device-width, initial-scale=1">
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<meta name="dc.created" content="2026-05-18">
+<meta name="dc.created" content="2026-05-19">
 <meta name="description" content="declaration: package: org.apache.datafusion.internal, class: JniBridge">
 <meta name="generator" content="javadoc/ClassWriterImpl">
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
@@ -107,6 +107,13 @@ loadScripts(document, 'script');</script>
 <div class="col-last even-row-color method-summary-table method-summary-table-tab1 method-summary-table-tab4">
 <div class="block">Invoke a scalar UDF for one batch.</div>
 </div>
+<div class="col-first odd-row-color method-summary-table method-summary-table-tab1 method-summary-table-tab4"><code>static void</code></div>
+<div class="col-second odd-row-color method-summary-table method-summary-table-tab1 method-summary-table-tab4"><code><a href="#invokeTableScan(org.apache.datafusion.TableProvider,long)" class="member-name-link">invokeTableScan</a><wbr>(<a href="../TableProvider.html" title="interface in org.apache.datafusion">TableProvider</a>&nbsp;provider,
+ long&nbsp;ffiStreamAddr)</code></div>
+<div class="col-last odd-row-color method-summary-table method-summary-table-tab1 method-summary-table-tab4">
+<div class="block">Open a fresh batch stream from a Java <a href="../TableProvider.html" title="interface in org.apache.datafusion"><code>TableProvider</code></a> and export it through the supplied
+ Arrow C Data Interface address.</div>
+</div>
 </div>
 </div>
 </div>
@@ -150,6 +157,21 @@ loadScripts(document, 'script');</script>
 </dl>
 </section>
 </li>
+<li>
+<section class="detail" id="invokeTableScan(org.apache.datafusion.TableProvider,long)">
+<h3>invokeTableScan</h3>
+<div class="member-signature"><span class="modifiers">public static</span>&nbsp;<span class="return-type">void</span>&nbsp;<span class="element-name">invokeTableScan</span><wbr><span class="parameters">(<a href="../TableProvider.html" title="interface in org.apache.datafusion">TableProvider</a>&nbsp;provider,
+ long&nbsp;ffiStreamAddr)</span></div>
+<div class="block">Open a fresh batch stream from a Java <a href="../TableProvider.html" title="interface in org.apache.datafusion"><code>TableProvider</code></a> and export it through the supplied
+ Arrow C Data Interface address. Called from native code; not for application use.
+
+ <p><a href="../TableProvider.html#scan(org.apache.arrow.memory.BufferAllocator)"><code>TableProvider.scan(org.apache.arrow.memory.BufferAllocator)</code></a> is called with <code>ALLOCATOR</code> so that the reader's buffers share the same allocator root required by <code>Data.exportArrayStream(org.apache.arrow.memory.BufferAllocator, org.apache.arrow.vector.ipc.ArrowReader, org.apache.arrow.c.ArrowArrayStream)</code>.
+
+ <p>On success, ownership of the returned reader transfers to the FFI stream's release callback,
+ so the native side closing the stream also closes the reader. On any failure during export, the
+ reader is closed here before the exception propagates.</div>
+</section>
+</li>
 </ul>
 </section>
 </li>
diff --git a/api/org/apache/datafusion/internal/class-use/JniBridge.html b/api/org/apache/datafusion/internal/class-use/JniBridge.html
index 54af71b..968fea7 100644
--- a/api/org/apache/datafusion/internal/class-use/JniBridge.html
+++ b/api/org/apache/datafusion/internal/class-use/JniBridge.html
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML>
 <html lang>
 <head>
-<!-- Generated by javadoc (17) on Mon May 18 17:40:42 UTC 2026 -->
+<!-- Generated by javadoc (17) on Tue May 19 22:05:47 UTC 2026 -->
 <title>Uses of Class org.apache.datafusion.internal.JniBridge (Apache DataFusion Java 0.1.0-SNAPSHOT)</title>
 <meta name="viewport" content="width=device-width, initial-scale=1">
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<meta name="dc.created" content="2026-05-18">
+<meta name="dc.created" content="2026-05-19">
 <meta name="description" content="use: package: org.apache.datafusion.internal, class: JniBridge">
 <meta name="generator" content="javadoc/ClassUseWriter">
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
diff --git a/api/org/apache/datafusion/internal/package-summary.html b/api/org/apache/datafusion/internal/package-summary.html
index efb7fc8..4075874 100644
--- a/api/org/apache/datafusion/internal/package-summary.html
+++ b/api/org/apache/datafusion/internal/package-summary.html
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML>
 <html lang>
 <head>
-<!-- Generated by javadoc (17) on Mon May 18 17:40:42 UTC 2026 -->
+<!-- Generated by javadoc (17) on Tue May 19 22:05:47 UTC 2026 -->
 <title>org.apache.datafusion.internal (Apache DataFusion Java 0.1.0-SNAPSHOT)</title>
 <meta name="viewport" content="width=device-width, initial-scale=1">
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<meta name="dc.created" content="2026-05-18">
+<meta name="dc.created" content="2026-05-19">
 <meta name="description" content="declaration: package: org.apache.datafusion.internal">
 <meta name="generator" content="javadoc/PackageWriterImpl">
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
diff --git a/api/org/apache/datafusion/internal/package-tree.html b/api/org/apache/datafusion/internal/package-tree.html
index 2cfd232..622d8fa 100644
--- a/api/org/apache/datafusion/internal/package-tree.html
+++ b/api/org/apache/datafusion/internal/package-tree.html
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML>
 <html lang>
 <head>
-<!-- Generated by javadoc (17) on Mon May 18 17:40:42 UTC 2026 -->
+<!-- Generated by javadoc (17) on Tue May 19 22:05:47 UTC 2026 -->
 <title>org.apache.datafusion.internal Class Hierarchy (Apache DataFusion Java 0.1.0-SNAPSHOT)</title>
 <meta name="viewport" content="width=device-width, initial-scale=1">
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<meta name="dc.created" content="2026-05-18">
+<meta name="dc.created" content="2026-05-19">
 <meta name="description" content="tree: package: org.apache.datafusion.internal">
 <meta name="generator" content="javadoc/PackageTreeWriter">
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
diff --git a/api/org/apache/datafusion/internal/package-use.html b/api/org/apache/datafusion/internal/package-use.html
index 8a32ef4..b643c03 100644
--- a/api/org/apache/datafusion/internal/package-use.html
+++ b/api/org/apache/datafusion/internal/package-use.html
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML>
 <html lang>
 <head>
-<!-- Generated by javadoc (17) on Mon May 18 17:40:42 UTC 2026 -->
+<!-- Generated by javadoc (17) on Tue May 19 22:05:47 UTC 2026 -->
 <title>Uses of Package org.apache.datafusion.internal (Apache DataFusion Java 0.1.0-SNAPSHOT)</title>
 <meta name="viewport" content="width=device-width, initial-scale=1">
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<meta name="dc.created" content="2026-05-18">
+<meta name="dc.created" content="2026-05-19">
 <meta name="description" content="use: package: org.apache.datafusion.internal">
 <meta name="generator" content="javadoc/PackageUseWriter">
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
diff --git a/api/org/apache/datafusion/package-summary.html b/api/org/apache/datafusion/package-summary.html
index 2c5f991..0fc5469 100644
--- a/api/org/apache/datafusion/package-summary.html
+++ b/api/org/apache/datafusion/package-summary.html
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML>
 <html lang>
 <head>
-<!-- Generated by javadoc (17) on Mon May 18 17:40:42 UTC 2026 -->
+<!-- Generated by javadoc (17) on Tue May 19 22:05:47 UTC 2026 -->
 <title>org.apache.datafusion (Apache DataFusion Java 0.1.0-SNAPSHOT)</title>
 <meta name="viewport" content="width=device-width, initial-scale=1">
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<meta name="dc.created" content="2026-05-18">
+<meta name="dc.created" content="2026-05-19">
 <meta name="description" content="declaration: package: org.apache.datafusion">
 <meta name="generator" content="javadoc/PackageWriterImpl">
 <link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
@@ -91,23 +91,31 @@ loadScripts(document, 'script');</script>
 <div class="col-last even-row-color class-summary class-summary-tab2">
 <div class="block">Configuration knobs for Arrow IPC sources passed to <a href="SessionContext.html#registerArrow(java.lang.String,java.lang.String,org.apache.datafusion.ArrowReadOptions)"><code>SessionContext.registerArrow(String, String, ArrowReadOptions)</code></a> and <a href="SessionContext.html#readArrow(java.lang.String,org.apache.datafusion.ArrowReadOptions)"><code>SessionContext.readArrow(String, ArrowReadOptions)</code></a>.</div>
 </div>
-<div class="col-first odd-row-color class-summary class-summary-tab1"><a href="ColumnarValue.html" title="interface in org.apache.datafusion">ColumnarValue</a></div>
-<div class="col-last odd-row-color class-summary class-summary-tab1">
+<div class="col-first odd-row-color class-summary class-summary-tab2"><a href="AvroReadOptions.html" title="class in org.apache.datafusion">AvroReadOptions</a></div>
+<div class="col-last odd-row-color class-summary class-summary-tab2">
+<div class="block">Configuration knobs for Avro sources passed to <a href="SessionContext.html#registerAvro(java.lang.String,java.lang.String,org.apache.datafusion.AvroReadOptions)"><code>SessionContext.registerAvro(String, String, AvroReadOptions)</code></a> and <a href="SessionContext.html#readAvro(java.lang.String,org.apache.datafusion.AvroReadOptions)"><code>SessionContext.readAvro(String, AvroReadOptions)</code></a>.</div>
+</div>
+<div class="col-first even-row-color class-summary class-summary-tab1"><a href="ColumnarValue.html" title="interface in org.apache.datafusion">ColumnarValue</a></div>
+<div class="col-last even-row-color class-summary class-summary-tab1">
 <div class="block">The value of a scalar UDF argument or result: either a per-row <a href="ColumnarValue.Array.html" title="class in org.apache.datafusion"><code>ColumnarValue.Array</code></a> of length <code>
  rowCount</code>, or a <a href="ColumnarValue.Scalar.html" title="class in org.apache.datafusion"><code>ColumnarValue.Scalar</code></a> (length-1 vector) that the framework broadcasts.</div>
 </div>
-<div class="col-first even-row-color class-summary class-summary-tab4"><a href="ColumnarValue.Array.html" title="class in org.apache.datafusion">ColumnarValue.Array</a></div>
-<div class="col-last even-row-color class-summary class-summary-tab4">
+<div class="col-first odd-row-color class-summary class-summary-tab4"><a href="ColumnarValue.Array.html" title="class in org.apache.datafusion">ColumnarValue.Array</a></div>
+<div class="col-last odd-row-color class-summary class-summary-tab4">
 <div class="block">Per-row Arrow vector of length equal to the batch row count.</div>
 </div>
-<div class="col-first odd-row-color class-summary class-summary-tab4"><a href="ColumnarValue.Scalar.html" title="class in org.apache.datafusion">ColumnarValue.Scalar</a></div>
-<div class="col-last odd-row-color class-summary class-summary-tab4">
+<div class="col-first even-row-color class-summary class-summary-tab4"><a href="ColumnarValue.Scalar.html" title="class in org.apache.datafusion">ColumnarValue.Scalar</a></div>
+<div class="col-last even-row-color class-summary class-summary-tab4">
 <div class="block">Length-1 Arrow vector representing a single value broadcast across all rows.</div>
 </div>
-<div class="col-first even-row-color class-summary class-summary-tab2"><a href="CsvReadOptions.html" title="class in org.apache.datafusion">CsvReadOptions</a></div>
-<div class="col-last even-row-color class-summary class-summary-tab2">
+<div class="col-first odd-row-color class-summary class-summary-tab2"><a href="CsvReadOptions.html" title="class in org.apache.datafusion">CsvReadOptions</a></div>
+<div class="col-last odd-row-color class-summary class-summary-tab2">
 <div class="block">Configuration knobs for CSV sources passed to <a href="SessionContext.html#registerCsv(java.lang.String,java.lang.String,org.apache.datafusion.CsvReadOptions)"><code>SessionContext.registerCsv(String, String, CsvReadOptions)</code></a> and <a href="SessionContext.html#readCsv(java.lang.String,org.apache.datafusion.CsvReadOptions)"><code>SessionContext.readCsv(String, CsvReadOptions)</code></a>.</div>
 </div>
+<div class="col-first even-row-color class-summary class-summary-tab2"><a href="CsvWriteOptions.html" title="class in org.apache.datafusion">CsvWriteOptions</a></div>
+<div class="col-last even-row-color class-summary class-summary-tab2">
+<div class="block">Configuration knobs for writing CSV, passed to <a href="DataFrame.html#writeCsv(java.lang.String,org.apache.datafusion.CsvWriteOptions)"><code>DataFrame.writeCsv(String, CsvWriteOptions)</code></a>.</div>
+</div>
 <div class="col-first odd-row-color class-summary class-summary-tab2"><a href="DataFrame.html" title="class in org.apache.datafusion">DataFrame</a></div>
 <div class="col-last odd-row-color class-summary class-summary-tab2">
 <div class="block">A lazy representation of a query plan, mirroring the Rust DataFusion <code>DataFrame</code>.</div>
@@ -116,49 +124,62 @@ loadScripts(document, 'script');</script>
 <div class="col-last even-row-color class-summary class-summary-tab3">
 <div class="block">Compression of a file-format source.</div>
 </div>
-<div class="col-first odd-row-color class-summary class-summary-tab2"><a href="NativeLibraryLoader.html" title="class in org.apache.datafusion">NativeLibraryLoader</a></div>
-<div class="col-last odd-row-color class-summary class-summary-tab2">&nbsp;</div>
-<div class="col-first even-row-color class-summary class-summary-tab2"><a href="NdJsonReadOptions.html" title="class in org.apache.datafusion">NdJsonReadOptions</a></div>
-<div class="col-last even-row-color class-summary class-summary-tab2">
-<div class="block">Configuration knobs for newline-delimited JSON sources passed to <a href="SessionContext.html#registerJson(java.lang.String,java.lang.String,org.apache.datafusion.NdJsonReadOptions)"><code>SessionContext.registerJson(String, String, NdJsonReadOptions)</code></a> and <a href="SessionContext.html#readJson(java.lang.String,org.apache.datafusion.NdJsonReadOptions)"><code>SessionContext.readJson(String, NdJsonReadOptions)</code></a>.</div>
+<div class="col-first odd-row-color class-summary class-summary-tab2"><a href="JsonWriteOptions.html" title="class in org.apache.datafusion">JsonWriteOptions</a></div>
+<div class="col-last odd-row-color class-summary class-summary-tab2">
+<div class="block">Configuration knobs for writing JSON, passed to <a href="DataFrame.html#writeJson(java.lang.String,org.apache.datafusion.JsonWriteOptions)"><code>DataFrame.writeJson(String, JsonWriteOptions)</code></a>.</div>
 </div>
-<div class="col-first odd-row-color class-summary class-summary-tab2"><a href="ParquetReadOptions.html" title="class in org.apache.datafusion">ParquetReadOptions</a></div>
+<div class="col-first even-row-color class-summary class-summary-tab2"><a href="NativeLibraryLoader.html" title="class in org.apache.datafusion">NativeLibraryLoader</a></div>
+<div class="col-last even-row-color class-summary class-summary-tab2">&nbsp;</div>
+<div class="col-first odd-row-color class-summary class-summary-tab2"><a href="NdJsonReadOptions.html" title="class in org.apache.datafusion">NdJsonReadOptions</a></div>
 <div class="col-last odd-row-color class-summary class-summary-tab2">
-<div class="block">Configuration knobs for parquet sources passed to <a href="SessionContext.html#registerParquet(java.lang.String,java.lang.String,org.apache.datafusion.ParquetReadOptions)"><code>SessionContext.registerParquet(String, String, ParquetReadOptions)</code></a> and <a href="SessionContext.html#readParquet(java.lang.String,org.apache.datafusion.ParquetReadOptions)"><code>SessionContext.readParquet(String, ParquetReadOptions)</code></a>.</div>
+<div class="block">Configuration knobs for newline-delimited JSON sources passed to <a href="SessionContext.html#registerJson(java.lang.String,java.lang.String,org.apache.datafusion.NdJsonReadOptions)"><code>SessionContext.registerJson(String, String, NdJsonReadOptions)</code></a> and <a href="SessionContext.html#readJson(java.lang.String,org.apache.datafusion.NdJsonReadOptions)"><code>SessionContext.readJson(String, NdJsonReadOptions)</code></a>.</div>
 </div>
-<div class="col-first even-row-color class-summary class-summary-tab2"><a href="ParquetWriteOptions.html" title="class in org.apache.datafusion">ParquetWriteOptions</a></div>
+<div class="col-first even-row-color class-summary class-summary-tab2"><a href="ParquetReadOptions.html" title="class in org.apache.datafusion">ParquetReadOptions</a></div>
 <div class="col-last even-row-color class-summary class-summary-tab2">
+<div class="block">Configuration knobs for parquet sources passed to <a href="SessionContext.html#registerParquet(java.lang.String,java.lang.String,org.apache.datafusion.ParquetReadOptions)"><code>SessionContext.registerParquet(String, String, ParquetReadOptions)</code></a> and <a href="SessionContext.html#readParquet(java.lang.String,org.apache.datafusion.ParquetReadOptions)"><code>SessionContext.readParquet(String, ParquetReadOptions)</code></a>.</div>
+</div>
+<div class="col-first odd-row-color class-summary class-summary-tab2"><a href="ParquetWriteOptions.html" title="class in org.apache.datafusion">ParquetWriteOptions</a></div>
+<div class="col-last odd-row-color class-summary class-summary-tab2">
 <div class="block">Configuration knobs for writing parquet, passed to <a href="DataFrame.html#writeParquet(java.lang.String,org.apache.datafusion.ParquetWriteOptions)"><code>DataFrame.writeParquet(String, ParquetWriteOptions)</code></a>.</div>
 </div>
-<div class="col-first odd-row-color class-summary class-summary-tab1"><a href="ScalarFunction.html" title="interface in org.apache.datafusion">ScalarFunction</a></div>
-<div class="col-last odd-row-color class-summary class-summary-tab1">
+<div class="col-first even-row-color class-summary class-summary-tab1"><a href="ScalarFunction.html" title="interface in org.apache.datafusion">ScalarFunction</a></div>
+<div class="col-last even-row-color class-summary class-summary-tab1">
 <div class="block">A Java-implemented scalar SQL function.</div>
 </div>
-<div class="col-first even-row-color class-summary class-summary-tab4"><a href="ScalarFunctionArgs.html" title="class in org.apache.datafusion">ScalarFunctionArgs</a></div>
-<div class="col-last even-row-color class-summary class-summary-tab4">
+<div class="col-first odd-row-color class-summary class-summary-tab4"><a href="ScalarFunctionArgs.html" title="class in org.apache.datafusion">ScalarFunctionArgs</a></div>
+<div class="col-last odd-row-color class-summary class-summary-tab4">
 <div class="block">Bundle of inputs passed to <a href="ScalarFunction.html#evaluate(org.apache.arrow.memory.BufferAllocator,org.apache.datafusion.ScalarFunctionArgs)"><code>ScalarFunction.evaluate(org.apache.arrow.memory.BufferAllocator, org.apache.datafusion.ScalarFunctionArgs)</code></a>: the per-arg <a href="ColumnarValue.html" title="interface in org.apache.datafusion"><code>ColumnarValue</code></a>s
  (in declared order) and the batch row count DataFusion is driving.</div>
 </div>
-<div class="col-first odd-row-color class-summary class-summary-tab2"><a href="ScalarUdf.html" title="class in org.apache.datafusion">ScalarUdf</a></div>
-<div class="col-last odd-row-color class-summary class-summary-tab2">
+<div class="col-first even-row-color class-summary class-summary-tab2"><a href="ScalarUdf.html" title="class in org.apache.datafusion">ScalarUdf</a></div>
+<div class="col-last even-row-color class-summary class-summary-tab2">
 <div class="block">A scalar UDF registration handle: pairs a <a href="ScalarFunction.html" title="interface in org.apache.datafusion"><code>ScalarFunction</code></a> implementation with the metadata
  DataFusion needs to dispatch SQL calls to it.</div>
 </div>
-<div class="col-first even-row-color class-summary class-summary-tab2"><a href="SessionContext.html" title="class in org.apache.datafusion">SessionContext</a></div>
-<div class="col-last even-row-color class-summary class-summary-tab2">
+<div class="col-first odd-row-color class-summary class-summary-tab2"><a href="SessionContext.html" title="class in org.apache.datafusion">SessionContext</a></div>
+<div class="col-last odd-row-color class-summary class-summary-tab2">
 <div class="block">A DataFusion session context.</div>
 </div>
-<div class="col-first odd-row-color class-summary class-summary-tab2"><a href="SessionContextBuilder.html" title="class in org.apache.datafusion">SessionContextBuilder</a></div>
-<div class="col-last odd-row-color class-summary class-summary-tab2">
+<div class="col-first even-row-color class-summary class-summary-tab2"><a href="SessionContextBuilder.html" title="class in org.apache.datafusion">SessionContextBuilder</a></div>
+<div class="col-last even-row-color class-summary class-summary-tab2">
 <div class="block">Builder for a configured <a href="SessionContext.html" title="class in org.apache.datafusion"><code>SessionContext</code></a>.</div>
 </div>
-<div class="col-first even-row-color class-summary class-summary-tab2"><a href="UnnestOptions.html" title="class in org.apache.datafusion">UnnestOptions</a></div>
-<div class="col-last even-row-color class-summary class-summary-tab2">
+<div class="col-first odd-row-color class-summary class-summary-tab2"><a href="SimpleTableProvider.html" title="class in org.apache.datafusion">SimpleTableProvider</a></div>
+<div class="col-last odd-row-color class-summary class-summary-tab2">
+<div class="block">A <a href="TableProvider.html" title="interface in org.apache.datafusion"><code>TableProvider</code></a> that pairs a fixed <code>Schema</code> with a function that opens a fresh
+ <code>ArrowReader</code> for each scan.</div>
+</div>
+<div class="col-first even-row-color class-summary class-summary-tab1"><a href="TableProvider.html" title="interface in org.apache.datafusion">TableProvider</a></div>
+<div class="col-last even-row-color class-summary class-summary-tab1">
+<div class="block">A Java-implemented table that can be registered with a <a href="SessionContext.html" title="class in org.apache.datafusion"><code>SessionContext</code></a> via <a href="SessionContext.html#registerTable(java.lang.String,org.apache.datafusion.TableProvider)"><code>SessionContext.registerTable(String, TableProvider)</code></a>.</div>
+</div>
+<div class="col-first odd-row-color class-summary class-summary-tab2"><a href="UnnestOptions.html" title="class in org.apache.datafusion">UnnestOptions</a></div>
+<div class="col-last odd-row-color class-summary class-summary-tab2">
 <div class="block">Configuration knobs for <a href="DataFrame.html#unnestColumns(org.apache.datafusion.UnnestOptions,java.lang.String...)"><code>DataFrame.unnestColumns(UnnestOptions, String...)</code></a>, mirroring
  DataFusion's <code>UnnestOptions</code>.</div>
 </div>
-<div class="col-first odd-row-color class-summary class-summary-tab3"><a href="Volatility.html" title="enum class in org.apache.datafusion">Volatility</a></div>
-<div class="col-last odd-row-color class-summary class-summary-tab3">
+<div class="col-first even-row-color class-summary class-summary-tab3"><a href="Volatility.html" title="enum class in org.apache.datafusion">Volatility</a></div>
+<div class="col-last even-row-color class-summary class-summary-tab3">
 <div class="block">Volatility classification for a UDF.</div>
 </div>
 </div>
diff --git a/api/org/apache/datafusion/package-tree.html b/api/org/apache/datafusion/package-tree.html
index 2babd85..e79555b 100644
--- a/api/org/apache/datafusion/package-tree.html
+++ b/api/org/apache/datafusion/package-tree.html
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML>
 <html lang>
 <head>
-<!-- Generated by javadoc (17) on Mon May 18 17:40:42 UTC 2026 -->
+<!-- Generated by javadoc (17) on Tue May 19 22:05:47 UTC 2026 -->
 <title>org.apache.datafusion Class Hierarchy (Apache DataFusion Java 0.1.0-SNAPSHOT)</title>
 <meta name="viewport" content="width=device-width, initial-scale=1">
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<meta name="dc.created" content="2026-05-18">
+<meta name="dc.created" content="2026-05-19">
 <meta name="description" content="tree: package: org.apache.datafusion">
 <meta name="generator" content="javadoc/PackageTreeWriter">
 <link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
@@ -61,8 +61,11 @@ loadScripts(document, 'script');</script>
 <li class="circle">java.lang.<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" class="type-name-link external-link" title="class or interface in java.lang">Object</a>
 <ul>
 <li class="circle">org.apache.datafusion.<a href="ArrowReadOptions.html" class="type-name-link" title="class in org.apache.datafusion">ArrowReadOptions</a></li>
+<li class="circle">org.apache.datafusion.<a href="AvroReadOptions.html" class="type-name-link" title="class in org.apache.datafusion">AvroReadOptions</a></li>
 <li class="circle">org.apache.datafusion.<a href="CsvReadOptions.html" class="type-name-link" title="class in org.apache.datafusion">CsvReadOptions</a></li>
+<li class="circle">org.apache.datafusion.<a href="CsvWriteOptions.html" class="type-name-link" title="class in org.apache.datafusion">CsvWriteOptions</a></li>
 <li class="circle">org.apache.datafusion.<a href="DataFrame.html" class="type-name-link" title="class in org.apache.datafusion">DataFrame</a> (implements java.lang.<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/AutoCloseable.html" title="class or interface in java.lang" class="external-link">AutoCloseable</a>)</li>
+<li class="circle">org.apache.datafusion.<a href="JsonWriteOptions.html" class="type-name-link" title="class in org.apache.datafusion">JsonWriteOptions</a></li>
 <li class="circle">org.apache.datafusion.<a href="NativeLibraryLoader.html" class="type-name-link" title="class in org.apache.datafusion">NativeLibraryLoader</a></li>
 <li class="circle">org.apache.datafusion.<a href="NdJsonReadOptions.html" class="type-name-link" title="class in org.apache.datafusion">NdJsonReadOptions</a></li>
 <li class="circle">org.apache.datafusion.<a href="ParquetReadOptions.html" class="type-name-link" title="class in org.apache.datafusion">ParquetReadOptions</a></li>
@@ -77,6 +80,7 @@ loadScripts(document, 'script');</script>
 <li class="circle">org.apache.datafusion.<a href="ScalarUdf.html" class="type-name-link" title="class in org.apache.datafusion">ScalarUdf</a></li>
 <li class="circle">org.apache.datafusion.<a href="SessionContext.html" class="type-name-link" title="class in org.apache.datafusion">SessionContext</a> (implements java.lang.<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/AutoCloseable.html" title="class or interface in java.lang" class="external-link">AutoCloseable</a>)</li>
 <li class="circle">org.apache.datafusion.<a href="SessionContextBuilder.html" class="type-name-link" title="class in org.apache.datafusion">SessionContextBuilder</a></li>
+<li class="circle">org.apache.datafusion.<a href="SimpleTableProvider.html" class="type-name-link" title="class in org.apache.datafusion">SimpleTableProvider</a> (implements org.apache.datafusion.<a href="TableProvider.html" title="interface in org.apache.datafusion">TableProvider</a>)</li>
 <li class="circle">org.apache.datafusion.<a href="UnnestOptions.html" class="type-name-link" title="class in org.apache.datafusion">UnnestOptions</a></li>
 </ul>
 </li>
@@ -87,6 +91,7 @@ loadScripts(document, 'script');</script>
 <ul>
 <li class="circle">org.apache.datafusion.<a href="ColumnarValue.html" class="type-name-link" title="interface in org.apache.datafusion">ColumnarValue</a></li>
 <li class="circle">org.apache.datafusion.<a href="ScalarFunction.html" class="type-name-link" title="interface in org.apache.datafusion">ScalarFunction</a></li>
+<li class="circle">org.apache.datafusion.<a href="TableProvider.html" class="type-name-link" title="interface in org.apache.datafusion">TableProvider</a></li>
 </ul>
 </section>
 <section class="hierarchy">
diff --git a/api/org/apache/datafusion/package-use.html b/api/org/apache/datafusion/package-use.html
index ebd7887..939f18d 100644
--- a/api/org/apache/datafusion/package-use.html
+++ b/api/org/apache/datafusion/package-use.html
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML>
 <html lang>
 <head>
-<!-- Generated by javadoc (17) on Mon May 18 17:40:42 UTC 2026 -->
+<!-- Generated by javadoc (17) on Tue May 19 22:05:47 UTC 2026 -->
 <title>Uses of Package org.apache.datafusion (Apache DataFusion Java 0.1.0-SNAPSHOT)</title>
 <meta name="viewport" content="width=device-width, initial-scale=1">
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<meta name="dc.created" content="2026-05-18">
+<meta name="dc.created" content="2026-05-19">
 <meta name="description" content="use: package: org.apache.datafusion">
 <meta name="generator" content="javadoc/PackageUseWriter">
 <link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
@@ -72,15 +72,23 @@ loadScripts(document, 'script');</script>
 <div class="col-last even-row-color">
 <div class="block">Configuration knobs for Arrow IPC sources passed to <a href="SessionContext.html#registerArrow(java.lang.String,java.lang.String,org.apache.datafusion.ArrowReadOptions)"><code>SessionContext.registerArrow(String, String, ArrowReadOptions)</code></a> and <a href="SessionContext.html#readArrow(java.lang.String,org.apache.datafusion.ArrowReadOptions)"><code>SessionContext.readArrow(String, ArrowReadOptions)</code></a>.</div>
 </div>
-<div class="col-first odd-row-color"><a href="class-use/ColumnarValue.html#org.apache.datafusion">ColumnarValue</a></div>
+<div class="col-first odd-row-color"><a href="class-use/AvroReadOptions.html#org.apache.datafusion">AvroReadOptions</a></div>
 <div class="col-last odd-row-color">
+<div class="block">Configuration knobs for Avro sources passed to <a href="SessionContext.html#registerAvro(java.lang.String,java.lang.String,org.apache.datafusion.AvroReadOptions)"><code>SessionContext.registerAvro(String, String, AvroReadOptions)</code></a> and <a href="SessionContext.html#readAvro(java.lang.String,org.apache.datafusion.AvroReadOptions)"><code>SessionContext.readAvro(String, AvroReadOptions)</code></a>.</div>
+</div>
+<div class="col-first even-row-color"><a href="class-use/ColumnarValue.html#org.apache.datafusion">ColumnarValue</a></div>
+<div class="col-last even-row-color">
 <div class="block">The value of a scalar UDF argument or result: either a per-row <a href="ColumnarValue.Array.html" title="class in org.apache.datafusion"><code>ColumnarValue.Array</code></a> of length <code>
  rowCount</code>, or a <a href="ColumnarValue.Scalar.html" title="class in org.apache.datafusion"><code>ColumnarValue.Scalar</code></a> (length-1 vector) that the framework broadcasts.</div>
 </div>
-<div class="col-first even-row-color"><a href="class-use/CsvReadOptions.html#org.apache.datafusion">CsvReadOptions</a></div>
-<div class="col-last even-row-color">
+<div class="col-first odd-row-color"><a href="class-use/CsvReadOptions.html#org.apache.datafusion">CsvReadOptions</a></div>
+<div class="col-last odd-row-color">
 <div class="block">Configuration knobs for CSV sources passed to <a href="SessionContext.html#registerCsv(java.lang.String,java.lang.String,org.apache.datafusion.CsvReadOptions)"><code>SessionContext.registerCsv(String, String, CsvReadOptions)</code></a> and <a href="SessionContext.html#readCsv(java.lang.String,org.apache.datafusion.CsvReadOptions)"><code>SessionContext.readCsv(String, CsvReadOptions)</code></a>.</div>
 </div>
+<div class="col-first even-row-color"><a href="class-use/CsvWriteOptions.html#org.apache.datafusion">CsvWriteOptions</a></div>
+<div class="col-last even-row-color">
+<div class="block">Configuration knobs for writing CSV, passed to <a href="DataFrame.html#writeCsv(java.lang.String,org.apache.datafusion.CsvWriteOptions)"><code>DataFrame.writeCsv(String, CsvWriteOptions)</code></a>.</div>
+</div>
 <div class="col-first odd-row-color"><a href="class-use/DataFrame.html#org.apache.datafusion">DataFrame</a></div>
 <div class="col-last odd-row-color">
 <div class="block">A lazy representation of a query plan, mirroring the Rust DataFusion <code>DataFrame</code>.</div>
@@ -89,40 +97,48 @@ loadScripts(document, 'script');</script>
 <div class="col-last even-row-color">
 <div class="block">Compression of a file-format source.</div>
 </div>
-<div class="col-first odd-row-color"><a href="class-use/NdJsonReadOptions.html#org.apache.datafusion">NdJsonReadOptions</a></div>
+<div class="col-first odd-row-color"><a href="class-use/JsonWriteOptions.html#org.apache.datafusion">JsonWriteOptions</a></div>
 <div class="col-last odd-row-color">
-<div class="block">Configuration knobs for newline-delimited JSON sources passed to <a href="SessionContext.html#registerJson(java.lang.String,java.lang.String,org.apache.datafusion.NdJsonReadOptions)"><code>SessionContext.registerJson(String, String, NdJsonReadOptions)</code></a> and <a href="SessionContext.html#readJson(java.lang.String,org.apache.datafusion.NdJsonReadOptions)"><code>SessionContext.readJson(String, NdJsonReadOptions)</code></a>.</div>
+<div class="block">Configuration knobs for writing JSON, passed to <a href="DataFrame.html#writeJson(java.lang.String,org.apache.datafusion.JsonWriteOptions)"><code>DataFrame.writeJson(String, JsonWriteOptions)</code></a>.</div>
 </div>
-<div class="col-first even-row-color"><a href="class-use/ParquetReadOptions.html#org.apache.datafusion">ParquetReadOptions</a></div>
+<div class="col-first even-row-color"><a href="class-use/NdJsonReadOptions.html#org.apache.datafusion">NdJsonReadOptions</a></div>
 <div class="col-last even-row-color">
-<div class="block">Configuration knobs for parquet sources passed to <a href="SessionContext.html#registerParquet(java.lang.String,java.lang.String,org.apache.datafusion.ParquetReadOptions)"><code>SessionContext.registerParquet(String, String, ParquetReadOptions)</code></a> and <a href="SessionContext.html#readParquet(java.lang.String,org.apache.datafusion.ParquetReadOptions)"><code>SessionContext.readParquet(String, ParquetReadOptions)</code></a>.</div>
+<div class="block">Configuration knobs for newline-delimited JSON sources passed to <a href="SessionContext.html#registerJson(java.lang.String,java.lang.String,org.apache.datafusion.NdJsonReadOptions)"><code>SessionContext.registerJson(String, String, NdJsonReadOptions)</code></a> and <a href="SessionContext.html#readJson(java.lang.String,org.apache.datafusion.NdJsonReadOptions)"><code>SessionContext.readJson(String, NdJsonReadOptions)</code></a>.</div>
 </div>
-<div class="col-first odd-row-color"><a href="class-use/ParquetWriteOptions.html#org.apache.datafusion">ParquetWriteOptions</a></div>
+<div class="col-first odd-row-color"><a href="class-use/ParquetReadOptions.html#org.apache.datafusion">ParquetReadOptions</a></div>
 <div class="col-last odd-row-color">
-<div class="block">Configuration knobs for writing parquet, passed to <a href="DataFrame.html#writeParquet(java.lang.String,org.apache.datafusion.ParquetWriteOptions)"><code>DataFrame.writeParquet(String, ParquetWriteOptions)</code></a>.</div>
+<div class="block">Configuration knobs for parquet sources passed to <a href="SessionContext.html#registerParquet(java.lang.String,java.lang.String,org.apache.datafusion.ParquetReadOptions)"><code>SessionContext.registerParquet(String, String, ParquetReadOptions)</code></a> and <a href="SessionContext.html#readParquet(java.lang.String,org.apache.datafusion.ParquetReadOptions)"><code>SessionContext.readParquet(String, ParquetReadOptions)</code></a>.</div>
 </div>
-<div class="col-first even-row-color"><a href="class-use/ScalarFunction.html#org.apache.datafusion">ScalarFunction</a></div>
+<div class="col-first even-row-color"><a href="class-use/ParquetWriteOptions.html#org.apache.datafusion">ParquetWriteOptions</a></div>
 <div class="col-last even-row-color">
-<div class="block">A Java-implemented scalar SQL function.</div>
+<div class="block">Configuration knobs for writing parquet, passed to <a href="DataFrame.html#writeParquet(java.lang.String,org.apache.datafusion.ParquetWriteOptions)"><code>DataFrame.writeParquet(String, ParquetWriteOptions)</code></a>.</div>
 </div>
-<div class="col-first odd-row-color"><a href="class-use/ScalarFunctionArgs.html#org.apache.datafusion">ScalarFunctionArgs</a></div>
+<div class="col-first odd-row-color"><a href="class-use/ScalarFunction.html#org.apache.datafusion">ScalarFunction</a></div>
 <div class="col-last odd-row-color">
+<div class="block">A Java-implemented scalar SQL function.</div>
+</div>
+<div class="col-first even-row-color"><a href="class-use/ScalarFunctionArgs.html#org.apache.datafusion">ScalarFunctionArgs</a></div>
+<div class="col-last even-row-color">
 <div class="block">Bundle of inputs passed to <a href="ScalarFunction.html#evaluate(org.apache.arrow.memory.BufferAllocator,org.apache.datafusion.ScalarFunctionArgs)"><code>ScalarFunction.evaluate(org.apache.arrow.memory.BufferAllocator, org.apache.datafusion.ScalarFunctionArgs)</code></a>: the per-arg <a href="ColumnarValue.html" title="interface in org.apache.datafusion"><code>ColumnarValue</code></a>s
  (in declared order) and the batch row count DataFusion is driving.</div>
 </div>
-<div class="col-first even-row-color"><a href="class-use/ScalarUdf.html#org.apache.datafusion">ScalarUdf</a></div>
-<div class="col-last even-row-color">
+<div class="col-first odd-row-color"><a href="class-use/ScalarUdf.html#org.apache.datafusion">ScalarUdf</a></div>
+<div class="col-last odd-row-color">
 <div class="block">A scalar UDF registration handle: pairs a <a href="ScalarFunction.html" title="interface in org.apache.datafusion"><code>ScalarFunction</code></a> implementation with the metadata
  DataFusion needs to dispatch SQL calls to it.</div>
 </div>
-<div class="col-first odd-row-color"><a href="class-use/SessionContext.html#org.apache.datafusion">SessionContext</a></div>
-<div class="col-last odd-row-color">
+<div class="col-first even-row-color"><a href="class-use/SessionContext.html#org.apache.datafusion">SessionContext</a></div>
+<div class="col-last even-row-color">
 <div class="block">A DataFusion session context.</div>
 </div>
-<div class="col-first even-row-color"><a href="class-use/SessionContextBuilder.html#org.apache.datafusion">SessionContextBuilder</a></div>
-<div class="col-last even-row-color">
+<div class="col-first odd-row-color"><a href="class-use/SessionContextBuilder.html#org.apache.datafusion">SessionContextBuilder</a></div>
+<div class="col-last odd-row-color">
 <div class="block">Builder for a configured <a href="SessionContext.html" title="class in org.apache.datafusion"><code>SessionContext</code></a>.</div>
 </div>
+<div class="col-first even-row-color"><a href="class-use/TableProvider.html#org.apache.datafusion">TableProvider</a></div>
+<div class="col-last even-row-color">
+<div class="block">A Java-implemented table that can be registered with a <a href="SessionContext.html" title="class in org.apache.datafusion"><code>SessionContext</code></a> via <a href="SessionContext.html#registerTable(java.lang.String,org.apache.datafusion.TableProvider)"><code>SessionContext.registerTable(String, TableProvider)</code></a>.</div>
+</div>
 <div class="col-first odd-row-color"><a href="class-use/UnnestOptions.html#org.apache.datafusion">UnnestOptions</a></div>
 <div class="col-last odd-row-color">
 <div class="block">Configuration knobs for <a href="DataFrame.html#unnestColumns(org.apache.datafusion.UnnestOptions,java.lang.String...)"><code>DataFrame.unnestColumns(UnnestOptions, String...)</code></a>, mirroring
@@ -145,6 +161,10 @@ loadScripts(document, 'script');</script>
 <div class="col-last even-row-color">
 <div class="block">A Java-implemented scalar SQL function.</div>
 </div>
+<div class="col-first odd-row-color"><a href="class-use/TableProvider.html#org.apache.datafusion.internal">TableProvider</a></div>
+<div class="col-last odd-row-color">
+<div class="block">A Java-implemented table that can be registered with a <a href="SessionContext.html" title="class in org.apache.datafusion"><code>SessionContext</code></a> via <a href="SessionContext.html#registerTable(java.lang.String,org.apache.datafusion.TableProvider)"><code>SessionContext.registerTable(String, TableProvider)</code></a>.</div>
+</div>
 </div>
 </section>
 </li>
diff --git a/api/org/apache/datafusion/proto/SchemaConverter.html b/api/org/apache/datafusion/proto/SchemaConverter.html
index da44f70..95a5e9e 100644
--- a/api/org/apache/datafusion/proto/SchemaConverter.html
+++ b/api/org/apache/datafusion/proto/SchemaConverter.html
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML>
 <html lang>
 <head>
-<!-- Generated by javadoc (17) on Mon May 18 17:40:42 UTC 2026 -->
+<!-- Generated by javadoc (17) on Tue May 19 22:05:47 UTC 2026 -->
 <title>SchemaConverter (Apache DataFusion Java 0.1.0-SNAPSHOT)</title>
 <meta name="viewport" content="width=device-width, initial-scale=1">
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<meta name="dc.created" content="2026-05-18">
+<meta name="dc.created" content="2026-05-19">
 <meta name="description" content="declaration: package: org.apache.datafusion.proto, class: SchemaConverter">
 <meta name="generator" content="javadoc/ClassWriterImpl">
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
diff --git a/api/org/apache/datafusion/proto/class-use/SchemaConverter.html b/api/org/apache/datafusion/proto/class-use/SchemaConverter.html
index 02239d6..d01ccca 100644
--- a/api/org/apache/datafusion/proto/class-use/SchemaConverter.html
+++ b/api/org/apache/datafusion/proto/class-use/SchemaConverter.html
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML>
 <html lang>
 <head>
-<!-- Generated by javadoc (17) on Mon May 18 17:40:42 UTC 2026 -->
+<!-- Generated by javadoc (17) on Tue May 19 22:05:47 UTC 2026 -->
 <title>Uses of Class org.apache.datafusion.proto.SchemaConverter (Apache DataFusion Java 0.1.0-SNAPSHOT)</title>
 <meta name="viewport" content="width=device-width, initial-scale=1">
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<meta name="dc.created" content="2026-05-18">
+<meta name="dc.created" content="2026-05-19">
 <meta name="description" content="use: package: org.apache.datafusion.proto, class: SchemaConverter">
 <meta name="generator" content="javadoc/ClassUseWriter">
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
diff --git a/api/org/apache/datafusion/proto/package-summary.html b/api/org/apache/datafusion/proto/package-summary.html
index 50c5303..843d411 100644
--- a/api/org/apache/datafusion/proto/package-summary.html
+++ b/api/org/apache/datafusion/proto/package-summary.html
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML>
 <html lang>
 <head>
-<!-- Generated by javadoc (17) on Mon May 18 17:40:42 UTC 2026 -->
+<!-- Generated by javadoc (17) on Tue May 19 22:05:47 UTC 2026 -->
 <title>org.apache.datafusion.proto (Apache DataFusion Java 0.1.0-SNAPSHOT)</title>
 <meta name="viewport" content="width=device-width, initial-scale=1">
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<meta name="dc.created" content="2026-05-18">
+<meta name="dc.created" content="2026-05-19">
 <meta name="description" content="declaration: package: org.apache.datafusion.proto">
 <meta name="generator" content="javadoc/PackageWriterImpl">
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
diff --git a/api/org/apache/datafusion/proto/package-tree.html b/api/org/apache/datafusion/proto/package-tree.html
index d5b7245..0a08da0 100644
--- a/api/org/apache/datafusion/proto/package-tree.html
+++ b/api/org/apache/datafusion/proto/package-tree.html
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML>
 <html lang>
 <head>
-<!-- Generated by javadoc (17) on Mon May 18 17:40:42 UTC 2026 -->
+<!-- Generated by javadoc (17) on Tue May 19 22:05:47 UTC 2026 -->
 <title>org.apache.datafusion.proto Class Hierarchy (Apache DataFusion Java 0.1.0-SNAPSHOT)</title>
 <meta name="viewport" content="width=device-width, initial-scale=1">
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<meta name="dc.created" content="2026-05-18">
+<meta name="dc.created" content="2026-05-19">
 <meta name="description" content="tree: package: org.apache.datafusion.proto">
 <meta name="generator" content="javadoc/PackageTreeWriter">
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
diff --git a/api/org/apache/datafusion/proto/package-use.html b/api/org/apache/datafusion/proto/package-use.html
index 5472d10..2844efe 100644
--- a/api/org/apache/datafusion/proto/package-use.html
+++ b/api/org/apache/datafusion/proto/package-use.html
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML>
 <html lang>
 <head>
-<!-- Generated by javadoc (17) on Mon May 18 17:40:42 UTC 2026 -->
+<!-- Generated by javadoc (17) on Tue May 19 22:05:47 UTC 2026 -->
 <title>Uses of Package org.apache.datafusion.proto (Apache DataFusion Java 0.1.0-SNAPSHOT)</title>
 <meta name="viewport" content="width=device-width, initial-scale=1">
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<meta name="dc.created" content="2026-05-18">
+<meta name="dc.created" content="2026-05-19">
 <meta name="description" content="use: package: org.apache.datafusion.proto">
 <meta name="generator" content="javadoc/PackageUseWriter">
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
diff --git a/api/overview-summary.html b/api/overview-summary.html
index 7b4e813..f292785 100644
--- a/api/overview-summary.html
+++ b/api/overview-summary.html
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML>
 <html lang>
 <head>
-<!-- Generated by javadoc (17) on Mon May 18 17:40:42 UTC 2026 -->
+<!-- Generated by javadoc (17) on Tue May 19 22:05:47 UTC 2026 -->
 <title>Apache DataFusion Java 0.1.0-SNAPSHOT</title>
 <meta name="viewport" content="width=device-width, initial-scale=1">
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<meta name="dc.created" content="2026-05-18">
+<meta name="dc.created" content="2026-05-19">
 <meta name="description" content="index redirect">
 <meta name="generator" content="javadoc/IndexRedirectWriter">
 <link rel="canonical" href="index.html">
diff --git a/api/overview-tree.html b/api/overview-tree.html
index c525ff4..4b5895a 100644
--- a/api/overview-tree.html
+++ b/api/overview-tree.html
@@ -1,11 +1,11 @@
 <!DOCTYPE HTML>
 <html lang>
 <head>
-<!-- Generated by javadoc (17) on Mon May 18 17:40:42 UTC 2026 -->
+<!-- Generated by javadoc (17) on Tue May 19 22:05:47 UTC 2026 -->
 <title>Class Hierarchy (Apache DataFusion Java 0.1.0-SNAPSHOT)</title>
 <meta name="viewport" content="width=device-width, initial-scale=1">
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<meta name="dc.created" content="2026-05-18">
+<meta name="dc.created" content="2026-05-19">
 <meta name="description" content="class tree">
 <meta name="generator" content="javadoc/TreeWriter">
 <link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
@@ -63,9 +63,12 @@ loadScripts(document, 'script');</script>
 <li class="circle">java.lang.<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" class="type-name-link external-link" title="class or interface in java.lang">Object</a>
 <ul>
 <li class="circle">org.apache.datafusion.<a href="org/apache/datafusion/ArrowReadOptions.html" class="type-name-link" title="class in org.apache.datafusion">ArrowReadOptions</a></li>
+<li class="circle">org.apache.datafusion.<a href="org/apache/datafusion/AvroReadOptions.html" class="type-name-link" title="class in org.apache.datafusion">AvroReadOptions</a></li>
 <li class="circle">org.apache.datafusion.<a href="org/apache/datafusion/CsvReadOptions.html" class="type-name-link" title="class in org.apache.datafusion">CsvReadOptions</a></li>
+<li class="circle">org.apache.datafusion.<a href="org/apache/datafusion/CsvWriteOptions.html" class="type-name-link" title="class in org.apache.datafusion">CsvWriteOptions</a></li>
 <li class="circle">org.apache.datafusion.<a href="org/apache/datafusion/DataFrame.html" class="type-name-link" title="class in org.apache.datafusion">DataFrame</a> (implements java.lang.<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/AutoCloseable.html" title="class or interface in java.lang" class="external-link">AutoCloseable</a>)</li>
 <li class="circle">org.apache.datafusion.internal.<a href="org/apache/datafusion/internal/JniBridge.html" class="type-name-link" title="class in org.apache.datafusion.internal">JniBridge</a></li>
+<li class="circle">org.apache.datafusion.<a href="org/apache/datafusion/JsonWriteOptions.html" class="type-name-link" title="class in org.apache.datafusion">JsonWriteOptions</a></li>
 <li class="circle">org.apache.datafusion.<a href="org/apache/datafusion/NativeLibraryLoader.html" class="type-name-link" title="class in org.apache.datafusion">NativeLibraryLoader</a></li>
 <li class="circle">org.apache.datafusion.<a href="org/apache/datafusion/NdJsonReadOptions.html" class="type-name-link" title="class in org.apache.datafusion">NdJsonReadOptions</a></li>
 <li class="circle">org.apache.datafusion.<a href="org/apache/datafusion/ParquetReadOptions.html" class="type-name-link" title="class in org.apache.datafusion">ParquetReadOptions</a></li>
@@ -81,6 +84,7 @@ loadScripts(document, 'script');</script>
 <li class="circle">org.apache.datafusion.proto.<a href="org/apache/datafusion/proto/SchemaConverter.html" class="type-name-link" title="class in org.apache.datafusion.proto">SchemaConverter</a></li>
 <li class="circle">org.apache.datafusion.<a href="org/apache/datafusion/SessionContext.html" class="type-name-link" title="class in org.apache.datafusion">SessionContext</a> (implements java.lang.<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/AutoCloseable.html" title="class or interface in java.lang" class="external-link">AutoCloseable</a>)</li>
 <li class="circle">org.apache.datafusion.<a href="org/apache/datafusion/SessionContextBuilder.html" class="type-name-link" title="class in org.apache.datafusion">SessionContextBuilder</a></li>
+<li class="circle">org.apache.datafusion.<a href="org/apache/datafusion/SimpleTableProvider.html" class="type-name-link" title="class in org.apache.datafusion">SimpleTableProvider</a> (implements org.apache.datafusion.<a href="org/apache/datafusion/TableProvider.html" title="interface in org.apache.datafusion">TableProvider</a>)</li>
 <li class="circle">org.apache.datafusion.<a href="org/apache/datafusion/UnnestOptions.html" class="type-name-link" title="class in org.apache.datafusion">UnnestOptions</a></li>
 </ul>
 </li>
@@ -91,6 +95,7 @@ loadScripts(document, 'script');</script>
 <ul>
 <li class="circle">org.apache.datafusion.<a href="org/apache/datafusion/ColumnarValue.html" class="type-name-link" title="interface in org.apache.datafusion">ColumnarValue</a></li>
 <li class="circle">org.apache.datafusion.<a href="org/apache/datafusion/ScalarFunction.html" class="type-name-link" title="interface in org.apache.datafusion">ScalarFunction</a></li>
+<li class="circle">org.apache.datafusion.<a href="org/apache/datafusion/TableProvider.html" class="type-name-link" title="interface in org.apache.datafusion">TableProvider</a></li>
 </ul>
 </section>
 <section class="hierarchy">
diff --git a/api/type-search-index.js b/api/type-search-index.js
index 4bee7a2..f96b199 100644
--- a/api/type-search-index.js
+++ b/api/type-search-index.js
@@ -1 +1 @@
-typeSearchIndex = [{"l":"All Classes and Interfaces","u":"allclasses-index.html"},{"p":"org.apache.datafusion","l":"ColumnarValue.Array"},{"p":"org.apache.datafusion","l":"ArrowReadOptions"},{"p":"org.apache.datafusion","l":"ColumnarValue"},{"p":"org.apache.datafusion","l":"CsvReadOptions"},{"p":"org.apache.datafusion","l":"DataFrame"},{"p":"org.apache.datafusion","l":"FileCompressionType"},{"p":"org.apache.datafusion.internal","l":"JniBridge"},{"p":"org.apache.datafusion","l":"NativeLib [...]
\ No newline at end of file
+typeSearchIndex = [{"l":"All Classes and Interfaces","u":"allclasses-index.html"},{"p":"org.apache.datafusion","l":"ColumnarValue.Array"},{"p":"org.apache.datafusion","l":"ArrowReadOptions"},{"p":"org.apache.datafusion","l":"AvroReadOptions"},{"p":"org.apache.datafusion","l":"ColumnarValue"},{"p":"org.apache.datafusion","l":"CsvReadOptions"},{"p":"org.apache.datafusion","l":"CsvWriteOptions"},{"p":"org.apache.datafusion","l":"DataFrame"},{"p":"org.apache.datafusion","l":"FileCompressionT [...]
\ No newline at end of file
diff --git a/objects.inv b/objects.inv
index a5ae935..d29098b 100644
Binary files a/objects.inv and b/objects.inv differ
diff --git a/searchindex.js b/searchindex.js
index e8f5ff7..2bcd61a 100644
--- a/searchindex.js
+++ b/searchindex.js
@@ -1 +1 @@
-Search.setIndex({"alltitles": {"A minimal plan": [[11, "a-minimal-plan"]], "API Reference": [[6, null]], "Apache DataFusion Java": [[5, null]], "Build and test": [[1, "build-and-test"]], "Build from source": [[9, "build-from-source"]], "Build prerequisites": [[1, "build-prerequisites"]], "Code style": [[0, null]], "Configuration": [[14, "configuration"]], "Contributor Guide": [[2, null]], "DataFrame and SQL": [[7, null]], "DataFrame transformations": [[7, "dataframe-transformations"]], " [...]
\ No newline at end of file
+Search.setIndex({"alltitles": {"A minimal plan": [[11, "a-minimal-plan"]], "API Reference": [[6, null]], "Apache DataFusion Java": [[5, null]], "Build and test": [[1, "build-and-test"]], "Build from source": [[9, "build-from-source"]], "Build prerequisites": [[1, "build-prerequisites"]], "Code style": [[0, null]], "Configuration": [[14, "configuration"]], "Contract": [[15, "contract"]], "Contributor Guide": [[2, null]], "DataFrame and SQL": [[7, null]], "DataFrame transformations": [[7,  [...]
\ No newline at end of file
diff --git a/user-guide/api-reference.html b/user-guide/api-reference.html
index 240e015..135d1a8 100644
--- a/user-guide/api-reference.html
+++ b/user-guide/api-reference.html
@@ -45,7 +45,7 @@
     <link rel="index" title="Index" href="../genindex.html" />
     <link rel="search" title="Search" href="../search.html" />
     <link rel="next" title="Contributor Guide" href="../contributor-guide/index.html" />
-    <link rel="prev" title="Scalar UDFs" href="scalar-udf.html" />
+    <link rel="prev" title="Java table providers" href="table-provider.html" />
   <meta name="viewport" content="width=device-width, initial-scale=1"/>
   <meta name="docsearch:language" content="en"/>
   <meta name="docsearch:version" content="" />
@@ -324,6 +324,7 @@
 <li class="toctree-l1"><a class="reference internal" href="parquet.html">Parquet</a></li>
 <li class="toctree-l1"><a class="reference internal" href="proto-plans.html">Logical plans via datafusion-proto</a></li>
 <li class="toctree-l1"><a class="reference internal" href="scalar-udf.html">Scalar UDFs</a></li>
+<li class="toctree-l1"><a class="reference internal" href="table-provider.html">Java table providers</a></li>
 <li class="toctree-l1 current active"><a class="current reference internal" href="#">API Reference</a></li>
 </ul>
 </div>
@@ -428,12 +429,12 @@ intentionally excluded from the Javadoc — they are an implementation detail.</
                   
 <div class="prev-next-area">
     <a class="left-prev"
-       href="scalar-udf.html"
+       href="table-provider.html"
        title="previous page">
       <i class="fa-solid fa-angle-left"></i>
       <div class="prev-next-info">
         <p class="prev-next-subtitle">previous</p>
-        <p class="prev-next-title">Scalar UDFs</p>
+        <p class="prev-next-title">Java table providers</p>
       </div>
     </a>
     <a class="right-next"
diff --git a/user-guide/dataframe.html b/user-guide/dataframe.html
index 40f1ea9..3a1a3b0 100644
--- a/user-guide/dataframe.html
+++ b/user-guide/dataframe.html
@@ -324,6 +324,7 @@
 <li class="toctree-l1"><a class="reference internal" href="parquet.html">Parquet</a></li>
 <li class="toctree-l1"><a class="reference internal" href="proto-plans.html">Logical plans via datafusion-proto</a></li>
 <li class="toctree-l1"><a class="reference internal" href="scalar-udf.html">Scalar UDFs</a></li>
+<li class="toctree-l1"><a class="reference internal" href="table-provider.html">Java table providers</a></li>
 <li class="toctree-l1"><a class="reference internal" href="api-reference.html">API Reference</a></li>
 </ul>
 </div>
diff --git a/user-guide/index.html b/user-guide/index.html
index eec464c..25016a2 100644
--- a/user-guide/index.html
+++ b/user-guide/index.html
@@ -324,6 +324,7 @@
 <li class="toctree-l1"><a class="reference internal" href="parquet.html">Parquet</a></li>
 <li class="toctree-l1"><a class="reference internal" href="proto-plans.html">Logical plans via datafusion-proto</a></li>
 <li class="toctree-l1"><a class="reference internal" href="scalar-udf.html">Scalar UDFs</a></li>
+<li class="toctree-l1"><a class="reference internal" href="table-provider.html">Java table providers</a></li>
 <li class="toctree-l1"><a class="reference internal" href="api-reference.html">API Reference</a></li>
 </ul>
 </div>
@@ -418,6 +419,7 @@ and Parquet ingestion.</p>
 <li class="toctree-l1"><a class="reference internal" href="parquet.html">Parquet</a></li>
 <li class="toctree-l1"><a class="reference internal" href="proto-plans.html">Logical plans via datafusion-proto</a></li>
 <li class="toctree-l1"><a class="reference internal" href="scalar-udf.html">Scalar UDFs</a></li>
+<li class="toctree-l1"><a class="reference internal" href="table-provider.html">Java table providers</a></li>
 <li class="toctree-l1"><a class="reference internal" href="api-reference.html">API Reference</a></li>
 </ul>
 </div>
diff --git a/user-guide/installation.html b/user-guide/installation.html
index c72d9f6..63ec491 100644
--- a/user-guide/installation.html
+++ b/user-guide/installation.html
@@ -324,6 +324,7 @@
 <li class="toctree-l1"><a class="reference internal" href="parquet.html">Parquet</a></li>
 <li class="toctree-l1"><a class="reference internal" href="proto-plans.html">Logical plans via datafusion-proto</a></li>
 <li class="toctree-l1"><a class="reference internal" href="scalar-udf.html">Scalar UDFs</a></li>
+<li class="toctree-l1"><a class="reference internal" href="table-provider.html">Java table providers</a></li>
 <li class="toctree-l1"><a class="reference internal" href="api-reference.html">API Reference</a></li>
 </ul>
 </div>
diff --git a/user-guide/parquet.html b/user-guide/parquet.html
index 24adc37..98e15b4 100644
--- a/user-guide/parquet.html
+++ b/user-guide/parquet.html
@@ -324,6 +324,7 @@
 <li class="toctree-l1 current active"><a class="current reference internal" href="#">Parquet</a></li>
 <li class="toctree-l1"><a class="reference internal" href="proto-plans.html">Logical plans via datafusion-proto</a></li>
 <li class="toctree-l1"><a class="reference internal" href="scalar-udf.html">Scalar UDFs</a></li>
+<li class="toctree-l1"><a class="reference internal" href="table-provider.html">Java table providers</a></li>
 <li class="toctree-l1"><a class="reference internal" href="api-reference.html">API Reference</a></li>
 </ul>
 </div>
diff --git a/user-guide/proto-plans.html b/user-guide/proto-plans.html
index 4409af8..3a0d252 100644
--- a/user-guide/proto-plans.html
+++ b/user-guide/proto-plans.html
@@ -324,6 +324,7 @@
 <li class="toctree-l1"><a class="reference internal" href="parquet.html">Parquet</a></li>
 <li class="toctree-l1 current active"><a class="current reference internal" href="#">Logical plans via datafusion-proto</a></li>
 <li class="toctree-l1"><a class="reference internal" href="scalar-udf.html">Scalar UDFs</a></li>
+<li class="toctree-l1"><a class="reference internal" href="table-provider.html">Java table providers</a></li>
 <li class="toctree-l1"><a class="reference internal" href="api-reference.html">API Reference</a></li>
 </ul>
 </div>
diff --git a/user-guide/quickstart.html b/user-guide/quickstart.html
index 3c188c5..a2c254c 100644
--- a/user-guide/quickstart.html
+++ b/user-guide/quickstart.html
@@ -324,6 +324,7 @@
 <li class="toctree-l1"><a class="reference internal" href="parquet.html">Parquet</a></li>
 <li class="toctree-l1"><a class="reference internal" href="proto-plans.html">Logical plans via datafusion-proto</a></li>
 <li class="toctree-l1"><a class="reference internal" href="scalar-udf.html">Scalar UDFs</a></li>
+<li class="toctree-l1"><a class="reference internal" href="table-provider.html">Java table providers</a></li>
 <li class="toctree-l1"><a class="reference internal" href="api-reference.html">API Reference</a></li>
 </ul>
 </div>
diff --git a/user-guide/scalar-udf.html b/user-guide/scalar-udf.html
index c1c5a5b..04be98e 100644
--- a/user-guide/scalar-udf.html
+++ b/user-guide/scalar-udf.html
@@ -44,7 +44,7 @@
     <script>DOCUMENTATION_OPTIONS.pagename = 'user-guide/scalar-udf';</script>
     <link rel="index" title="Index" href="../genindex.html" />
     <link rel="search" title="Search" href="../search.html" />
-    <link rel="next" title="API Reference" href="api-reference.html" />
+    <link rel="next" title="Java table providers" href="table-provider.html" />
     <link rel="prev" title="Logical plans via datafusion-proto" href="proto-plans.html" />
   <meta name="viewport" content="width=device-width, initial-scale=1"/>
   <meta name="docsearch:language" content="en"/>
@@ -324,6 +324,7 @@
 <li class="toctree-l1"><a class="reference internal" href="parquet.html">Parquet</a></li>
 <li class="toctree-l1"><a class="reference internal" href="proto-plans.html">Logical plans via datafusion-proto</a></li>
 <li class="toctree-l1 current active"><a class="current reference internal" href="#">Scalar UDFs</a></li>
+<li class="toctree-l1"><a class="reference internal" href="table-provider.html">Java table providers</a></li>
 <li class="toctree-l1"><a class="reference internal" href="api-reference.html">API Reference</a></li>
 </ul>
 </div>
@@ -547,11 +548,11 @@ UDF as nulls in the input vector.</p></li>
       </div>
     </a>
     <a class="right-next"
-       href="api-reference.html"
+       href="table-provider.html"
        title="next page">
       <div class="prev-next-info">
         <p class="prev-next-subtitle">next</p>
-        <p class="prev-next-title">API Reference</p>
+        <p class="prev-next-title">Java table providers</p>
       </div>
       <i class="fa-solid fa-angle-right"></i>
     </a>
diff --git a/user-guide/sessioncontext.html b/user-guide/sessioncontext.html
index 63d5d45..d881d72 100644
--- a/user-guide/sessioncontext.html
+++ b/user-guide/sessioncontext.html
@@ -324,6 +324,7 @@
 <li class="toctree-l1"><a class="reference internal" href="parquet.html">Parquet</a></li>
 <li class="toctree-l1"><a class="reference internal" href="proto-plans.html">Logical plans via datafusion-proto</a></li>
 <li class="toctree-l1"><a class="reference internal" href="scalar-udf.html">Scalar UDFs</a></li>
+<li class="toctree-l1"><a class="reference internal" href="table-provider.html">Java table providers</a></li>
 <li class="toctree-l1"><a class="reference internal" href="api-reference.html">API Reference</a></li>
 </ul>
 </div>
diff --git a/user-guide/quickstart.html b/user-guide/table-provider.html
similarity index 57%
copy from user-guide/quickstart.html
copy to user-guide/table-provider.html
index 3c188c5..acfefa9 100644
--- a/user-guide/quickstart.html
+++ b/user-guide/table-provider.html
@@ -8,7 +8,7 @@
     <meta charset="utf-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" />
 
-    <title>Quickstart &#8212; Apache DataFusion Java  documentation</title>
+    <title>Java table providers &#8212; Apache DataFusion Java  documentation</title>
   
   
   
@@ -41,11 +41,11 @@
     <script src="../_static/documentation_options.js?v=5929fcd5"></script>
     <script src="../_static/doctools.js?v=9a2dae69"></script>
     <script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
-    <script>DOCUMENTATION_OPTIONS.pagename = 'user-guide/quickstart';</script>
+    <script>DOCUMENTATION_OPTIONS.pagename = 'user-guide/table-provider';</script>
     <link rel="index" title="Index" href="../genindex.html" />
     <link rel="search" title="Search" href="../search.html" />
-    <link rel="next" title="SessionContext" href="sessioncontext.html" />
-    <link rel="prev" title="Installation" href="installation.html" />
+    <link rel="next" title="API Reference" href="api-reference.html" />
+    <link rel="prev" title="Scalar UDFs" href="scalar-udf.html" />
   <meta name="viewport" content="width=device-width, initial-scale=1"/>
   <meta name="docsearch:language" content="en"/>
   <meta name="docsearch:version" content="" />
@@ -318,12 +318,13 @@
   <p class="bd-links__title" role="heading" aria-level="1">Section Navigation</p>
   <div class="bd-toc-item navbar-nav"><ul class="current nav bd-sidenav">
 <li class="toctree-l1"><a class="reference internal" href="installation.html">Installation</a></li>
-<li class="toctree-l1 current active"><a class="current reference internal" href="#">Quickstart</a></li>
+<li class="toctree-l1"><a class="reference internal" href="quickstart.html">Quickstart</a></li>
 <li class="toctree-l1"><a class="reference internal" href="sessioncontext.html">SessionContext</a></li>
 <li class="toctree-l1"><a class="reference internal" href="dataframe.html">DataFrame and SQL</a></li>
 <li class="toctree-l1"><a class="reference internal" href="parquet.html">Parquet</a></li>
 <li class="toctree-l1"><a class="reference internal" href="proto-plans.html">Logical plans via datafusion-proto</a></li>
 <li class="toctree-l1"><a class="reference internal" href="scalar-udf.html">Scalar UDFs</a></li>
+<li class="toctree-l1 current active"><a class="current reference internal" href="#">Java table providers</a></li>
 <li class="toctree-l1"><a class="reference internal" href="api-reference.html">API Reference</a></li>
 </ul>
 </div>
@@ -368,7 +369,7 @@
     
     <li class="breadcrumb-item"><a href="index.html" class="nav-link">User Guide</a></li>
     
-    <li class="breadcrumb-item active" aria-current="page"><span class="ellipsis">Quickstart</span></li>
+    <li class="breadcrumb-item active" aria-current="page"><span class="ellipsis">Java table providers</span></li>
   </ul>
 </nav>
 </div>
@@ -403,27 +404,56 @@ KIND, either express or implied.  See the License for the
 specific language governing permissions and limitations
 under the License.
 -->
-<section id="quickstart">
-<h1>Quickstart<a class="headerlink" href="#quickstart" title="Link to this heading">#</a></h1>
-<p>This page walks through a complete query end-to-end.</p>
-<section id="the-full-example">
-<h2>The full example<a class="headerlink" href="#the-full-example" title="Link to this heading">#</a></h2>
-<div class="highlight-java notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.arrow.memory.RootAllocator</span><span class="p">;</span>
+<section id="java-table-providers">
+<h1>Java table providers<a class="headerlink" href="#java-table-providers" title="Link to this heading">#</a></h1>
+<p><code class="docutils literal notranslate"><span class="pre">SessionContext.registerTable(name,</span> <span class="pre">provider)</span></code> registers a Java-implemented
+table. SQL queries that reference <code class="docutils literal notranslate"><span class="pre">name</span></code> call back into your <code class="docutils literal notranslate"><span class="pre">TableProvider</span></code>
+to fetch batches. Data flows from Java to native code via the Arrow C Data
+Interface, so there are no extra copies in the hot path. This is the Java
+counterpart to DataFusion’s Rust <code class="docutils literal notranslate"><span class="pre">SessionContext::register_table</span></code>.</p>
+<section id="implement">
+<h2>Implement<a class="headerlink" href="#implement" title="Link to this heading">#</a></h2>
+<div class="highlight-java notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.arrow.memory.BufferAllocator</span><span class="p">;</span>
 <span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.arrow.vector.ipc.ArrowReader</span><span class="p">;</span>
-<span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.datafusion.DataFrame</span><span class="p">;</span>
-<span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.datafusion.SessionContext</span><span class="p">;</span>
+<span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.arrow.vector.types.pojo.Schema</span><span class="p">;</span>
+<span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.datafusion.TableProvider</span><span class="p">;</span>
 
-<span class="k">try</span><span class="w"> </span><span class="p">(</span><span class="kd">var</span><span class="w"> </span><span class="n">allocator</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">RootAllocator</span><span class="p">();</span>
-<span class="w">     </span><span class="kd">var</span><span class="w"> </span><span class="n">ctx</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">SessionContext</span><span class="p">())</span><span class="w"> </span><span class="p">{</span>
+<span class="kd">public</span><span class="w"> </span><span class="kd">final</span><span class="w"> </span><span class="kd">class</span> <span class="nc">MyTable</span><span class="w"> </span><span class="kd">implements</span><span class="w"> </span><span class="n">TableProvider</span><span class="w"> </span><span class="p">{</span>
+<span class="w">    </span><span class="kd">private</span><span class="w"> </span><span class="kd">final</span><span class="w"> </span><span class="n">Schema</span><span class="w"> </span><span class="n">schema</span><span class="p">;</span>
 
-<span class="w">    </span><span class="n">ctx</span><span class="p">.</span><span class="na">registerParquet</span><span class="p">(</span><span class="s">&quot;orders&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;/path/to/orders.parquet&quot;</span><span class="p">);</span>
+<span class="w">    </span><span class="kd">public</span><span class="w"> </span><span class="nf">MyTable</span><span class="p">(</span><span class="n">Schema</span><span class="w"> </span><span class="n">schema</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
+<span class="w">        </span><span class="k">this</span><span class="p">.</span><span class="na">schema</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">schema</span><span class="p">;</span>
+<span class="w">    </span><span class="p">}</span>
+
+<span class="w">    </span><span class="nd">@Override</span><span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="n">Schema</span><span class="w"> </span><span class="nf">schema</span><span class="p">()</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">schema</span><span class="p">;</span><span class="w"> </span><span class="p">}</span>
 
-<span class="w">    </span><span class="k">try</span><span class="w"> </span><span class="p">(</span><span class="n">DataFrame</span><span class="w"> </span><span class="n">df</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">ctx</span><span class="p">.</span><span class="na">sql</span><span class="p">(</span>
-<span class="w">            </span><span class="s">&quot;SELECT o_orderpriority, COUNT(*) AS n &quot;</span><span class="w"> </span><span class="o">+</span>
-<span class="w">            </span><span class="s">&quot;FROM orders GROUP BY o_orderpriority&quot;</span><span class="p">);</span>
-<span class="w">         </span><span class="n">ArrowReader</span><span class="w"> </span><span class="n">reader</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">df</span><span class="p">.</span><span class="na">collect</span><span class="p">(</span><span class="n">allocator</span><span class="p">))</span><span class="w"> </span><span class="p">{</span>
-<span class="w">        </span><span class="k">while</span><span class="w"> </span><span class="p">(</span><span class="n">reader</span><span class="p">.</span><span class="na">loadNextBatch</span><span class="p">())</span><span class="w"> </span><span class="p">{</span>
-<span class="w">            </span><span class="kd">var</span><span class="w"> </span><span class="n">batch</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">reader</span><span class="p">.</span><span class="na">getVectorSchemaRoot</span><span class="p">();</span>
+<span class="w">    </span><span class="nd">@Override</span>
+<span class="w">    </span><span class="kd">public</span><span class="w"> </span><span class="n">ArrowReader</span><span class="w"> </span><span class="nf">scan</span><span class="p">(</span><span class="n">BufferAllocator</span><span class="w"> </span><span class="n">allocator</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
+<span class="w">        </span><span class="c1">// Return a fresh ArrowReader. The reader must allocate its buffers</span>
+<span class="w">        </span><span class="c1">// from `allocator` (or a child of it) — the framework needs the</span>
+<span class="w">        </span><span class="c1">// allocator hierarchy to share a root.</span>
+<span class="w">        </span><span class="k">return</span><span class="w"> </span><span class="n">openMyReader</span><span class="p">(</span><span class="n">allocator</span><span class="p">);</span>
+<span class="w">    </span><span class="p">}</span>
+<span class="p">}</span>
+</pre></div>
+</div>
+<p>For the common case of “I have a schema and a function that returns an
+<code class="docutils literal notranslate"><span class="pre">ArrowReader</span></code>,” <code class="docutils literal notranslate"><span class="pre">SimpleTableProvider</span></code> packages those two into a ready-made
+<code class="docutils literal notranslate"><span class="pre">TableProvider</span></code> without having to subclass:</p>
+<div class="highlight-java notranslate"><div class="highlight"><pre><span></span><span class="n">TableProvider</span><span class="w"> </span><span class="n">t</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">SimpleTableProvider</span><span class="p">(</span><span class="n">mySchema</span><span class="p">(),</span><span class="w"> </span><span class="n">allocator</span><span class="w"> </span><s [...]
+<span class="n">ctx</span><span class="p">.</span><span class="na">registerTable</span><span class="p">(</span><span class="s">&quot;t&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">t</span><span class="p">);</span>
+</pre></div>
+</div>
+</section>
+<section id="register-and-query">
+<h2>Register and query<a class="headerlink" href="#register-and-query" title="Link to this heading">#</a></h2>
+<div class="highlight-java notranslate"><div class="highlight"><pre><span></span><span class="k">try</span><span class="w"> </span><span class="p">(</span><span class="n">SessionContext</span><span class="w"> </span><span class="n">ctx</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">SessionContext</span><span class="p">();</span>
+<span class="w">     </span><span class="n">BufferAllocator</span><span class="w"> </span><span class="n">allocator</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">RootAllocator</span><span class="p">())</span><span class="w"> </span><span class="p">{</span>
+<span class="w">    </span><span class="n">ctx</span><span class="p">.</span><span class="na">registerTable</span><span class="p">(</span><span class="s">&quot;t&quot;</span><span class="p">,</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">MyTable</span><span class="p">(</span><span class="n">mySchema</span><span class="p">()));</span>
+
+<span class="w">    </span><span class="k">try</span><span class="w"> </span><span class="p">(</span><span class="n">DataFrame</span><span class="w"> </span><span class="n">df</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">ctx</span><span class="p">.</span><span class="na">sql</span><span class="p">(</span><span class="s">&quot;SELECT * FROM t WHERE x &gt; 10&quot;</span><span class="p">);</span>
+<span class="w">         </span><span class="n">ArrowReader</span><span class="w"> </span><span class="n">r</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">df</span><span class="p">.</span><span class="na">collect</span><span class="p">(</span><span class="n">allocator</span><span class="p">))</span><span class="w"> </span><span class="p">{</span>
+<span class="w">        </span><span class="k">while</span><span class="w"> </span><span class="p">(</span><span class="n">r</span><span class="p">.</span><span class="na">loadNextBatch</span><span class="p">())</span><span class="w"> </span><span class="p">{</span>
 <span class="w">            </span><span class="c1">// ...</span>
 <span class="w">        </span><span class="p">}</span>
 <span class="w">    </span><span class="p">}</span>
@@ -431,27 +461,49 @@ under the License.
 </pre></div>
 </div>
 </section>
-<section id="walkthrough">
-<h2>Walkthrough<a class="headerlink" href="#walkthrough" title="Link to this heading">#</a></h2>
-<p><strong>Allocator.</strong> <code class="docutils literal notranslate"><span class="pre">RootAllocator</span></code> is the Arrow off-heap memory allocator. Every
-JVM-side Arrow buffer is tracked under an allocator; when the allocator is
-closed, leaked buffers are reported. Use one allocator per query (or one
-per application) and close it in a <code class="docutils literal notranslate"><span class="pre">try</span></code>-with-resources.</p>
-<p><strong>Session context.</strong> <code class="docutils literal notranslate"><span class="pre">SessionContext</span></code> is the entry point into DataFusion. It
-holds the catalog of registered tables and the query planner. It is
-<code class="docutils literal notranslate"><span class="pre">AutoCloseable</span></code> and <strong>not thread-safe</strong> — use one per thread, or guard
-access externally.</p>
-<p><strong>Registering data.</strong> <code class="docutils literal notranslate"><span class="pre">registerParquet(name,</span> <span class="pre">path)</span></code> reads the file’s footer
-on call and exposes it under the given table name. See
-<a class="reference internal" href="parquet.html"><span class="std std-doc">Parquet</span></a> for the options form.</p>
-<p><strong>SQL.</strong> <code class="docutils literal notranslate"><span class="pre">ctx.sql(&quot;...&quot;)</span></code> plans the query and returns a <code class="docutils literal notranslate"><span class="pre">DataFrame</span></code>. The
-query is not executed until results are pulled.</p>
-<p><strong>Collecting results.</strong> <code class="docutils literal notranslate"><span class="pre">df.collect(allocator)</span></code> starts native execution and
-returns an <code class="docutils literal notranslate"><span class="pre">ArrowReader</span></code>. Each <code class="docutils literal notranslate"><span class="pre">loadNextBatch()</span></code> call pulls the next
-<code class="docutils literal notranslate"><span class="pre">VectorSchemaRoot</span></code>; iterate until it returns <code class="docutils literal notranslate"><span class="pre">false</span></code>.</p>
-<p><strong>Cleanup.</strong> Both <code class="docutils literal notranslate"><span class="pre">SessionContext</span></code> and <code class="docutils literal notranslate"><span class="pre">DataFrame</span></code> are <code class="docutils literal notranslate"><span class="pre">AutoCloseable</span></code>. Use
-<code class="docutils literal notranslate"><span class="pre">try</span></code>-with-resources so native resources and Arrow buffers are released
-even on exception.</p>
+<section id="contract">
+<h2>Contract<a class="headerlink" href="#contract" title="Link to this heading">#</a></h2>
+<ul class="simple">
+<li><p><code class="docutils literal notranslate"><span class="pre">schema()</span></code> is called exactly once, on the caller’s thread, at registration
+time. Throwing from it aborts registration with the original exception.</p></li>
+<li><p><code class="docutils literal notranslate"><span class="pre">scan(allocator)</span></code> is called once per SQL query that touches the table, on a
+worker thread. It must return a fresh, independent <code class="docutils literal notranslate"><span class="pre">ArrowReader</span></code> on every
+call — this is what makes self-joins and <code class="docutils literal notranslate"><span class="pre">UNION</span> <span class="pre">ALL</span></code> over the same table
+work.</p></li>
+<li><p>The reader returned by <code class="docutils literal notranslate"><span class="pre">scan</span></code> must allocate its buffers from the supplied
+<code class="docutils literal notranslate"><span class="pre">allocator</span></code> (or a child of it). Arrow Java’s <code class="docutils literal notranslate"><span class="pre">Data.exportArrayStream</span></code>
+requires the reader’s allocator and the export allocator to share a root.</p></li>
+<li><p>The returned reader’s schema must equal the schema returned by <code class="docutils literal notranslate"><span class="pre">schema()</span></code>.
+A mismatch fails the query.</p></li>
+<li><p>You do not need to close the returned reader yourself. The framework
+installs a release callback that closes it when the underlying FFI stream
+is dropped.</p></li>
+</ul>
+</section>
+<section id="errors">
+<h2>Errors<a class="headerlink" href="#errors" title="Link to this heading">#</a></h2>
+<p>Exceptions thrown from <code class="docutils literal notranslate"><span class="pre">scan()</span></code> or from the returned reader surface in the
+<code class="docutils literal notranslate"><span class="pre">RuntimeException</span></code> raised by <code class="docutils literal notranslate"><span class="pre">collect()</span></code>. The error message includes the Java
+exception class and <code class="docutils literal notranslate"><span class="pre">getMessage()</span></code>, in the same format used for scalar UDF
+errors.</p>
+</section>
+<section id="threading">
+<h2>Threading<a class="headerlink" href="#threading" title="Link to this heading">#</a></h2>
+<p><code class="docutils literal notranslate"><span class="pre">SessionContext</span></code> is single-threaded, but <code class="docutils literal notranslate"><span class="pre">scan(allocator)</span></code> may be invoked from
+any DataFusion worker thread. If your implementation maintains mutable state
+across scans, synchronise it.</p>
+</section>
+<section id="limitations-v1">
+<h2>Limitations (v1)<a class="headerlink" href="#limitations-v1" title="Link to this heading">#</a></h2>
+<ul class="simple">
+<li><p>Single-partition scans only. DataFusion sees the table as one partition;
+multi-partition parallelism is a follow-up.</p></li>
+<li><p>No projection or filter pushdown. DataFusion applies projection and
+filters on top of the batches you return; the Java side always sees the
+full schema. The interface is intentionally minimal so it can grow these
+capabilities (as default methods) without breaking existing implementations.</p></li>
+<li><p>No <code class="docutils literal notranslate"><span class="pre">deregisterTable</span></code>. Tables live until the <code class="docutils literal notranslate"><span class="pre">SessionContext</span></code> is closed.</p></li>
+</ul>
 </section>
 </section>
 
@@ -466,20 +518,20 @@ even on exception.</p>
                   
 <div class="prev-next-area">
     <a class="left-prev"
-       href="installation.html"
+       href="scalar-udf.html"
        title="previous page">
       <i class="fa-solid fa-angle-left"></i>
       <div class="prev-next-info">
         <p class="prev-next-subtitle">previous</p>
-        <p class="prev-next-title">Installation</p>
+        <p class="prev-next-title">Scalar UDFs</p>
       </div>
     </a>
     <a class="right-next"
-       href="sessioncontext.html"
+       href="api-reference.html"
        title="next page">
       <div class="prev-next-info">
         <p class="prev-next-subtitle">next</p>
-        <p class="prev-next-title">SessionContext</p>
+        <p class="prev-next-title">API Reference</p>
       </div>
       <i class="fa-solid fa-angle-right"></i>
     </a>
@@ -502,8 +554,12 @@ even on exception.</p>
   </div>
   <nav class="bd-toc-nav page-toc" aria-labelledby="pst-page-navigation-heading-2">
     <ul class="visible nav section-nav flex-column">
-<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#the-full-example">The full example</a></li>
-<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#walkthrough">Walkthrough</a></li>
+<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#implement">Implement</a></li>
+<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#register-and-query">Register and query</a></li>
+<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#contract">Contract</a></li>
+<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#errors">Errors</a></li>
+<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#threading">Threading</a></li>
+<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#limitations-v1">Limitations (v1)</a></li>
 </ul>
   </nav></div>
 
@@ -511,7 +567,7 @@ even on exception.</p>
   <div role="note" aria-label="source link">
     <h3>This Page</h3>
     <ul class="this-page-menu">
-      <li><a href="../_sources/user-guide/quickstart.md.txt"
+      <li><a href="../_sources/user-guide/table-provider.md.txt"
             rel="nofollow">Show Source</a></li>
     </ul>
    </div></div>


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@datafusion.apache.org
For additional commands, e-mail: commits-help@datafusion.apache.org