You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iceberg.apache.org by gi...@apache.org on 2025/01/07 09:44:23 UTC

(iceberg-rust) branch gh-pages updated: deploy: 25e89094bf859cefb159574c6d2b925d4148d992

This is an automated email from the ASF dual-hosted git repository.

github-bot pushed a commit to branch gh-pages
in repository https://gitbox.apache.org/repos/asf/iceberg-rust.git


The following commit(s) were added to refs/heads/gh-pages by this push:
     new e97a5bb4 deploy: 25e89094bf859cefb159574c6d2b925d4148d992
e97a5bb4 is described below

commit e97a5bb438a9d018977fadcf6afff3eb7fc71df5
Author: liurenjie1024 <li...@users.noreply.github.com>
AuthorDate: Tue Jan 7 09:44:18 2025 +0000

    deploy: 25e89094bf859cefb159574c6d2b925d4148d992
---
 api/iceberg/all.html                               |   2 +-
 api/iceberg/index.html                             |   2 +-
 api/iceberg/inspect/index.html                     |   2 +
 .../inspect/manifests/struct.ManifestsTable.html   |  11 +
 .../metadata_table/struct.MetadataTable.html       |  11 +
 .../{metadata_scan => inspect}/sidebar-items.js    |   0
 .../inspect/snapshots/struct.SnapshotsTable.html   |  11 +
 .../struct.ManifestsTable.html                     |   9 +-
 .../struct.MetadataTable.html                      |   9 +-
 .../struct.SnapshotsTable.html                     |   9 +-
 api/iceberg/metadata_scan/index.html               |   2 -
 api/iceberg/sidebar-items.js                       |   2 +-
 api/iceberg/table/struct.Table.html                |   4 +-
 api/search-index.js                                |   2 +-
 api/search.desc/iceberg/iceberg-desc-0-.js         |   2 +-
 api/src-files.js                                   |   2 +-
 .../manifests.rs.html}                             | 452 +--------------------
 api/src/iceberg/inspect/metadata_table.rs.html     | 199 +++++++++
 api/src/iceberg/inspect/mod.rs.html                |  53 +++
 api/src/iceberg/inspect/snapshots.rs.html          | 367 +++++++++++++++++
 api/src/iceberg/lib.rs.html                        |   2 +-
 api/src/iceberg/table.rs.html                      |   2 +-
 api/trait.impl/core/fmt/trait.Debug.js             |   2 +-
 api/trait.impl/core/marker/trait.Freeze.js         |   2 +-
 api/trait.impl/core/marker/trait.Send.js           |   2 +-
 api/trait.impl/core/marker/trait.Sync.js           |   2 +-
 api/trait.impl/core/marker/trait.Unpin.js          |   2 +-
 .../core/panic/unwind_safe/trait.RefUnwindSafe.js  |   2 +-
 .../core/panic/unwind_safe/trait.UnwindSafe.js     |   2 +-
 29 files changed, 697 insertions(+), 472 deletions(-)

diff --git a/api/iceberg/all.html b/api/iceberg/all.html
index 45c26ae3..8b03b711 100644
--- a/api/iceberg/all.html
+++ b/api/iceberg/all.html
@@ -1 +1 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="List of all items in this crate"><title>List of all items in this crate</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781e4970d [...]
\ No newline at end of file
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="List of all items in this crate"><title>List of all items in this crate</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781e4970d [...]
\ No newline at end of file
diff --git a/api/iceberg/index.html b/api/iceberg/index.html
index 0c429d62..d3a56361 100644
--- a/api/iceberg/index.html
+++ b/api/iceberg/index.html
@@ -27,4 +27,4 @@
     </span><span class="kw">let </span>_data: Vec&lt;<span class="kw">_</span>&gt; = stream.try_collect().<span class="kw">await</span><span class="question-mark">?</span>;
     <span class="prelude-val">Ok</span>(())
 }</code></pre></div>
-</div></details><h2 id="modules" class="section-header">Modules<a href="#modules" class="anchor">§</a></h2><ul class="item-table"><li><div class="item-name"><a class="mod" href="arrow/index.html" title="mod iceberg::arrow">arrow</a></div><div class="desc docblock-short">Conversion between Iceberg and Arrow schema</div></li><li><div class="item-name"><a class="mod" href="expr/index.html" title="mod iceberg::expr">expr</a></div><div class="desc docblock-short">This module contains expressi [...]
\ No newline at end of file
+</div></details><h2 id="modules" class="section-header">Modules<a href="#modules" class="anchor">§</a></h2><ul class="item-table"><li><div class="item-name"><a class="mod" href="arrow/index.html" title="mod iceberg::arrow">arrow</a></div><div class="desc docblock-short">Conversion between Iceberg and Arrow schema</div></li><li><div class="item-name"><a class="mod" href="expr/index.html" title="mod iceberg::expr">expr</a></div><div class="desc docblock-short">This module contains expressi [...]
\ No newline at end of file
diff --git a/api/iceberg/inspect/index.html b/api/iceberg/inspect/index.html
new file mode 100644
index 00000000..ffbadc4d
--- /dev/null
+++ b/api/iceberg/inspect/index.html
@@ -0,0 +1,2 @@
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Metadata table APIs."><title>iceberg::inspect - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781e4970d388.woff2,SourceCod [...]
+</div></details><h2 id="structs" class="section-header">Structs<a href="#structs" class="anchor">§</a></h2><ul class="item-table"><li><div class="item-name"><a class="struct" href="struct.ManifestsTable.html" title="struct iceberg::inspect::ManifestsTable">ManifestsTable</a></div><div class="desc docblock-short">Manifests table.</div></li><li><div class="item-name"><a class="struct" href="struct.MetadataTable.html" title="struct iceberg::inspect::MetadataTable">MetadataTable</a></div><di [...]
\ No newline at end of file
diff --git a/api/iceberg/inspect/manifests/struct.ManifestsTable.html b/api/iceberg/inspect/manifests/struct.ManifestsTable.html
new file mode 100644
index 00000000..241ec51d
--- /dev/null
+++ b/api/iceberg/inspect/manifests/struct.ManifestsTable.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta http-equiv="refresh" content="0;URL=../../../iceberg/inspect/struct.ManifestsTable.html">
+    <title>Redirection</title>
+</head>
+<body>
+    <p>Redirecting to <a href="../../../iceberg/inspect/struct.ManifestsTable.html">../../../iceberg/inspect/struct.ManifestsTable.html</a>...</p>
+    <script>location.replace("../../../iceberg/inspect/struct.ManifestsTable.html" + location.search + location.hash);</script>
+</body>
+</html>
\ No newline at end of file
diff --git a/api/iceberg/inspect/metadata_table/struct.MetadataTable.html b/api/iceberg/inspect/metadata_table/struct.MetadataTable.html
new file mode 100644
index 00000000..de63d875
--- /dev/null
+++ b/api/iceberg/inspect/metadata_table/struct.MetadataTable.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta http-equiv="refresh" content="0;URL=../../../iceberg/inspect/struct.MetadataTable.html">
+    <title>Redirection</title>
+</head>
+<body>
+    <p>Redirecting to <a href="../../../iceberg/inspect/struct.MetadataTable.html">../../../iceberg/inspect/struct.MetadataTable.html</a>...</p>
+    <script>location.replace("../../../iceberg/inspect/struct.MetadataTable.html" + location.search + location.hash);</script>
+</body>
+</html>
\ No newline at end of file
diff --git a/api/iceberg/metadata_scan/sidebar-items.js b/api/iceberg/inspect/sidebar-items.js
similarity index 100%
rename from api/iceberg/metadata_scan/sidebar-items.js
rename to api/iceberg/inspect/sidebar-items.js
diff --git a/api/iceberg/inspect/snapshots/struct.SnapshotsTable.html b/api/iceberg/inspect/snapshots/struct.SnapshotsTable.html
new file mode 100644
index 00000000..9ce4e8d8
--- /dev/null
+++ b/api/iceberg/inspect/snapshots/struct.SnapshotsTable.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta http-equiv="refresh" content="0;URL=../../../iceberg/inspect/struct.SnapshotsTable.html">
+    <title>Redirection</title>
+</head>
+<body>
+    <p>Redirecting to <a href="../../../iceberg/inspect/struct.SnapshotsTable.html">../../../iceberg/inspect/struct.SnapshotsTable.html</a>...</p>
+    <script>location.replace("../../../iceberg/inspect/struct.SnapshotsTable.html" + location.search + location.hash);</script>
+</body>
+</html>
\ No newline at end of file
diff --git a/api/iceberg/metadata_scan/struct.ManifestsTable.html b/api/iceberg/inspect/struct.ManifestsTable.html
similarity index 86%
rename from api/iceberg/metadata_scan/struct.ManifestsTable.html
rename to api/iceberg/inspect/struct.ManifestsTable.html
index 30dd62ab..575c4692 100644
--- a/api/iceberg/metadata_scan/struct.ManifestsTable.html
+++ b/api/iceberg/inspect/struct.ManifestsTable.html
@@ -1,7 +1,8 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Manifests table."><title>ManifestsTable in iceberg::metadata_scan - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781e4970 [...]
-</div></details><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-ManifestsTable%3C'a%3E" class="impl"><a class="src rightside" href="../../src/iceberg/metadata_scan.rs.html#136-256">source</a><a href="#impl-ManifestsTable%3C'a%3E" class="anchor">§</a><h3 class="code-header">impl&lt;'a&gt; <a class="struct" href="struc [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.scan" class="method"><a class="src rightside" href="../../src/iceberg/metadata_scan.rs.html#173-255">source</a><h4 class="code-header">pub async fn <a href="#method.scan" class="fn">scan</a>(&amp;self) -&gt; <a class="type" href="../type.Result.html" title="type iceberg::Result">Result</a>&lt;RecordBatch&gt;</h4></section></summary><div class="docblock"><p>Scans the manifests table.</p>
-</div></details></div></details></div><h2 id="synthetic-implementations" class="section-header">Auto Trait Implementations<a href="#synthetic-implementations" class="anchor">§</a></h2><div id="synthetic-implementations-list"><section id="impl-Freeze-for-ManifestsTable%3C'a%3E" class="impl"><a href="#impl-Freeze-for-ManifestsTable%3C'a%3E" class="anchor">§</a><h3 class="code-header">impl&lt;'a&gt; <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Freeze.html" titl [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Manifests table."><title>ManifestsTable in iceberg::inspect - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781e4970d388.w [...]
+</div></details><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-ManifestsTable%3C'a%3E" class="impl"><a class="src rightside" href="../../src/iceberg/inspect/manifests.rs.html#35-160">source</a><a href="#impl-ManifestsTable%3C'a%3E" class="anchor">§</a><h3 class="code-header">impl&lt;'a&gt; <a class="struct" href="st [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.schema" class="method"><a class="src rightside" href="../../src/iceberg/inspect/manifests.rs.html#51-74">source</a><h4 class="code-header">pub fn <a href="#method.schema" class="fn">schema</a>(&amp;self) -&gt; Schema</h4></section></summary><div class="docblock"><p>Returns the schema of the manifests table.</p>
+</div></details><details class="toggle method-toggle" open><summary><section id="method.scan" class="method"><a class="src rightside" href="../../src/iceberg/inspect/manifests.rs.html#77-159">source</a><h4 class="code-header">pub async fn <a href="#method.scan" class="fn">scan</a>(&amp;self) -&gt; <a class="type" href="../type.Result.html" title="type iceberg::Result">Result</a>&lt;RecordBatch&gt;</h4></section></summary><div class="docblock"><p>Scans the manifests table.</p>
+</div></details></div></details></div><h2 id="synthetic-implementations" class="section-header">Auto Trait Implementations<a href="#synthetic-implementations" class="anchor">§</a></h2><div id="synthetic-implementations-list"><section id="impl-Freeze-for-ManifestsTable%3C'a%3E" class="impl"><a href="#impl-Freeze-for-ManifestsTable%3C'a%3E" class="anchor">§</a><h3 class="code-header">impl&lt;'a&gt; <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Freeze.html" titl [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#141">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="https:/ [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#217">source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a href= [...]
diff --git a/api/iceberg/metadata_scan/struct.MetadataTable.html b/api/iceberg/inspect/struct.MetadataTable.html
similarity index 84%
rename from api/iceberg/metadata_scan/struct.MetadataTable.html
rename to api/iceberg/inspect/struct.MetadataTable.html
index 04bd4e9d..82a5f083 100644
--- a/api/iceberg/metadata_scan/struct.MetadataTable.html
+++ b/api/iceberg/inspect/struct.MetadataTable.html
@@ -1,13 +1,14 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Metadata table is used to inspect a table’s history, snapshots, and other metadata as a table."><title>MetadataTable in iceberg::metadata_scan - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.t [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Metadata table is used to inspect a table’s history, snapshots, and other metadata as a table."><title>MetadataTable in iceberg::inspect - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.wof [...]
 <p>References:</p>
 <ul>
 <li><a href="https://github.com/apache/iceberg/blob/ac865e334e143dfd9e33011d8cf710b46d91f1e5/core/src/main/java/org/apache/iceberg/MetadataTableType.java#L23-L39">https://github.com/apache/iceberg/blob/ac865e334e143dfd9e33011d8cf710b46d91f1e5/core/src/main/java/org/apache/iceberg/MetadataTableType.java#L23-L39</a></li>
 <li><a href="https://iceberg.apache.org/docs/latest/spark-queries/#querying-with-sql">https://iceberg.apache.org/docs/latest/spark-queries/#querying-with-sql</a></li>
 <li><a href="https://py.iceberg.apache.org/api/#inspecting-tables">https://py.iceberg.apache.org/api/#inspecting-tables</a></li>
 </ul>
-</div></details><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-MetadataTable" class="impl"><a class="src rightside" href="../../src/iceberg/metadata_scan.rs.html#41-56">source</a><a href="#impl-MetadataTable" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.MetadataTable.html" title="s [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.manifests" class="method"><a class="src rightside" href="../../src/iceberg/metadata_scan.rs.html#53-55">source</a><h4 class="code-header">pub fn <a href="#method.manifests" class="fn">manifests</a>(&amp;self) -&gt; <a class="struct" href="struct.ManifestsTable.html" title="struct iceberg::metadata_scan::ManifestsTable">ManifestsTable</a>&lt;'_&gt;</h4></section></summary><div class="docblock"><p>Get t [...]
-</div></details></div></details></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Debug-for-MetadataTable" class="impl"><a class="src rightside" href="../../src/iceberg/metadata_scan.rs.html#38">source</a><a href="#impl-Debug-for-MetadataTable" class="anchor">§</a><h3 class="code-header">i [...]
+</div></details><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-MetadataTable" class="impl"><a class="src rightside" href="../../src/iceberg/inspect/metadata_table.rs.html#30-45">source</a><a href="#impl-MetadataTable" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.MetadataTable.html" [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.snapshots" class="method"><a class="src rightside" href="../../src/iceberg/inspect/metadata_table.rs.html#37-39">source</a><h4 class="code-header">pub fn <a href="#method.snapshots" class="fn">snapshots</a>(&amp;self) -&gt; <a class="struct" href="struct.SnapshotsTable.html" title="struct iceberg::inspect::SnapshotsTable">SnapshotsTable</a>&lt;'_&gt;</h4></section></summary><div class="docblock"><p>Ge [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.manifests" class="method"><a class="src rightside" href="../../src/iceberg/inspect/metadata_table.rs.html#42-44">source</a><h4 class="code-header">pub fn <a href="#method.manifests" class="fn">manifests</a>(&amp;self) -&gt; <a class="struct" href="struct.ManifestsTable.html" title="struct iceberg::inspect::ManifestsTable">ManifestsTable</a>&lt;'_&gt;</h4></section></summary><div class="docblock"><p>Ge [...]
+</div></details></div></details></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Debug-for-MetadataTable" class="impl"><a class="src rightside" href="../../src/iceberg/inspect/metadata_table.rs.html#27">source</a><a href="#impl-Debug-for-MetadataTable" class="anchor">§</a><h3 class="code- [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#141">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="https:/ [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#217">source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a href= [...]
diff --git a/api/iceberg/metadata_scan/struct.SnapshotsTable.html b/api/iceberg/inspect/struct.SnapshotsTable.html
similarity index 86%
rename from api/iceberg/metadata_scan/struct.SnapshotsTable.html
rename to api/iceberg/inspect/struct.SnapshotsTable.html
index 8b657d53..2ad7b5a8 100644
--- a/api/iceberg/metadata_scan/struct.SnapshotsTable.html
+++ b/api/iceberg/inspect/struct.SnapshotsTable.html
@@ -1,7 +1,8 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Snapshots table."><title>SnapshotsTable in iceberg::metadata_scan - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781e4970 [...]
-</div></details><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-SnapshotsTable%3C'a%3E" class="impl"><a class="src rightside" href="../../src/iceberg/metadata_scan.rs.html#63-129">source</a><a href="#impl-SnapshotsTable%3C'a%3E" class="anchor">§</a><h3 class="code-header">impl&lt;'a&gt; <a class="struct" href="struct [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.scan" class="method"><a class="src rightside" href="../../src/iceberg/metadata_scan.rs.html#98-128">source</a><h4 class="code-header">pub fn <a href="#method.scan" class="fn">scan</a>(&amp;self) -&gt; <a class="type" href="../type.Result.html" title="type iceberg::Result">Result</a>&lt;RecordBatch&gt;</h4></section></summary><div class="docblock"><p>Scans the snapshots table.</p>
-</div></details></div></details></div><h2 id="synthetic-implementations" class="section-header">Auto Trait Implementations<a href="#synthetic-implementations" class="anchor">§</a></h2><div id="synthetic-implementations-list"><section id="impl-Freeze-for-SnapshotsTable%3C'a%3E" class="impl"><a href="#impl-Freeze-for-SnapshotsTable%3C'a%3E" class="anchor">§</a><h3 class="code-header">impl&lt;'a&gt; <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Freeze.html" titl [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Snapshots table."><title>SnapshotsTable in iceberg::inspect - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781e4970d388.w [...]
+</div></details><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-SnapshotsTable%3C'a%3E" class="impl"><a class="src rightside" href="../../src/iceberg/inspect/snapshots.rs.html#33-104">source</a><a href="#impl-SnapshotsTable%3C'a%3E" class="anchor">§</a><h3 class="code-header">impl&lt;'a&gt; <a class="struct" href="st [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.schema" class="method"><a class="src rightside" href="../../src/iceberg/inspect/snapshots.rs.html#40-70">source</a><h4 class="code-header">pub fn <a href="#method.schema" class="fn">schema</a>(&amp;self) -&gt; Schema</h4></section></summary><div class="docblock"><p>Returns the schema of the snapshots table.</p>
+</div></details><details class="toggle method-toggle" open><summary><section id="method.scan" class="method"><a class="src rightside" href="../../src/iceberg/inspect/snapshots.rs.html#73-103">source</a><h4 class="code-header">pub fn <a href="#method.scan" class="fn">scan</a>(&amp;self) -&gt; <a class="type" href="../type.Result.html" title="type iceberg::Result">Result</a>&lt;RecordBatch&gt;</h4></section></summary><div class="docblock"><p>Scans the snapshots table.</p>
+</div></details></div></details></div><h2 id="synthetic-implementations" class="section-header">Auto Trait Implementations<a href="#synthetic-implementations" class="anchor">§</a></h2><div id="synthetic-implementations-list"><section id="impl-Freeze-for-SnapshotsTable%3C'a%3E" class="impl"><a href="#impl-Freeze-for-SnapshotsTable%3C'a%3E" class="anchor">§</a><h3 class="code-header">impl&lt;'a&gt; <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Freeze.html" titl [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#141">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="https:/ [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#217">source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a href= [...]
diff --git a/api/iceberg/metadata_scan/index.html b/api/iceberg/metadata_scan/index.html
deleted file mode 100644
index 01b402da..00000000
--- a/api/iceberg/metadata_scan/index.html
+++ /dev/null
@@ -1,2 +0,0 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Metadata table api."><title>iceberg::metadata_scan - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781e4970d388.woff2,Sour [...]
-</div></details><h2 id="structs" class="section-header">Structs<a href="#structs" class="anchor">§</a></h2><ul class="item-table"><li><div class="item-name"><a class="struct" href="struct.ManifestsTable.html" title="struct iceberg::metadata_scan::ManifestsTable">ManifestsTable</a></div><div class="desc docblock-short">Manifests table.</div></li><li><div class="item-name"><a class="struct" href="struct.MetadataTable.html" title="struct iceberg::metadata_scan::MetadataTable">MetadataTable< [...]
\ No newline at end of file
diff --git a/api/iceberg/sidebar-items.js b/api/iceberg/sidebar-items.js
index a7bc5f52..27b298d5 100644
--- a/api/iceberg/sidebar-items.js
+++ b/api/iceberg/sidebar-items.js
@@ -1 +1 @@
-window.SIDEBAR_ITEMS = {"enum":["ErrorKind","TableRequirement","TableUpdate"],"macro":["ensure_data_valid"],"mod":["arrow","expr","io","metadata_scan","scan","spec","table","transaction","transform","writer"],"struct":["Error","Namespace","NamespaceIdent","TableCommit","TableCreation","TableIdent","ViewCreation"],"trait":["Catalog"],"type":["Result"]};
\ No newline at end of file
+window.SIDEBAR_ITEMS = {"enum":["ErrorKind","TableRequirement","TableUpdate"],"macro":["ensure_data_valid"],"mod":["arrow","expr","inspect","io","scan","spec","table","transaction","transform","writer"],"struct":["Error","Namespace","NamespaceIdent","TableCommit","TableCreation","TableIdent","ViewCreation"],"trait":["Catalog"],"type":["Result"]};
\ No newline at end of file
diff --git a/api/iceberg/table/struct.Table.html b/api/iceberg/table/struct.Table.html
index 439561de..88de5385 100644
--- a/api/iceberg/table/struct.Table.html
+++ b/api/iceberg/table/struct.Table.html
@@ -6,8 +6,8 @@
 </div></details><details class="toggle method-toggle" open><summary><section id="method.metadata_location" class="method"><a class="src rightside" href="../../src/iceberg/table.rs.html#185-187">source</a><h4 class="code-header">pub fn <a href="#method.metadata_location" class="fn">metadata_location</a>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;&amp;<a class="primitive" href="https [...]
 </div></details><details class="toggle method-toggle" open><summary><section id="method.file_io" class="method"><a class="src rightside" href="../../src/iceberg/table.rs.html#190-192">source</a><h4 class="code-header">pub fn <a href="#method.file_io" class="fn">file_io</a>(&amp;self) -&gt; &amp;<a class="struct" href="../io/struct.FileIO.html" title="struct iceberg::io::FileIO">FileIO</a></h4></section></summary><div class="docblock"><p>Returns file io used in this table.</p>
 </div></details><details class="toggle method-toggle" open><summary><section id="method.scan" class="method"><a class="src rightside" href="../../src/iceberg/table.rs.html#200-202">source</a><h4 class="code-header">pub fn <a href="#method.scan" class="fn">scan</a>(&amp;self) -&gt; <a class="struct" href="../scan/struct.TableScanBuilder.html" title="struct iceberg::scan::TableScanBuilder">TableScanBuilder</a>&lt;'_&gt;</h4></section></summary><div class="docblock"><p>Creates a table scan.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.metadata_table" class="method"><a class="src rightside" href="../../src/iceberg/table.rs.html#206-208">source</a><h4 class="code-header">pub fn <a href="#method.metadata_table" class="fn">metadata_table</a>(self) -&gt; <a class="struct" href="../metadata_scan/struct.MetadataTable.html" title="struct iceberg::metadata_scan::MetadataTable">MetadataTable</a></h4></section></summary><div class="docblock"> [...]
-See <a href="../metadata_scan/struct.MetadataTable.html" title="struct iceberg::metadata_scan::MetadataTable"><code>MetadataTable</code></a> for more details.</p>
+</div></details><details class="toggle method-toggle" open><summary><section id="method.metadata_table" class="method"><a class="src rightside" href="../../src/iceberg/table.rs.html#206-208">source</a><h4 class="code-header">pub fn <a href="#method.metadata_table" class="fn">metadata_table</a>(self) -&gt; <a class="struct" href="../inspect/struct.MetadataTable.html" title="struct iceberg::inspect::MetadataTable">MetadataTable</a></h4></section></summary><div class="docblock"><p>Creates a [...]
+See <a href="../inspect/struct.MetadataTable.html" title="struct iceberg::inspect::MetadataTable"><code>MetadataTable</code></a> for more details.</p>
 </div></details><details class="toggle method-toggle" open><summary><section id="method.readonly" class="method"><a class="src rightside" href="../../src/iceberg/table.rs.html#211-213">source</a><h4 class="code-header">pub fn <a href="#method.readonly" class="fn">readonly</a>(&amp;self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a></h4></section></summary><div class="docblock"><p>Returns the flag indicating whether the <code>Table</c [...]
 </div></details><details class="toggle method-toggle" open><summary><section id="method.reader_builder" class="method"><a class="src rightside" href="../../src/iceberg/table.rs.html#216-218">source</a><h4 class="code-header">pub fn <a href="#method.reader_builder" class="fn">reader_builder</a>(&amp;self) -&gt; <a class="struct" href="../arrow/struct.ArrowReaderBuilder.html" title="struct iceberg::arrow::ArrowReaderBuilder">ArrowReaderBuilder</a></h4></section></summary><div class="docblo [...]
 </div></details></div></details></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-Table" class="impl"><a class="src rightside" href="../../src/iceberg/table.rs.html#154">source</a><a href="#impl-Clone-for-Table" class="anchor">§</a><h3 class="code-header">impl <a class="trait" hr [...]
diff --git a/api/search-index.js b/api/search-index.js
index 5e0d08b5..82fa572b 100644
--- a/api/search-index.js
+++ b/api/search-index.js
@@ -1,5 +1,5 @@
 var searchIndex = new Map(JSON.parse('[\
-["iceberg",{"t":"PPPPPKPPPPPFGPPPFFPPPPPPPPPIPPPPPPPPFFFGGPPPFNCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMMOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMMQNNNNNNNNNNNNNNNNNNCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMNNNNNNNNNNNNNNNNNNNNNNNNNCNMMMOONCNNOOONOMNNNNNNONOOMOCOONNNNONCOCMNNNNNNNNNNCCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMMNNNNNNNNNNNNNCOOOOOOOOOOOOOOOOOOOOOOOOOOOOOFFKRRNNNNNNNNHHNNNNNNNNNNNNNNNNNNNNNNNNNNNMMMNMHMNNNNNNNHNNNNNNPPPPPPPPFKRGFIPPPPPPPPFPPPPPPPPPGGFPPFPIPPFNNMNNNNNNNNNNNNNNNNNNNNNNNNNN [...]
+["iceberg",{"t":"PPPPPKPPPPPFGPPPFFPPPPPPPPPIPPPPPPPPFFFGGPPPFNCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMMOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMMQNNNNNNNNNNNNNNNNNNCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMNNNNNNNNNNNNNNCNNNNNNNNNNNCNMMMOONNNOOONOMNNNNNNONOOMOCOONNNNONCOCMNNNNNNNNNNCCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMMNNNNNNNNNNNNNCOOOOOOOOOOOOOOOOOOOOOOOOOOOOOFFKRRNNNNNNNNHHNNNNNNNNNNNNNNNNNNNNNNNNNNNMMMNMHMNNNNNNNHNNNNNNPPPPPPPPFKRGFIPPPPPPPPFPPPPPPPPPGGFPPFPIPPFNNMNNNNNNNNNNNNNNNNNNNNNNNNNN [...]
 ["iceberg_catalog_glue",{"t":"SSSSSFFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNQ","n":["AWS_ACCESS_KEY_ID","AWS_PROFILE_NAME","AWS_REGION_NAME","AWS_SECRET_ACCESS_KEY","AWS_SESSION_TOKEN","GlueCatalog","GlueCatalogConfig","borrow","borrow","borrow_mut","borrow_mut","builder","create_namespace","create_table","deref","deref","deref_mut","deref_mut","drop","drop","drop_namespace","drop_table","file_io","fmt","fmt","from","from","get_namespace","init","init","into","into","into_shared","i [...]
 ["iceberg_catalog_hms",{"t":"PPFFGNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN","n":["Buffered","Framed","HmsCatalog","HmsCatalogConfig","HmsThriftTransport","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","builder","create_namespace","create_table","default","deref","deref","deref","deref_mut","deref_mut","deref_mut","drop","drop","drop","drop_namespace","drop_table","file_io","fmt","fmt","fmt","from","from","from","get_namespace","init","init","init","into [...]
 ["iceberg_catalog_memory",{"t":"FNNNNNNNNNNNNNNNNNNNNNNNNNNN","n":["MemoryCatalog","borrow","borrow_mut","create_namespace","create_table","deref","deref_mut","drop","drop_namespace","drop_table","fmt","from","get_namespace","init","into","list_namespaces","list_tables","load_table","namespace_exists","new","rename_table","table_exists","try_from","try_into","type_id","update_namespace","update_table","vzip"],"q":[[0,"iceberg_catalog_memory"],[28,"iceberg_catalog_memory::catalog"],[29,"i [...]
diff --git a/api/search.desc/iceberg/iceberg-desc-0-.js b/api/search.desc/iceberg/iceberg-desc-0-.js
index 4a276bff..4c35468c 100644
--- a/api/search.desc/iceberg/iceberg-desc-0-.js
+++ b/api/search.desc/iceberg/iceberg-desc-0-.js
@@ -1 +1 @@
-searchState.loadedDescShard("iceberg", 0, "Apache Iceberg Official Native Rust Implementation\nAdd a new schema to the table\nAdd snapshot to table.\nAdd sort order to table.\nAdd a new partition spec to the table\nAssign a new UUID to the table\nThe catalog API for Iceberg Rust.\nThe table’s current schema id must match the requirement.\nIceberg data is invalid.\nThe table’s default sort order id must match the …\nThe table’s default spec id must match the requirement.\nContains the err [...]
\ No newline at end of file
+searchState.loadedDescShard("iceberg", 0, "Apache Iceberg Official Native Rust Implementation\nAdd a new schema to the table\nAdd snapshot to table.\nAdd sort order to table.\nAdd a new partition spec to the table\nAssign a new UUID to the table\nThe catalog API for Iceberg Rust.\nThe table’s current schema id must match the requirement.\nIceberg data is invalid.\nThe table’s default sort order id must match the …\nThe table’s default spec id must match the requirement.\nContains the err [...]
\ No newline at end of file
diff --git a/api/src-files.js b/api/src-files.js
index ed531727..cd5830a1 100644
--- a/api/src-files.js
+++ b/api/src-files.js
@@ -1,5 +1,5 @@
 var srcIndex = new Map(JSON.parse('[\
-["iceberg",["",[["arrow",[],["mod.rs","reader.rs","record_batch_projector.rs","record_batch_transformer.rs","schema.rs"]],["avro",[],["mod.rs","schema.rs"]],["catalog",[],["mod.rs"]],["expr",[["visitors",[],["bound_predicate_visitor.rs","expression_evaluator.rs","inclusive_metrics_evaluator.rs","inclusive_projection.rs","manifest_evaluator.rs","mod.rs","page_index_evaluator.rs","row_group_metrics_evaluator.rs"]]],["accessor.rs","mod.rs","predicate.rs","term.rs"]],["io",[],["file_io.rs"," [...]
+["iceberg",["",[["arrow",[],["mod.rs","reader.rs","record_batch_projector.rs","record_batch_transformer.rs","schema.rs"]],["avro",[],["mod.rs","schema.rs"]],["catalog",[],["mod.rs"]],["expr",[["visitors",[],["bound_predicate_visitor.rs","expression_evaluator.rs","inclusive_metrics_evaluator.rs","inclusive_projection.rs","manifest_evaluator.rs","mod.rs","page_index_evaluator.rs","row_group_metrics_evaluator.rs"]]],["accessor.rs","mod.rs","predicate.rs","term.rs"]],["inspect",[],["manifest [...]
 ["iceberg_catalog_glue",["",[],["catalog.rs","error.rs","lib.rs","schema.rs","utils.rs"]]],\
 ["iceberg_catalog_hms",["",[],["catalog.rs","error.rs","lib.rs","schema.rs","utils.rs"]]],\
 ["iceberg_catalog_memory",["",[],["catalog.rs","lib.rs","namespace_state.rs"]]],\
diff --git a/api/src/iceberg/metadata_scan.rs.html b/api/src/iceberg/inspect/manifests.rs.html
similarity index 53%
rename from api/src/iceberg/metadata_scan.rs.html
rename to api/src/iceberg/inspect/manifests.rs.html
index 2101e030..a0d1110c 100644
--- a/api/src/iceberg/metadata_scan.rs.html
+++ b/api/src/iceberg/inspect/manifests.rs.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `crates/iceberg/src/metadata_scan.rs`."><title>metadata_scan.rs - source</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,Fira [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `crates/iceberg/src/inspect/manifests.rs`."><title>manifests.rs - source</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,Fira [...]
 <a href="#2" id="2">2</a>
 <a href="#3" id="3">3</a>
 <a href="#4" id="4">4</a>
@@ -268,221 +268,6 @@
 <a href="#268" id="268">268</a>
 <a href="#269" id="269">269</a>
 <a href="#270" id="270">270</a>
-<a href="#271" id="271">271</a>
-<a href="#272" id="272">272</a>
-<a href="#273" id="273">273</a>
-<a href="#274" id="274">274</a>
-<a href="#275" id="275">275</a>
-<a href="#276" id="276">276</a>
-<a href="#277" id="277">277</a>
-<a href="#278" id="278">278</a>
-<a href="#279" id="279">279</a>
-<a href="#280" id="280">280</a>
-<a href="#281" id="281">281</a>
-<a href="#282" id="282">282</a>
-<a href="#283" id="283">283</a>
-<a href="#284" id="284">284</a>
-<a href="#285" id="285">285</a>
-<a href="#286" id="286">286</a>
-<a href="#287" id="287">287</a>
-<a href="#288" id="288">288</a>
-<a href="#289" id="289">289</a>
-<a href="#290" id="290">290</a>
-<a href="#291" id="291">291</a>
-<a href="#292" id="292">292</a>
-<a href="#293" id="293">293</a>
-<a href="#294" id="294">294</a>
-<a href="#295" id="295">295</a>
-<a href="#296" id="296">296</a>
-<a href="#297" id="297">297</a>
-<a href="#298" id="298">298</a>
-<a href="#299" id="299">299</a>
-<a href="#300" id="300">300</a>
-<a href="#301" id="301">301</a>
-<a href="#302" id="302">302</a>
-<a href="#303" id="303">303</a>
-<a href="#304" id="304">304</a>
-<a href="#305" id="305">305</a>
-<a href="#306" id="306">306</a>
-<a href="#307" id="307">307</a>
-<a href="#308" id="308">308</a>
-<a href="#309" id="309">309</a>
-<a href="#310" id="310">310</a>
-<a href="#311" id="311">311</a>
-<a href="#312" id="312">312</a>
-<a href="#313" id="313">313</a>
-<a href="#314" id="314">314</a>
-<a href="#315" id="315">315</a>
-<a href="#316" id="316">316</a>
-<a href="#317" id="317">317</a>
-<a href="#318" id="318">318</a>
-<a href="#319" id="319">319</a>
-<a href="#320" id="320">320</a>
-<a href="#321" id="321">321</a>
-<a href="#322" id="322">322</a>
-<a href="#323" id="323">323</a>
-<a href="#324" id="324">324</a>
-<a href="#325" id="325">325</a>
-<a href="#326" id="326">326</a>
-<a href="#327" id="327">327</a>
-<a href="#328" id="328">328</a>
-<a href="#329" id="329">329</a>
-<a href="#330" id="330">330</a>
-<a href="#331" id="331">331</a>
-<a href="#332" id="332">332</a>
-<a href="#333" id="333">333</a>
-<a href="#334" id="334">334</a>
-<a href="#335" id="335">335</a>
-<a href="#336" id="336">336</a>
-<a href="#337" id="337">337</a>
-<a href="#338" id="338">338</a>
-<a href="#339" id="339">339</a>
-<a href="#340" id="340">340</a>
-<a href="#341" id="341">341</a>
-<a href="#342" id="342">342</a>
-<a href="#343" id="343">343</a>
-<a href="#344" id="344">344</a>
-<a href="#345" id="345">345</a>
-<a href="#346" id="346">346</a>
-<a href="#347" id="347">347</a>
-<a href="#348" id="348">348</a>
-<a href="#349" id="349">349</a>
-<a href="#350" id="350">350</a>
-<a href="#351" id="351">351</a>
-<a href="#352" id="352">352</a>
-<a href="#353" id="353">353</a>
-<a href="#354" id="354">354</a>
-<a href="#355" id="355">355</a>
-<a href="#356" id="356">356</a>
-<a href="#357" id="357">357</a>
-<a href="#358" id="358">358</a>
-<a href="#359" id="359">359</a>
-<a href="#360" id="360">360</a>
-<a href="#361" id="361">361</a>
-<a href="#362" id="362">362</a>
-<a href="#363" id="363">363</a>
-<a href="#364" id="364">364</a>
-<a href="#365" id="365">365</a>
-<a href="#366" id="366">366</a>
-<a href="#367" id="367">367</a>
-<a href="#368" id="368">368</a>
-<a href="#369" id="369">369</a>
-<a href="#370" id="370">370</a>
-<a href="#371" id="371">371</a>
-<a href="#372" id="372">372</a>
-<a href="#373" id="373">373</a>
-<a href="#374" id="374">374</a>
-<a href="#375" id="375">375</a>
-<a href="#376" id="376">376</a>
-<a href="#377" id="377">377</a>
-<a href="#378" id="378">378</a>
-<a href="#379" id="379">379</a>
-<a href="#380" id="380">380</a>
-<a href="#381" id="381">381</a>
-<a href="#382" id="382">382</a>
-<a href="#383" id="383">383</a>
-<a href="#384" id="384">384</a>
-<a href="#385" id="385">385</a>
-<a href="#386" id="386">386</a>
-<a href="#387" id="387">387</a>
-<a href="#388" id="388">388</a>
-<a href="#389" id="389">389</a>
-<a href="#390" id="390">390</a>
-<a href="#391" id="391">391</a>
-<a href="#392" id="392">392</a>
-<a href="#393" id="393">393</a>
-<a href="#394" id="394">394</a>
-<a href="#395" id="395">395</a>
-<a href="#396" id="396">396</a>
-<a href="#397" id="397">397</a>
-<a href="#398" id="398">398</a>
-<a href="#399" id="399">399</a>
-<a href="#400" id="400">400</a>
-<a href="#401" id="401">401</a>
-<a href="#402" id="402">402</a>
-<a href="#403" id="403">403</a>
-<a href="#404" id="404">404</a>
-<a href="#405" id="405">405</a>
-<a href="#406" id="406">406</a>
-<a href="#407" id="407">407</a>
-<a href="#408" id="408">408</a>
-<a href="#409" id="409">409</a>
-<a href="#410" id="410">410</a>
-<a href="#411" id="411">411</a>
-<a href="#412" id="412">412</a>
-<a href="#413" id="413">413</a>
-<a href="#414" id="414">414</a>
-<a href="#415" id="415">415</a>
-<a href="#416" id="416">416</a>
-<a href="#417" id="417">417</a>
-<a href="#418" id="418">418</a>
-<a href="#419" id="419">419</a>
-<a href="#420" id="420">420</a>
-<a href="#421" id="421">421</a>
-<a href="#422" id="422">422</a>
-<a href="#423" id="423">423</a>
-<a href="#424" id="424">424</a>
-<a href="#425" id="425">425</a>
-<a href="#426" id="426">426</a>
-<a href="#427" id="427">427</a>
-<a href="#428" id="428">428</a>
-<a href="#429" id="429">429</a>
-<a href="#430" id="430">430</a>
-<a href="#431" id="431">431</a>
-<a href="#432" id="432">432</a>
-<a href="#433" id="433">433</a>
-<a href="#434" id="434">434</a>
-<a href="#435" id="435">435</a>
-<a href="#436" id="436">436</a>
-<a href="#437" id="437">437</a>
-<a href="#438" id="438">438</a>
-<a href="#439" id="439">439</a>
-<a href="#440" id="440">440</a>
-<a href="#441" id="441">441</a>
-<a href="#442" id="442">442</a>
-<a href="#443" id="443">443</a>
-<a href="#444" id="444">444</a>
-<a href="#445" id="445">445</a>
-<a href="#446" id="446">446</a>
-<a href="#447" id="447">447</a>
-<a href="#448" id="448">448</a>
-<a href="#449" id="449">449</a>
-<a href="#450" id="450">450</a>
-<a href="#451" id="451">451</a>
-<a href="#452" id="452">452</a>
-<a href="#453" id="453">453</a>
-<a href="#454" id="454">454</a>
-<a href="#455" id="455">455</a>
-<a href="#456" id="456">456</a>
-<a href="#457" id="457">457</a>
-<a href="#458" id="458">458</a>
-<a href="#459" id="459">459</a>
-<a href="#460" id="460">460</a>
-<a href="#461" id="461">461</a>
-<a href="#462" id="462">462</a>
-<a href="#463" id="463">463</a>
-<a href="#464" id="464">464</a>
-<a href="#465" id="465">465</a>
-<a href="#466" id="466">466</a>
-<a href="#467" id="467">467</a>
-<a href="#468" id="468">468</a>
-<a href="#469" id="469">469</a>
-<a href="#470" id="470">470</a>
-<a href="#471" id="471">471</a>
-<a href="#472" id="472">472</a>
-<a href="#473" id="473">473</a>
-<a href="#474" id="474">474</a>
-<a href="#475" id="475">475</a>
-<a href="#476" id="476">476</a>
-<a href="#477" id="477">477</a>
-<a href="#478" id="478">478</a>
-<a href="#479" id="479">479</a>
-<a href="#480" id="480">480</a>
-<a href="#481" id="481">481</a>
-<a href="#482" id="482">482</a>
-<a href="#483" id="483">483</a>
-<a href="#484" id="484">484</a>
-<a href="#485" id="485">485</a>
 </pre></div><pre class="rust"><code><span class="comment">// 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
@@ -500,125 +285,29 @@
 // specific language governing permissions and limitations
 // under the License.
 
-</span><span class="doccomment">//! Metadata table api.
-
 </span><span class="kw">use </span>std::sync::Arc;
 
 <span class="kw">use </span>arrow_array::builder::{
-    BooleanBuilder, ListBuilder, MapBuilder, PrimitiveBuilder, StringBuilder, StructBuilder,
+    BooleanBuilder, ListBuilder, PrimitiveBuilder, StringBuilder, StructBuilder,
 };
-<span class="kw">use </span>arrow_array::types::{Int32Type, Int64Type, Int8Type, TimestampMillisecondType};
+<span class="kw">use </span>arrow_array::types::{Int32Type, Int64Type, Int8Type};
 <span class="kw">use </span>arrow_array::RecordBatch;
-<span class="kw">use </span>arrow_schema::{DataType, Field, Fields, Schema, TimeUnit};
+<span class="kw">use </span>arrow_schema::{DataType, Field, Fields, Schema};
 
 <span class="kw">use </span><span class="kw">crate</span>::table::Table;
 <span class="kw">use </span><span class="kw">crate</span>::Result;
 
-<span class="doccomment">/// Metadata table is used to inspect a table's history, snapshots, and other metadata as a table.
-///
-/// References:
-/// - &lt;https://github.com/apache/iceberg/blob/ac865e334e143dfd9e33011d8cf710b46d91f1e5/core/src/main/java/org/apache/iceberg/MetadataTableType.java#L23-L39&gt;
-/// - &lt;https://iceberg.apache.org/docs/latest/spark-queries/#querying-with-sql&gt;
-/// - &lt;https://py.iceberg.apache.org/api/#inspecting-tables&gt;
-</span><span class="attr">#[derive(Debug)]
-</span><span class="kw">pub struct </span>MetadataTable(Table);
-
-<span class="kw">impl </span>MetadataTable {
-    <span class="doccomment">/// Creates a new metadata scan.
-    </span><span class="kw">pub</span>(<span class="kw">super</span>) <span class="kw">fn </span>new(table: Table) -&gt; <span class="self">Self </span>{
-        <span class="self">Self</span>(table)
-    }
-
-    <span class="doccomment">/// Get the snapshots table.
-    </span><span class="kw">pub fn </span>snapshots(<span class="kw-2">&amp;</span><span class="self">self</span>) -&gt; SnapshotsTable {
-        SnapshotsTable { table: <span class="kw-2">&amp;</span><span class="self">self</span>.<span class="number">0 </span>}
-    }
-
-    <span class="doccomment">/// Get the manifests table.
-    </span><span class="kw">pub fn </span>manifests(<span class="kw-2">&amp;</span><span class="self">self</span>) -&gt; ManifestsTable {
-        ManifestsTable { table: <span class="kw-2">&amp;</span><span class="self">self</span>.<span class="number">0 </span>}
-    }
-}
-
-<span class="doccomment">/// Snapshots table.
-</span><span class="kw">pub struct </span>SnapshotsTable&lt;<span class="lifetime">'a</span>&gt; {
-    table: <span class="kw-2">&amp;</span><span class="lifetime">'a </span>Table,
-}
-
-<span class="kw">impl</span>&lt;<span class="lifetime">'a</span>&gt; SnapshotsTable&lt;<span class="lifetime">'a</span>&gt; {
-    <span class="doccomment">/// Returns the schema of the snapshots table.
-    </span><span class="kw">pub fn </span>schema(<span class="kw-2">&amp;</span><span class="self">self</span>) -&gt; Schema {
-        Schema::new(<span class="macro">vec!</span>[
-            Field::new(
-                <span class="string">"committed_at"</span>,
-                DataType::Timestamp(TimeUnit::Millisecond, <span class="prelude-val">Some</span>(<span class="string">"+00:00"</span>.into())),
-                <span class="bool-val">false</span>,
-            ),
-            Field::new(<span class="string">"snapshot_id"</span>, DataType::Int64, <span class="bool-val">false</span>),
-            Field::new(<span class="string">"parent_id"</span>, DataType::Int64, <span class="bool-val">true</span>),
-            Field::new(<span class="string">"operation"</span>, DataType::Utf8, <span class="bool-val">false</span>),
-            Field::new(<span class="string">"manifest_list"</span>, DataType::Utf8, <span class="bool-val">false</span>),
-            Field::new(
-                <span class="string">"summary"</span>,
-                DataType::Map(
-                    Arc::new(Field::new(
-                        <span class="string">"entries"</span>,
-                        DataType::Struct(
-                            <span class="macro">vec!</span>[
-                                Field::new(<span class="string">"keys"</span>, DataType::Utf8, <span class="bool-val">false</span>),
-                                Field::new(<span class="string">"values"</span>, DataType::Utf8, <span class="bool-val">true</span>),
-                            ]
-                            .into(),
-                        ),
-                        <span class="bool-val">false</span>,
-                    )),
-                    <span class="bool-val">false</span>,
-                ),
-                <span class="bool-val">false</span>,
-            ),
-        ])
-    }
-
-    <span class="doccomment">/// Scans the snapshots table.
-    </span><span class="kw">pub fn </span>scan(<span class="kw-2">&amp;</span><span class="self">self</span>) -&gt; <span class="prelude-ty">Result</span>&lt;RecordBatch&gt; {
-        <span class="kw">let </span><span class="kw-2">mut </span>committed_at =
-            PrimitiveBuilder::&lt;TimestampMillisecondType&gt;::new().with_timezone(<span class="string">"+00:00"</span>);
-        <span class="kw">let </span><span class="kw-2">mut </span>snapshot_id = PrimitiveBuilder::&lt;Int64Type&gt;::new();
-        <span class="kw">let </span><span class="kw-2">mut </span>parent_id = PrimitiveBuilder::&lt;Int64Type&gt;::new();
-        <span class="kw">let </span><span class="kw-2">mut </span>operation = StringBuilder::new();
-        <span class="kw">let </span><span class="kw-2">mut </span>manifest_list = StringBuilder::new();
-        <span class="kw">let </span><span class="kw-2">mut </span>summary = MapBuilder::new(<span class="prelude-val">None</span>, StringBuilder::new(), StringBuilder::new());
-
-        <span class="kw">for </span>snapshot <span class="kw">in </span><span class="self">self</span>.table.metadata().snapshots() {
-            committed_at.append_value(snapshot.timestamp_ms());
-            snapshot_id.append_value(snapshot.snapshot_id());
-            parent_id.append_option(snapshot.parent_snapshot_id());
-            manifest_list.append_value(snapshot.manifest_list());
-            operation.append_value(snapshot.summary().operation.as_str());
-            <span class="kw">for </span>(key, value) <span class="kw">in </span><span class="kw-2">&amp;</span>snapshot.summary().additional_properties {
-                summary.keys().append_value(key);
-                summary.values().append_value(value);
-            }
-            summary.append(<span class="bool-val">true</span>)<span class="question-mark">?</span>;
-        }
-
-        <span class="prelude-val">Ok</span>(RecordBatch::try_new(Arc::new(<span class="self">self</span>.schema()), <span class="macro">vec!</span>[
-            Arc::new(committed_at.finish()),
-            Arc::new(snapshot_id.finish()),
-            Arc::new(parent_id.finish()),
-            Arc::new(operation.finish()),
-            Arc::new(manifest_list.finish()),
-            Arc::new(summary.finish()),
-        ])<span class="question-mark">?</span>)
-    }
-}
-
 <span class="doccomment">/// Manifests table.
 </span><span class="kw">pub struct </span>ManifestsTable&lt;<span class="lifetime">'a</span>&gt; {
     table: <span class="kw-2">&amp;</span><span class="lifetime">'a </span>Table,
 }
 
 <span class="kw">impl</span>&lt;<span class="lifetime">'a</span>&gt; ManifestsTable&lt;<span class="lifetime">'a</span>&gt; {
+    <span class="doccomment">/// Create a new Manifests table instance.
+    </span><span class="kw">pub fn </span>new(table: <span class="kw-2">&amp;</span><span class="lifetime">'a </span>Table) -&gt; <span class="self">Self </span>{
+        <span class="self">Self </span>{ table }
+    }
+
     <span class="kw">fn </span>partition_summary_fields(<span class="kw-2">&amp;</span><span class="self">self</span>) -&gt; Vec&lt;Field&gt; {
         <span class="macro">vec!</span>[
             Field::new(<span class="string">"contains_null"</span>, DataType::Boolean, <span class="bool-val">false</span>),
@@ -742,130 +431,11 @@
 
 <span class="attr">#[cfg(test)]
 </span><span class="kw">mod </span>tests {
-    <span class="kw">use </span>expect_test::{expect, Expect};
-    <span class="kw">use </span>itertools::Itertools;
+    <span class="kw">use </span>expect_test::expect;
 
-    <span class="kw">use super</span>::<span class="kw-2">*</span>;
+    <span class="kw">use </span><span class="kw">crate</span>::inspect::metadata_table::tests::check_record_batch;
     <span class="kw">use </span><span class="kw">crate</span>::scan::tests::TableTestFixture;
 
-    <span class="doccomment">/// Snapshot testing to check the resulting record batch.
-    ///
-    /// - `expected_schema/data`: put `expect![[""]]` as a placeholder,
-    ///   and then run test with `UPDATE_EXPECT=1 cargo test` to automatically update the result,
-    ///   or use rust-analyzer (see [video](https://github.com/rust-analyzer/expect-test)).
-    ///   Check the doc of [`expect_test`] for more details.
-    /// - `ignore_check_columns`: Some columns are not stable, so we can skip them.
-    /// - `sort_column`: The order of the data might be non-deterministic, so we can sort it by a column.
-    </span><span class="kw">fn </span>check_record_batch(
-        record_batch: RecordBatch,
-        expected_schema: Expect,
-        expected_data: Expect,
-        ignore_check_columns: <span class="kw-2">&amp;</span>[<span class="kw-2">&amp;</span>str],
-        sort_column: <span class="prelude-ty">Option</span>&lt;<span class="kw-2">&amp;</span>str&gt;,
-    ) {
-        <span class="kw">let </span><span class="kw-2">mut </span>columns = record_batch.columns().to_vec();
-        <span class="kw">if let </span><span class="prelude-val">Some</span>(sort_column) = sort_column {
-            <span class="kw">let </span>column = record_batch.column_by_name(sort_column).unwrap();
-            <span class="kw">let </span>indices = arrow_ord::sort::sort_to_indices(column, <span class="prelude-val">None</span>, <span class="prelude-val">None</span>).unwrap();
-            columns = columns
-                .iter()
-                .map(|column| arrow_select::take::take(column.as_ref(), <span class="kw-2">&amp;</span>indices, <span class="prelude-val">None</span>).unwrap())
-                .collect_vec();
-        }
-
-        expected_schema.assert_eq(<span class="kw-2">&amp;</span><span class="macro">format!</span>(
-            <span class="string">"{}"</span>,
-            record_batch.schema().fields().iter().format(<span class="string">",\n"</span>)
-        ));
-        expected_data.assert_eq(<span class="kw-2">&amp;</span><span class="macro">format!</span>(
-            <span class="string">"{}"</span>,
-            record_batch
-                .schema()
-                .fields()
-                .iter()
-                .zip_eq(columns)
-                .map(|(field, column)| {
-                    <span class="kw">if </span>ignore_check_columns.contains(<span class="kw-2">&amp;</span>field.name().as_str()) {
-                        <span class="macro">format!</span>(<span class="string">"{}: (skipped)"</span>, field.name())
-                    } <span class="kw">else </span>{
-                        <span class="macro">format!</span>(<span class="string">"{}: {:?}"</span>, field.name(), column)
-                    }
-                })
-                .format(<span class="string">",\n"</span>)
-        ));
-    }
-
-    <span class="attr">#[test]
-    </span><span class="kw">fn </span>test_snapshots_table() {
-        <span class="kw">let </span>table = TableTestFixture::new().table;
-        <span class="kw">let </span>record_batch = table.metadata_table().snapshots().scan().unwrap();
-        check_record_batch(
-            record_batch,
-            <span class="macro">expect!</span>[[<span class="string">r#"
-                Field { name: "committed_at", data_type: Timestamp(Millisecond, Some("+00:00")), nullable: false, dict_id: 0, dict_is_ordered: false, metadata: {} },
-                Field { name: "snapshot_id", data_type: Int64, nullable: false, dict_id: 0, dict_is_ordered: false, metadata: {} },
-                Field { name: "parent_id", data_type: Int64, nullable: true, dict_id: 0, dict_is_ordered: false, metadata: {} },
-                Field { name: "operation", data_type: Utf8, nullable: false, dict_id: 0, dict_is_ordered: false, metadata: {} },
-                Field { name: "manifest_list", data_type: Utf8, nullable: false, dict_id: 0, dict_is_ordered: false, metadata: {} },
-                Field { name: "summary", data_type: Map(Field { name: "entries", data_type: Struct([Field { name: "keys", data_type: Utf8, nullable: false, dict_id: 0, dict_is_ordered: false, metadata: {} }, Field { name: "values", data_type: Utf8, nullable: true, dict_id: 0, dict_is_ordered: false, metadata: {} }]), nullable: false, dict_id: 0, dict_is_ordered: false, metadata: {} }, false), nullable: false, dict_id: 0, dict_is_ordered: false, metadata: {} }"#</span>]],
-            <span class="macro">expect!</span>[[<span class="string">r#"
-                committed_at: PrimitiveArray&lt;Timestamp(Millisecond, Some("+00:00"))&gt;
-                [
-                  2018-01-04T21:22:35.770+00:00,
-                  2019-04-12T20:29:15.770+00:00,
-                ],
-                snapshot_id: PrimitiveArray&lt;Int64&gt;
-                [
-                  3051729675574597004,
-                  3055729675574597004,
-                ],
-                parent_id: PrimitiveArray&lt;Int64&gt;
-                [
-                  null,
-                  3051729675574597004,
-                ],
-                operation: StringArray
-                [
-                  "append",
-                  "append",
-                ],
-                manifest_list: (skipped),
-                summary: MapArray
-                [
-                  StructArray
-                -- validity: 
-                [
-                ]
-                [
-                -- child 0: "keys" (Utf8)
-                StringArray
-                [
-                ]
-                -- child 1: "values" (Utf8)
-                StringArray
-                [
-                ]
-                ],
-                  StructArray
-                -- validity: 
-                [
-                ]
-                [
-                -- child 0: "keys" (Utf8)
-                StringArray
-                [
-                ]
-                -- child 1: "values" (Utf8)
-                StringArray
-                [
-                ]
-                ],
-                ]"#</span>]],
-            <span class="kw-2">&amp;</span>[<span class="string">"manifest_list"</span>],
-            <span class="prelude-val">Some</span>(<span class="string">"committed_at"</span>),
-        );
-    }
-
     <span class="attr">#[tokio::test]
     </span><span class="kw">async fn </span>test_manifests_table() {
         <span class="kw">let </span><span class="kw-2">mut </span>fixture = TableTestFixture::new();
diff --git a/api/src/iceberg/inspect/metadata_table.rs.html b/api/src/iceberg/inspect/metadata_table.rs.html
new file mode 100644
index 00000000..2462d1d7
--- /dev/null
+++ b/api/src/iceberg/inspect/metadata_table.rs.html
@@ -0,0 +1,199 @@
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `crates/iceberg/src/inspect/metadata_table.rs`."><title>metadata_table.rs - source</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd. [...]
+<a href="#2" id="2">2</a>
+<a href="#3" id="3">3</a>
+<a href="#4" id="4">4</a>
+<a href="#5" id="5">5</a>
+<a href="#6" id="6">6</a>
+<a href="#7" id="7">7</a>
+<a href="#8" id="8">8</a>
+<a href="#9" id="9">9</a>
+<a href="#10" id="10">10</a>
+<a href="#11" id="11">11</a>
+<a href="#12" id="12">12</a>
+<a href="#13" id="13">13</a>
+<a href="#14" id="14">14</a>
+<a href="#15" id="15">15</a>
+<a href="#16" id="16">16</a>
+<a href="#17" id="17">17</a>
+<a href="#18" id="18">18</a>
+<a href="#19" id="19">19</a>
+<a href="#20" id="20">20</a>
+<a href="#21" id="21">21</a>
+<a href="#22" id="22">22</a>
+<a href="#23" id="23">23</a>
+<a href="#24" id="24">24</a>
+<a href="#25" id="25">25</a>
+<a href="#26" id="26">26</a>
+<a href="#27" id="27">27</a>
+<a href="#28" id="28">28</a>
+<a href="#29" id="29">29</a>
+<a href="#30" id="30">30</a>
+<a href="#31" id="31">31</a>
+<a href="#32" id="32">32</a>
+<a href="#33" id="33">33</a>
+<a href="#34" id="34">34</a>
+<a href="#35" id="35">35</a>
+<a href="#36" id="36">36</a>
+<a href="#37" id="37">37</a>
+<a href="#38" id="38">38</a>
+<a href="#39" id="39">39</a>
+<a href="#40" id="40">40</a>
+<a href="#41" id="41">41</a>
+<a href="#42" id="42">42</a>
+<a href="#43" id="43">43</a>
+<a href="#44" id="44">44</a>
+<a href="#45" id="45">45</a>
+<a href="#46" id="46">46</a>
+<a href="#47" id="47">47</a>
+<a href="#48" id="48">48</a>
+<a href="#49" id="49">49</a>
+<a href="#50" id="50">50</a>
+<a href="#51" id="51">51</a>
+<a href="#52" id="52">52</a>
+<a href="#53" id="53">53</a>
+<a href="#54" id="54">54</a>
+<a href="#55" id="55">55</a>
+<a href="#56" id="56">56</a>
+<a href="#57" id="57">57</a>
+<a href="#58" id="58">58</a>
+<a href="#59" id="59">59</a>
+<a href="#60" id="60">60</a>
+<a href="#61" id="61">61</a>
+<a href="#62" id="62">62</a>
+<a href="#63" id="63">63</a>
+<a href="#64" id="64">64</a>
+<a href="#65" id="65">65</a>
+<a href="#66" id="66">66</a>
+<a href="#67" id="67">67</a>
+<a href="#68" id="68">68</a>
+<a href="#69" id="69">69</a>
+<a href="#70" id="70">70</a>
+<a href="#71" id="71">71</a>
+<a href="#72" id="72">72</a>
+<a href="#73" id="73">73</a>
+<a href="#74" id="74">74</a>
+<a href="#75" id="75">75</a>
+<a href="#76" id="76">76</a>
+<a href="#77" id="77">77</a>
+<a href="#78" id="78">78</a>
+<a href="#79" id="79">79</a>
+<a href="#80" id="80">80</a>
+<a href="#81" id="81">81</a>
+<a href="#82" id="82">82</a>
+<a href="#83" id="83">83</a>
+<a href="#84" id="84">84</a>
+<a href="#85" id="85">85</a>
+<a href="#86" id="86">86</a>
+<a href="#87" id="87">87</a>
+<a href="#88" id="88">88</a>
+<a href="#89" id="89">89</a>
+<a href="#90" id="90">90</a>
+<a href="#91" id="91">91</a>
+<a href="#92" id="92">92</a>
+<a href="#93" id="93">93</a>
+<a href="#94" id="94">94</a>
+<a href="#95" id="95">95</a>
+<a href="#96" id="96">96</a>
+<a href="#97" id="97">97</a>
+<a href="#98" id="98">98</a>
+<a href="#99" id="99">99</a>
+</pre></div><pre class="rust"><code><span class="comment">// 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.
+
+</span><span class="kw">use super</span>::{ManifestsTable, SnapshotsTable};
+<span class="kw">use </span><span class="kw">crate</span>::table::Table;
+
+<span class="doccomment">/// Metadata table is used to inspect a table's history, snapshots, and other metadata as a table.
+///
+/// References:
+/// - &lt;https://github.com/apache/iceberg/blob/ac865e334e143dfd9e33011d8cf710b46d91f1e5/core/src/main/java/org/apache/iceberg/MetadataTableType.java#L23-L39&gt;
+/// - &lt;https://iceberg.apache.org/docs/latest/spark-queries/#querying-with-sql&gt;
+/// - &lt;https://py.iceberg.apache.org/api/#inspecting-tables&gt;
+</span><span class="attr">#[derive(Debug)]
+</span><span class="kw">pub struct </span>MetadataTable(Table);
+
+<span class="kw">impl </span>MetadataTable {
+    <span class="doccomment">/// Creates a new metadata scan.
+    </span><span class="kw">pub fn </span>new(table: Table) -&gt; <span class="self">Self </span>{
+        <span class="self">Self</span>(table)
+    }
+
+    <span class="doccomment">/// Get the snapshots table.
+    </span><span class="kw">pub fn </span>snapshots(<span class="kw-2">&amp;</span><span class="self">self</span>) -&gt; SnapshotsTable {
+        SnapshotsTable::new(<span class="kw-2">&amp;</span><span class="self">self</span>.<span class="number">0</span>)
+    }
+
+    <span class="doccomment">/// Get the manifests table.
+    </span><span class="kw">pub fn </span>manifests(<span class="kw-2">&amp;</span><span class="self">self</span>) -&gt; ManifestsTable {
+        ManifestsTable::new(<span class="kw-2">&amp;</span><span class="self">self</span>.<span class="number">0</span>)
+    }
+}
+
+<span class="attr">#[cfg(test)]
+</span><span class="kw">pub mod </span>tests {
+    <span class="kw">use </span>arrow_array::RecordBatch;
+    <span class="kw">use </span>expect_test::Expect;
+    <span class="kw">use </span>itertools::Itertools;
+
+    <span class="doccomment">/// Snapshot testing to check the resulting record batch.
+    ///
+    /// - `expected_schema/data`: put `expect![[""]]` as a placeholder,
+    ///   and then run test with `UPDATE_EXPECT=1 cargo test` to automatically update the result,
+    ///   or use rust-analyzer (see [video](https://github.com/rust-analyzer/expect-test)).
+    ///   Check the doc of [`expect_test`] for more details.
+    /// - `ignore_check_columns`: Some columns are not stable, so we can skip them.
+    /// - `sort_column`: The order of the data might be non-deterministic, so we can sort it by a column.
+    </span><span class="kw">pub fn </span>check_record_batch(
+        record_batch: RecordBatch,
+        expected_schema: Expect,
+        expected_data: Expect,
+        ignore_check_columns: <span class="kw-2">&amp;</span>[<span class="kw-2">&amp;</span>str],
+        sort_column: <span class="prelude-ty">Option</span>&lt;<span class="kw-2">&amp;</span>str&gt;,
+    ) {
+        <span class="kw">let </span><span class="kw-2">mut </span>columns = record_batch.columns().to_vec();
+        <span class="kw">if let </span><span class="prelude-val">Some</span>(sort_column) = sort_column {
+            <span class="kw">let </span>column = record_batch.column_by_name(sort_column).unwrap();
+            <span class="kw">let </span>indices = arrow_ord::sort::sort_to_indices(column, <span class="prelude-val">None</span>, <span class="prelude-val">None</span>).unwrap();
+            columns = columns
+                .iter()
+                .map(|column| arrow_select::take::take(column.as_ref(), <span class="kw-2">&amp;</span>indices, <span class="prelude-val">None</span>).unwrap())
+                .collect_vec();
+        }
+
+        expected_schema.assert_eq(<span class="kw-2">&amp;</span><span class="macro">format!</span>(
+            <span class="string">"{}"</span>,
+            record_batch.schema().fields().iter().format(<span class="string">",\n"</span>)
+        ));
+        expected_data.assert_eq(<span class="kw-2">&amp;</span><span class="macro">format!</span>(
+            <span class="string">"{}"</span>,
+            record_batch
+                .schema()
+                .fields()
+                .iter()
+                .zip_eq(columns)
+                .map(|(field, column)| {
+                    <span class="kw">if </span>ignore_check_columns.contains(<span class="kw-2">&amp;</span>field.name().as_str()) {
+                        <span class="macro">format!</span>(<span class="string">"{}: (skipped)"</span>, field.name())
+                    } <span class="kw">else </span>{
+                        <span class="macro">format!</span>(<span class="string">"{}: {:?}"</span>, field.name(), column)
+                    }
+                })
+                .format(<span class="string">",\n"</span>)
+        ));
+    }
+}
+</code></pre></div></section></main></body></html>
\ No newline at end of file
diff --git a/api/src/iceberg/inspect/mod.rs.html b/api/src/iceberg/inspect/mod.rs.html
new file mode 100644
index 00000000..177cded6
--- /dev/null
+++ b/api/src/iceberg/inspect/mod.rs.html
@@ -0,0 +1,53 @@
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `crates/iceberg/src/inspect/mod.rs`."><title>mod.rs - source</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium- [...]
+<a href="#2" id="2">2</a>
+<a href="#3" id="3">3</a>
+<a href="#4" id="4">4</a>
+<a href="#5" id="5">5</a>
+<a href="#6" id="6">6</a>
+<a href="#7" id="7">7</a>
+<a href="#8" id="8">8</a>
+<a href="#9" id="9">9</a>
+<a href="#10" id="10">10</a>
+<a href="#11" id="11">11</a>
+<a href="#12" id="12">12</a>
+<a href="#13" id="13">13</a>
+<a href="#14" id="14">14</a>
+<a href="#15" id="15">15</a>
+<a href="#16" id="16">16</a>
+<a href="#17" id="17">17</a>
+<a href="#18" id="18">18</a>
+<a href="#19" id="19">19</a>
+<a href="#20" id="20">20</a>
+<a href="#21" id="21">21</a>
+<a href="#22" id="22">22</a>
+<a href="#23" id="23">23</a>
+<a href="#24" id="24">24</a>
+<a href="#25" id="25">25</a>
+<a href="#26" id="26">26</a>
+</pre></div><pre class="rust"><code><span class="comment">// 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.
+
+</span><span class="doccomment">//! Metadata table APIs.
+
+</span><span class="kw">mod </span>manifests;
+<span class="kw">mod </span>metadata_table;
+<span class="kw">mod </span>snapshots;
+
+<span class="kw">pub use </span>manifests::ManifestsTable;
+<span class="kw">pub use </span>metadata_table::<span class="kw-2">*</span>;
+<span class="kw">pub use </span>snapshots::SnapshotsTable;
+</code></pre></div></section></main></body></html>
\ No newline at end of file
diff --git a/api/src/iceberg/inspect/snapshots.rs.html b/api/src/iceberg/inspect/snapshots.rs.html
new file mode 100644
index 00000000..f211ffbe
--- /dev/null
+++ b/api/src/iceberg/inspect/snapshots.rs.html
@@ -0,0 +1,367 @@
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `crates/iceberg/src/inspect/snapshots.rs`."><title>snapshots.rs - source</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,Fira [...]
+<a href="#2" id="2">2</a>
+<a href="#3" id="3">3</a>
+<a href="#4" id="4">4</a>
+<a href="#5" id="5">5</a>
+<a href="#6" id="6">6</a>
+<a href="#7" id="7">7</a>
+<a href="#8" id="8">8</a>
+<a href="#9" id="9">9</a>
+<a href="#10" id="10">10</a>
+<a href="#11" id="11">11</a>
+<a href="#12" id="12">12</a>
+<a href="#13" id="13">13</a>
+<a href="#14" id="14">14</a>
+<a href="#15" id="15">15</a>
+<a href="#16" id="16">16</a>
+<a href="#17" id="17">17</a>
+<a href="#18" id="18">18</a>
+<a href="#19" id="19">19</a>
+<a href="#20" id="20">20</a>
+<a href="#21" id="21">21</a>
+<a href="#22" id="22">22</a>
+<a href="#23" id="23">23</a>
+<a href="#24" id="24">24</a>
+<a href="#25" id="25">25</a>
+<a href="#26" id="26">26</a>
+<a href="#27" id="27">27</a>
+<a href="#28" id="28">28</a>
+<a href="#29" id="29">29</a>
+<a href="#30" id="30">30</a>
+<a href="#31" id="31">31</a>
+<a href="#32" id="32">32</a>
+<a href="#33" id="33">33</a>
+<a href="#34" id="34">34</a>
+<a href="#35" id="35">35</a>
+<a href="#36" id="36">36</a>
+<a href="#37" id="37">37</a>
+<a href="#38" id="38">38</a>
+<a href="#39" id="39">39</a>
+<a href="#40" id="40">40</a>
+<a href="#41" id="41">41</a>
+<a href="#42" id="42">42</a>
+<a href="#43" id="43">43</a>
+<a href="#44" id="44">44</a>
+<a href="#45" id="45">45</a>
+<a href="#46" id="46">46</a>
+<a href="#47" id="47">47</a>
+<a href="#48" id="48">48</a>
+<a href="#49" id="49">49</a>
+<a href="#50" id="50">50</a>
+<a href="#51" id="51">51</a>
+<a href="#52" id="52">52</a>
+<a href="#53" id="53">53</a>
+<a href="#54" id="54">54</a>
+<a href="#55" id="55">55</a>
+<a href="#56" id="56">56</a>
+<a href="#57" id="57">57</a>
+<a href="#58" id="58">58</a>
+<a href="#59" id="59">59</a>
+<a href="#60" id="60">60</a>
+<a href="#61" id="61">61</a>
+<a href="#62" id="62">62</a>
+<a href="#63" id="63">63</a>
+<a href="#64" id="64">64</a>
+<a href="#65" id="65">65</a>
+<a href="#66" id="66">66</a>
+<a href="#67" id="67">67</a>
+<a href="#68" id="68">68</a>
+<a href="#69" id="69">69</a>
+<a href="#70" id="70">70</a>
+<a href="#71" id="71">71</a>
+<a href="#72" id="72">72</a>
+<a href="#73" id="73">73</a>
+<a href="#74" id="74">74</a>
+<a href="#75" id="75">75</a>
+<a href="#76" id="76">76</a>
+<a href="#77" id="77">77</a>
+<a href="#78" id="78">78</a>
+<a href="#79" id="79">79</a>
+<a href="#80" id="80">80</a>
+<a href="#81" id="81">81</a>
+<a href="#82" id="82">82</a>
+<a href="#83" id="83">83</a>
+<a href="#84" id="84">84</a>
+<a href="#85" id="85">85</a>
+<a href="#86" id="86">86</a>
+<a href="#87" id="87">87</a>
+<a href="#88" id="88">88</a>
+<a href="#89" id="89">89</a>
+<a href="#90" id="90">90</a>
+<a href="#91" id="91">91</a>
+<a href="#92" id="92">92</a>
+<a href="#93" id="93">93</a>
+<a href="#94" id="94">94</a>
+<a href="#95" id="95">95</a>
+<a href="#96" id="96">96</a>
+<a href="#97" id="97">97</a>
+<a href="#98" id="98">98</a>
+<a href="#99" id="99">99</a>
+<a href="#100" id="100">100</a>
+<a href="#101" id="101">101</a>
+<a href="#102" id="102">102</a>
+<a href="#103" id="103">103</a>
+<a href="#104" id="104">104</a>
+<a href="#105" id="105">105</a>
+<a href="#106" id="106">106</a>
+<a href="#107" id="107">107</a>
+<a href="#108" id="108">108</a>
+<a href="#109" id="109">109</a>
+<a href="#110" id="110">110</a>
+<a href="#111" id="111">111</a>
+<a href="#112" id="112">112</a>
+<a href="#113" id="113">113</a>
+<a href="#114" id="114">114</a>
+<a href="#115" id="115">115</a>
+<a href="#116" id="116">116</a>
+<a href="#117" id="117">117</a>
+<a href="#118" id="118">118</a>
+<a href="#119" id="119">119</a>
+<a href="#120" id="120">120</a>
+<a href="#121" id="121">121</a>
+<a href="#122" id="122">122</a>
+<a href="#123" id="123">123</a>
+<a href="#124" id="124">124</a>
+<a href="#125" id="125">125</a>
+<a href="#126" id="126">126</a>
+<a href="#127" id="127">127</a>
+<a href="#128" id="128">128</a>
+<a href="#129" id="129">129</a>
+<a href="#130" id="130">130</a>
+<a href="#131" id="131">131</a>
+<a href="#132" id="132">132</a>
+<a href="#133" id="133">133</a>
+<a href="#134" id="134">134</a>
+<a href="#135" id="135">135</a>
+<a href="#136" id="136">136</a>
+<a href="#137" id="137">137</a>
+<a href="#138" id="138">138</a>
+<a href="#139" id="139">139</a>
+<a href="#140" id="140">140</a>
+<a href="#141" id="141">141</a>
+<a href="#142" id="142">142</a>
+<a href="#143" id="143">143</a>
+<a href="#144" id="144">144</a>
+<a href="#145" id="145">145</a>
+<a href="#146" id="146">146</a>
+<a href="#147" id="147">147</a>
+<a href="#148" id="148">148</a>
+<a href="#149" id="149">149</a>
+<a href="#150" id="150">150</a>
+<a href="#151" id="151">151</a>
+<a href="#152" id="152">152</a>
+<a href="#153" id="153">153</a>
+<a href="#154" id="154">154</a>
+<a href="#155" id="155">155</a>
+<a href="#156" id="156">156</a>
+<a href="#157" id="157">157</a>
+<a href="#158" id="158">158</a>
+<a href="#159" id="159">159</a>
+<a href="#160" id="160">160</a>
+<a href="#161" id="161">161</a>
+<a href="#162" id="162">162</a>
+<a href="#163" id="163">163</a>
+<a href="#164" id="164">164</a>
+<a href="#165" id="165">165</a>
+<a href="#166" id="166">166</a>
+<a href="#167" id="167">167</a>
+<a href="#168" id="168">168</a>
+<a href="#169" id="169">169</a>
+<a href="#170" id="170">170</a>
+<a href="#171" id="171">171</a>
+<a href="#172" id="172">172</a>
+<a href="#173" id="173">173</a>
+<a href="#174" id="174">174</a>
+<a href="#175" id="175">175</a>
+<a href="#176" id="176">176</a>
+<a href="#177" id="177">177</a>
+<a href="#178" id="178">178</a>
+<a href="#179" id="179">179</a>
+<a href="#180" id="180">180</a>
+<a href="#181" id="181">181</a>
+<a href="#182" id="182">182</a>
+<a href="#183" id="183">183</a>
+</pre></div><pre class="rust"><code><span class="comment">// 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.
+
+</span><span class="kw">use </span>std::sync::Arc;
+
+<span class="kw">use </span>arrow_array::builder::{MapBuilder, PrimitiveBuilder, StringBuilder};
+<span class="kw">use </span>arrow_array::types::{Int64Type, TimestampMillisecondType};
+<span class="kw">use </span>arrow_array::RecordBatch;
+<span class="kw">use </span>arrow_schema::{DataType, Field, Schema, TimeUnit};
+
+<span class="kw">use </span><span class="kw">crate</span>::table::Table;
+<span class="kw">use </span><span class="kw">crate</span>::Result;
+
+<span class="doccomment">/// Snapshots table.
+</span><span class="kw">pub struct </span>SnapshotsTable&lt;<span class="lifetime">'a</span>&gt; {
+    table: <span class="kw-2">&amp;</span><span class="lifetime">'a </span>Table,
+}
+
+<span class="kw">impl</span>&lt;<span class="lifetime">'a</span>&gt; SnapshotsTable&lt;<span class="lifetime">'a</span>&gt; {
+    <span class="doccomment">/// Create a new Snapshots table instance.
+    </span><span class="kw">pub fn </span>new(table: <span class="kw-2">&amp;</span><span class="lifetime">'a </span>Table) -&gt; <span class="self">Self </span>{
+        <span class="self">Self </span>{ table }
+    }
+
+    <span class="doccomment">/// Returns the schema of the snapshots table.
+    </span><span class="kw">pub fn </span>schema(<span class="kw-2">&amp;</span><span class="self">self</span>) -&gt; Schema {
+        Schema::new(<span class="macro">vec!</span>[
+            Field::new(
+                <span class="string">"committed_at"</span>,
+                DataType::Timestamp(TimeUnit::Millisecond, <span class="prelude-val">Some</span>(<span class="string">"+00:00"</span>.into())),
+                <span class="bool-val">false</span>,
+            ),
+            Field::new(<span class="string">"snapshot_id"</span>, DataType::Int64, <span class="bool-val">false</span>),
+            Field::new(<span class="string">"parent_id"</span>, DataType::Int64, <span class="bool-val">true</span>),
+            Field::new(<span class="string">"operation"</span>, DataType::Utf8, <span class="bool-val">false</span>),
+            Field::new(<span class="string">"manifest_list"</span>, DataType::Utf8, <span class="bool-val">false</span>),
+            Field::new(
+                <span class="string">"summary"</span>,
+                DataType::Map(
+                    Arc::new(Field::new(
+                        <span class="string">"entries"</span>,
+                        DataType::Struct(
+                            <span class="macro">vec!</span>[
+                                Field::new(<span class="string">"keys"</span>, DataType::Utf8, <span class="bool-val">false</span>),
+                                Field::new(<span class="string">"values"</span>, DataType::Utf8, <span class="bool-val">true</span>),
+                            ]
+                            .into(),
+                        ),
+                        <span class="bool-val">false</span>,
+                    )),
+                    <span class="bool-val">false</span>,
+                ),
+                <span class="bool-val">false</span>,
+            ),
+        ])
+    }
+
+    <span class="doccomment">/// Scans the snapshots table.
+    </span><span class="kw">pub fn </span>scan(<span class="kw-2">&amp;</span><span class="self">self</span>) -&gt; <span class="prelude-ty">Result</span>&lt;RecordBatch&gt; {
+        <span class="kw">let </span><span class="kw-2">mut </span>committed_at =
+            PrimitiveBuilder::&lt;TimestampMillisecondType&gt;::new().with_timezone(<span class="string">"+00:00"</span>);
+        <span class="kw">let </span><span class="kw-2">mut </span>snapshot_id = PrimitiveBuilder::&lt;Int64Type&gt;::new();
+        <span class="kw">let </span><span class="kw-2">mut </span>parent_id = PrimitiveBuilder::&lt;Int64Type&gt;::new();
+        <span class="kw">let </span><span class="kw-2">mut </span>operation = StringBuilder::new();
+        <span class="kw">let </span><span class="kw-2">mut </span>manifest_list = StringBuilder::new();
+        <span class="kw">let </span><span class="kw-2">mut </span>summary = MapBuilder::new(<span class="prelude-val">None</span>, StringBuilder::new(), StringBuilder::new());
+
+        <span class="kw">for </span>snapshot <span class="kw">in </span><span class="self">self</span>.table.metadata().snapshots() {
+            committed_at.append_value(snapshot.timestamp_ms());
+            snapshot_id.append_value(snapshot.snapshot_id());
+            parent_id.append_option(snapshot.parent_snapshot_id());
+            manifest_list.append_value(snapshot.manifest_list());
+            operation.append_value(snapshot.summary().operation.as_str());
+            <span class="kw">for </span>(key, value) <span class="kw">in </span><span class="kw-2">&amp;</span>snapshot.summary().additional_properties {
+                summary.keys().append_value(key);
+                summary.values().append_value(value);
+            }
+            summary.append(<span class="bool-val">true</span>)<span class="question-mark">?</span>;
+        }
+
+        <span class="prelude-val">Ok</span>(RecordBatch::try_new(Arc::new(<span class="self">self</span>.schema()), <span class="macro">vec!</span>[
+            Arc::new(committed_at.finish()),
+            Arc::new(snapshot_id.finish()),
+            Arc::new(parent_id.finish()),
+            Arc::new(operation.finish()),
+            Arc::new(manifest_list.finish()),
+            Arc::new(summary.finish()),
+        ])<span class="question-mark">?</span>)
+    }
+}
+
+<span class="attr">#[cfg(test)]
+</span><span class="kw">mod </span>tests {
+    <span class="kw">use </span>expect_test::expect;
+
+    <span class="kw">use </span><span class="kw">crate</span>::inspect::metadata_table::tests::check_record_batch;
+    <span class="kw">use </span><span class="kw">crate</span>::scan::tests::TableTestFixture;
+
+    <span class="attr">#[test]
+    </span><span class="kw">fn </span>test_snapshots_table() {
+        <span class="kw">let </span>table = TableTestFixture::new().table;
+        <span class="kw">let </span>record_batch = table.metadata_table().snapshots().scan().unwrap();
+        check_record_batch(
+            record_batch,
+            <span class="macro">expect!</span>[[<span class="string">r#"
+                Field { name: "committed_at", data_type: Timestamp(Millisecond, Some("+00:00")), nullable: false, dict_id: 0, dict_is_ordered: false, metadata: {} },
+                Field { name: "snapshot_id", data_type: Int64, nullable: false, dict_id: 0, dict_is_ordered: false, metadata: {} },
+                Field { name: "parent_id", data_type: Int64, nullable: true, dict_id: 0, dict_is_ordered: false, metadata: {} },
+                Field { name: "operation", data_type: Utf8, nullable: false, dict_id: 0, dict_is_ordered: false, metadata: {} },
+                Field { name: "manifest_list", data_type: Utf8, nullable: false, dict_id: 0, dict_is_ordered: false, metadata: {} },
+                Field { name: "summary", data_type: Map(Field { name: "entries", data_type: Struct([Field { name: "keys", data_type: Utf8, nullable: false, dict_id: 0, dict_is_ordered: false, metadata: {} }, Field { name: "values", data_type: Utf8, nullable: true, dict_id: 0, dict_is_ordered: false, metadata: {} }]), nullable: false, dict_id: 0, dict_is_ordered: false, metadata: {} }, false), nullable: false, dict_id: 0, dict_is_ordered: false, metadata: {} }"#</span>]],
+            <span class="macro">expect!</span>[[<span class="string">r#"
+                committed_at: PrimitiveArray&lt;Timestamp(Millisecond, Some("+00:00"))&gt;
+                [
+                  2018-01-04T21:22:35.770+00:00,
+                  2019-04-12T20:29:15.770+00:00,
+                ],
+                snapshot_id: PrimitiveArray&lt;Int64&gt;
+                [
+                  3051729675574597004,
+                  3055729675574597004,
+                ],
+                parent_id: PrimitiveArray&lt;Int64&gt;
+                [
+                  null,
+                  3051729675574597004,
+                ],
+                operation: StringArray
+                [
+                  "append",
+                  "append",
+                ],
+                manifest_list: (skipped),
+                summary: MapArray
+                [
+                  StructArray
+                -- validity: 
+                [
+                ]
+                [
+                -- child 0: "keys" (Utf8)
+                StringArray
+                [
+                ]
+                -- child 1: "values" (Utf8)
+                StringArray
+                [
+                ]
+                ],
+                  StructArray
+                -- validity: 
+                [
+                ]
+                [
+                -- child 0: "keys" (Utf8)
+                StringArray
+                [
+                ]
+                -- child 1: "values" (Utf8)
+                StringArray
+                [
+                ]
+                ],
+                ]"#</span>]],
+            <span class="kw-2">&amp;</span>[<span class="string">"manifest_list"</span>],
+            <span class="prelude-val">Some</span>(<span class="string">"committed_at"</span>),
+        );
+    }
+}
+</code></pre></div></section></main></body></html>
\ No newline at end of file
diff --git a/api/src/iceberg/lib.rs.html b/api/src/iceberg/lib.rs.html
index 4dcbce58..03c32ed1 100644
--- a/api/src/iceberg/lib.rs.html
+++ b/api/src/iceberg/lib.rs.html
@@ -162,7 +162,7 @@
 <span class="kw">pub mod </span>io;
 <span class="kw">pub mod </span>spec;
 
-<span class="kw">pub mod </span>metadata_scan;
+<span class="kw">pub mod </span>inspect;
 <span class="kw">pub mod </span>scan;
 
 <span class="kw">pub mod </span>expr;
diff --git a/api/src/iceberg/table.rs.html b/api/src/iceberg/table.rs.html
index 93f6b4b4..a30ff4f3 100644
--- a/api/src/iceberg/table.rs.html
+++ b/api/src/iceberg/table.rs.html
@@ -401,9 +401,9 @@
 </span><span class="kw">use </span>std::sync::Arc;
 
 <span class="kw">use </span><span class="kw">crate</span>::arrow::ArrowReaderBuilder;
+<span class="kw">use </span><span class="kw">crate</span>::inspect::MetadataTable;
 <span class="kw">use </span><span class="kw">crate</span>::io::object_cache::ObjectCache;
 <span class="kw">use </span><span class="kw">crate</span>::io::FileIO;
-<span class="kw">use </span><span class="kw">crate</span>::metadata_scan::MetadataTable;
 <span class="kw">use </span><span class="kw">crate</span>::scan::TableScanBuilder;
 <span class="kw">use </span><span class="kw">crate</span>::spec::{TableMetadata, TableMetadataRef};
 <span class="kw">use crate</span>::{Error, ErrorKind, <span class="prelude-ty">Result</span>, TableIdent};
diff --git a/api/trait.impl/core/fmt/trait.Debug.js b/api/trait.impl/core/fmt/trait.Debug.js
index 68a3912b..a3760d0f 100644
--- a/api/trait.impl/core/fmt/trait.Debug.js
+++ b/api/trait.impl/core/fmt/trait.Debug.js
@@ -1,5 +1,5 @@
 (function() {var implementors = {
-"iceberg":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/fmt/trait.Debug.html\" title=\"trait core::fmt::Debug\">Debug</a> for <a class=\"enum\" href=\"iceberg/enum.ErrorKind.html\" title=\"enum iceberg::ErrorKind\">ErrorKind</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/fmt/trait.Debug.html\" title=\"trait core::fmt::Debug\">Debug</a> for <a class=\"enum\" href=\"iceberg/enum.TableRequirement.html\" title=\"enum iceberg::TableReq [...]
+"iceberg":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/fmt/trait.Debug.html\" title=\"trait core::fmt::Debug\">Debug</a> for <a class=\"enum\" href=\"iceberg/enum.ErrorKind.html\" title=\"enum iceberg::ErrorKind\">ErrorKind</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/fmt/trait.Debug.html\" title=\"trait core::fmt::Debug\">Debug</a> for <a class=\"enum\" href=\"iceberg/enum.TableRequirement.html\" title=\"enum iceberg::TableReq [...]
 "iceberg_catalog_glue":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/fmt/trait.Debug.html\" title=\"trait core::fmt::Debug\">Debug</a> for <a class=\"struct\" href=\"iceberg_catalog_glue/struct.GlueCatalog.html\" title=\"struct iceberg_catalog_glue::GlueCatalog\">GlueCatalog</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/fmt/trait.Debug.html\" title=\"trait core::fmt::Debug\">Debug</a> for <a class=\"struct\" href=\"iceberg_catalo [...]
 "iceberg_catalog_hms":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/fmt/trait.Debug.html\" title=\"trait core::fmt::Debug\">Debug</a> for <a class=\"enum\" href=\"iceberg_catalog_hms/enum.HmsThriftTransport.html\" title=\"enum iceberg_catalog_hms::HmsThriftTransport\">HmsThriftTransport</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/fmt/trait.Debug.html\" title=\"trait core::fmt::Debug\">Debug</a> for <a class=\"struct\" href=\"ic [...]
 "iceberg_catalog_memory":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/fmt/trait.Debug.html\" title=\"trait core::fmt::Debug\">Debug</a> for <a class=\"struct\" href=\"iceberg_catalog_memory/struct.MemoryCatalog.html\" title=\"struct iceberg_catalog_memory::MemoryCatalog\">MemoryCatalog</a>"]],
diff --git a/api/trait.impl/core/marker/trait.Freeze.js b/api/trait.impl/core/marker/trait.Freeze.js
index 04d4392f..d846b4b2 100644
--- a/api/trait.impl/core/marker/trait.Freeze.js
+++ b/api/trait.impl/core/marker/trait.Freeze.js
@@ -1,5 +1,5 @@
 (function() {var implementors = {
-"iceberg":[["impl !<a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/marker/trait.Freeze.html\" title=\"trait core::marker::Freeze\">Freeze</a> for <a class=\"enum\" href=\"iceberg/enum.TableUpdate.html\" title=\"enum iceberg::TableUpdate\">TableUpdate</a>",1,["iceberg::catalog::TableUpdate"]],["impl !<a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/marker/trait.Freeze.html\" title=\"trait core::marker::Freeze\">Freeze</a> for <a class=\"enum\" href=\"icebe [...]
+"iceberg":[["impl !<a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/marker/trait.Freeze.html\" title=\"trait core::marker::Freeze\">Freeze</a> for <a class=\"enum\" href=\"iceberg/enum.TableUpdate.html\" title=\"enum iceberg::TableUpdate\">TableUpdate</a>",1,["iceberg::catalog::TableUpdate"]],["impl !<a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/marker/trait.Freeze.html\" title=\"trait core::marker::Freeze\">Freeze</a> for <a class=\"enum\" href=\"icebe [...]
 "iceberg_catalog_glue":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/marker/trait.Freeze.html\" title=\"trait core::marker::Freeze\">Freeze</a> for <a class=\"struct\" href=\"iceberg_catalog_glue/struct.GlueCatalog.html\" title=\"struct iceberg_catalog_glue::GlueCatalog\">GlueCatalog</a>",1,["iceberg_catalog_glue::catalog::GlueCatalog"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/marker/trait.Freeze.html\" title=\"trait core::marker [...]
 "iceberg_catalog_hms":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/marker/trait.Freeze.html\" title=\"trait core::marker::Freeze\">Freeze</a> for <a class=\"enum\" href=\"iceberg_catalog_hms/enum.HmsThriftTransport.html\" title=\"enum iceberg_catalog_hms::HmsThriftTransport\">HmsThriftTransport</a>",1,["iceberg_catalog_hms::catalog::HmsThriftTransport"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/marker/trait.Freeze.html\" title=\" [...]
 "iceberg_catalog_memory":[["impl !<a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/marker/trait.Freeze.html\" title=\"trait core::marker::Freeze\">Freeze</a> for <a class=\"struct\" href=\"iceberg_catalog_memory/struct.MemoryCatalog.html\" title=\"struct iceberg_catalog_memory::MemoryCatalog\">MemoryCatalog</a>",1,["iceberg_catalog_memory::catalog::MemoryCatalog"]]],
diff --git a/api/trait.impl/core/marker/trait.Send.js b/api/trait.impl/core/marker/trait.Send.js
index 52463220..e445ba41 100644
--- a/api/trait.impl/core/marker/trait.Send.js
+++ b/api/trait.impl/core/marker/trait.Send.js
@@ -1,5 +1,5 @@
 (function() {var implementors = {
-"iceberg":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/marker/trait.Send.html\" title=\"trait core::marker::Send\">Send</a> for <a class=\"enum\" href=\"iceberg/enum.ErrorKind.html\" title=\"enum iceberg::ErrorKind\">ErrorKind</a>",1,["iceberg::error::ErrorKind"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/marker/trait.Send.html\" title=\"trait core::marker::Send\">Send</a> for <a class=\"enum\" href=\"iceberg/enum.TableRequirement [...]
+"iceberg":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/marker/trait.Send.html\" title=\"trait core::marker::Send\">Send</a> for <a class=\"enum\" href=\"iceberg/enum.ErrorKind.html\" title=\"enum iceberg::ErrorKind\">ErrorKind</a>",1,["iceberg::error::ErrorKind"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/marker/trait.Send.html\" title=\"trait core::marker::Send\">Send</a> for <a class=\"enum\" href=\"iceberg/enum.TableRequirement [...]
 "iceberg_catalog_glue":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/marker/trait.Send.html\" title=\"trait core::marker::Send\">Send</a> for <a class=\"struct\" href=\"iceberg_catalog_glue/struct.GlueCatalog.html\" title=\"struct iceberg_catalog_glue::GlueCatalog\">GlueCatalog</a>",1,["iceberg_catalog_glue::catalog::GlueCatalog"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/marker/trait.Send.html\" title=\"trait core::marker::Send\" [...]
 "iceberg_catalog_hms":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/marker/trait.Send.html\" title=\"trait core::marker::Send\">Send</a> for <a class=\"enum\" href=\"iceberg_catalog_hms/enum.HmsThriftTransport.html\" title=\"enum iceberg_catalog_hms::HmsThriftTransport\">HmsThriftTransport</a>",1,["iceberg_catalog_hms::catalog::HmsThriftTransport"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/marker/trait.Send.html\" title=\"trait co [...]
 "iceberg_catalog_memory":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/marker/trait.Send.html\" title=\"trait core::marker::Send\">Send</a> for <a class=\"struct\" href=\"iceberg_catalog_memory/struct.MemoryCatalog.html\" title=\"struct iceberg_catalog_memory::MemoryCatalog\">MemoryCatalog</a>",1,["iceberg_catalog_memory::catalog::MemoryCatalog"]]],
diff --git a/api/trait.impl/core/marker/trait.Sync.js b/api/trait.impl/core/marker/trait.Sync.js
index 313ad208..0075c249 100644
--- a/api/trait.impl/core/marker/trait.Sync.js
+++ b/api/trait.impl/core/marker/trait.Sync.js
@@ -1,5 +1,5 @@
 (function() {var implementors = {
-"iceberg":[["impl !<a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/marker/trait.Sync.html\" title=\"trait core::marker::Sync\">Sync</a> for <a class=\"struct\" href=\"iceberg/writer/file_writer/struct.ParquetWriter.html\" title=\"struct iceberg::writer::file_writer::ParquetWriter\">ParquetWriter</a>",1,["iceberg::writer::file_writer::parquet_writer::ParquetWriter"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/marker/trait.Sync.html\" title=\"t [...]
+"iceberg":[["impl !<a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/marker/trait.Sync.html\" title=\"trait core::marker::Sync\">Sync</a> for <a class=\"struct\" href=\"iceberg/writer/file_writer/struct.ParquetWriter.html\" title=\"struct iceberg::writer::file_writer::ParquetWriter\">ParquetWriter</a>",1,["iceberg::writer::file_writer::parquet_writer::ParquetWriter"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/marker/trait.Sync.html\" title=\"t [...]
 "iceberg_catalog_glue":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/marker/trait.Sync.html\" title=\"trait core::marker::Sync\">Sync</a> for <a class=\"struct\" href=\"iceberg_catalog_glue/struct.GlueCatalog.html\" title=\"struct iceberg_catalog_glue::GlueCatalog\">GlueCatalog</a>",1,["iceberg_catalog_glue::catalog::GlueCatalog"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/marker/trait.Sync.html\" title=\"trait core::marker::Sync\" [...]
 "iceberg_catalog_hms":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/marker/trait.Sync.html\" title=\"trait core::marker::Sync\">Sync</a> for <a class=\"enum\" href=\"iceberg_catalog_hms/enum.HmsThriftTransport.html\" title=\"enum iceberg_catalog_hms::HmsThriftTransport\">HmsThriftTransport</a>",1,["iceberg_catalog_hms::catalog::HmsThriftTransport"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/marker/trait.Sync.html\" title=\"trait co [...]
 "iceberg_catalog_memory":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/marker/trait.Sync.html\" title=\"trait core::marker::Sync\">Sync</a> for <a class=\"struct\" href=\"iceberg_catalog_memory/struct.MemoryCatalog.html\" title=\"struct iceberg_catalog_memory::MemoryCatalog\">MemoryCatalog</a>",1,["iceberg_catalog_memory::catalog::MemoryCatalog"]]],
diff --git a/api/trait.impl/core/marker/trait.Unpin.js b/api/trait.impl/core/marker/trait.Unpin.js
index ef07313e..5c184d02 100644
--- a/api/trait.impl/core/marker/trait.Unpin.js
+++ b/api/trait.impl/core/marker/trait.Unpin.js
@@ -1,5 +1,5 @@
 (function() {var implementors = {
-"iceberg":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/marker/trait.Unpin.html\" title=\"trait core::marker::Unpin\">Unpin</a> for <a class=\"enum\" href=\"iceberg/enum.ErrorKind.html\" title=\"enum iceberg::ErrorKind\">ErrorKind</a>",1,["iceberg::error::ErrorKind"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/marker/trait.Unpin.html\" title=\"trait core::marker::Unpin\">Unpin</a> for <a class=\"enum\" href=\"iceberg/enum.TableRequi [...]
+"iceberg":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/marker/trait.Unpin.html\" title=\"trait core::marker::Unpin\">Unpin</a> for <a class=\"enum\" href=\"iceberg/enum.ErrorKind.html\" title=\"enum iceberg::ErrorKind\">ErrorKind</a>",1,["iceberg::error::ErrorKind"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/marker/trait.Unpin.html\" title=\"trait core::marker::Unpin\">Unpin</a> for <a class=\"enum\" href=\"iceberg/enum.TableRequi [...]
 "iceberg_catalog_glue":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/marker/trait.Unpin.html\" title=\"trait core::marker::Unpin\">Unpin</a> for <a class=\"struct\" href=\"iceberg_catalog_glue/struct.GlueCatalog.html\" title=\"struct iceberg_catalog_glue::GlueCatalog\">GlueCatalog</a>",1,["iceberg_catalog_glue::catalog::GlueCatalog"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/marker/trait.Unpin.html\" title=\"trait core::marker::Un [...]
 "iceberg_catalog_hms":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/marker/trait.Unpin.html\" title=\"trait core::marker::Unpin\">Unpin</a> for <a class=\"enum\" href=\"iceberg_catalog_hms/enum.HmsThriftTransport.html\" title=\"enum iceberg_catalog_hms::HmsThriftTransport\">HmsThriftTransport</a>",1,["iceberg_catalog_hms::catalog::HmsThriftTransport"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/marker/trait.Unpin.html\" title=\"trai [...]
 "iceberg_catalog_memory":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/marker/trait.Unpin.html\" title=\"trait core::marker::Unpin\">Unpin</a> for <a class=\"struct\" href=\"iceberg_catalog_memory/struct.MemoryCatalog.html\" title=\"struct iceberg_catalog_memory::MemoryCatalog\">MemoryCatalog</a>",1,["iceberg_catalog_memory::catalog::MemoryCatalog"]]],
diff --git a/api/trait.impl/core/panic/unwind_safe/trait.RefUnwindSafe.js b/api/trait.impl/core/panic/unwind_safe/trait.RefUnwindSafe.js
index cc45f52a..c2e63620 100644
--- a/api/trait.impl/core/panic/unwind_safe/trait.RefUnwindSafe.js
+++ b/api/trait.impl/core/panic/unwind_safe/trait.RefUnwindSafe.js
@@ -1,5 +1,5 @@
 (function() {var implementors = {
-"iceberg":[["impl !<a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/panic/unwind_safe/trait.RefUnwindSafe.html\" title=\"trait core::panic::unwind_safe::RefUnwindSafe\">RefUnwindSafe</a> for <a class=\"struct\" href=\"iceberg/arrow/struct.ArrowReader.html\" title=\"struct iceberg::arrow::ArrowReader\">ArrowReader</a>",1,["iceberg::arrow::reader::ArrowReader"]],["impl !<a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/panic/unwind_safe/trait.RefUnwindSafe.ht [...]
+"iceberg":[["impl !<a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/panic/unwind_safe/trait.RefUnwindSafe.html\" title=\"trait core::panic::unwind_safe::RefUnwindSafe\">RefUnwindSafe</a> for <a class=\"struct\" href=\"iceberg/arrow/struct.ArrowReader.html\" title=\"struct iceberg::arrow::ArrowReader\">ArrowReader</a>",1,["iceberg::arrow::reader::ArrowReader"]],["impl !<a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/panic/unwind_safe/trait.RefUnwindSafe.ht [...]
 "iceberg_catalog_glue":[["impl !<a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/panic/unwind_safe/trait.RefUnwindSafe.html\" title=\"trait core::panic::unwind_safe::RefUnwindSafe\">RefUnwindSafe</a> for <a class=\"struct\" href=\"iceberg_catalog_glue/struct.GlueCatalog.html\" title=\"struct iceberg_catalog_glue::GlueCatalog\">GlueCatalog</a>",1,["iceberg_catalog_glue::catalog::GlueCatalog"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/panic/un [...]
 "iceberg_catalog_hms":[["impl !<a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/panic/unwind_safe/trait.RefUnwindSafe.html\" title=\"trait core::panic::unwind_safe::RefUnwindSafe\">RefUnwindSafe</a> for <a class=\"struct\" href=\"iceberg_catalog_hms/struct.HmsCatalog.html\" title=\"struct iceberg_catalog_hms::HmsCatalog\">HmsCatalog</a>",1,["iceberg_catalog_hms::catalog::HmsCatalog"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/panic/unwind_saf [...]
 "iceberg_catalog_memory":[["impl !<a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/panic/unwind_safe/trait.RefUnwindSafe.html\" title=\"trait core::panic::unwind_safe::RefUnwindSafe\">RefUnwindSafe</a> for <a class=\"struct\" href=\"iceberg_catalog_memory/struct.MemoryCatalog.html\" title=\"struct iceberg_catalog_memory::MemoryCatalog\">MemoryCatalog</a>",1,["iceberg_catalog_memory::catalog::MemoryCatalog"]]],
diff --git a/api/trait.impl/core/panic/unwind_safe/trait.UnwindSafe.js b/api/trait.impl/core/panic/unwind_safe/trait.UnwindSafe.js
index c0b0d0b5..0799efc7 100644
--- a/api/trait.impl/core/panic/unwind_safe/trait.UnwindSafe.js
+++ b/api/trait.impl/core/panic/unwind_safe/trait.UnwindSafe.js
@@ -1,5 +1,5 @@
 (function() {var implementors = {
-"iceberg":[["impl !<a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/panic/unwind_safe/trait.UnwindSafe.html\" title=\"trait core::panic::unwind_safe::UnwindSafe\">UnwindSafe</a> for <a class=\"struct\" href=\"iceberg/arrow/struct.ArrowReader.html\" title=\"struct iceberg::arrow::ArrowReader\">ArrowReader</a>",1,["iceberg::arrow::reader::ArrowReader"]],["impl !<a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/panic/unwind_safe/trait.UnwindSafe.html\" title=\ [...]
+"iceberg":[["impl !<a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/panic/unwind_safe/trait.UnwindSafe.html\" title=\"trait core::panic::unwind_safe::UnwindSafe\">UnwindSafe</a> for <a class=\"struct\" href=\"iceberg/arrow/struct.ArrowReader.html\" title=\"struct iceberg::arrow::ArrowReader\">ArrowReader</a>",1,["iceberg::arrow::reader::ArrowReader"]],["impl !<a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/panic/unwind_safe/trait.UnwindSafe.html\" title=\ [...]
 "iceberg_catalog_glue":[["impl !<a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/panic/unwind_safe/trait.UnwindSafe.html\" title=\"trait core::panic::unwind_safe::UnwindSafe\">UnwindSafe</a> for <a class=\"struct\" href=\"iceberg_catalog_glue/struct.GlueCatalog.html\" title=\"struct iceberg_catalog_glue::GlueCatalog\">GlueCatalog</a>",1,["iceberg_catalog_glue::catalog::GlueCatalog"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/panic/unwind_safe [...]
 "iceberg_catalog_hms":[["impl !<a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/panic/unwind_safe/trait.UnwindSafe.html\" title=\"trait core::panic::unwind_safe::UnwindSafe\">UnwindSafe</a> for <a class=\"struct\" href=\"iceberg_catalog_hms/struct.HmsCatalog.html\" title=\"struct iceberg_catalog_hms::HmsCatalog\">HmsCatalog</a>",1,["iceberg_catalog_hms::catalog::HmsCatalog"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/panic/unwind_safe/trait.U [...]
 "iceberg_catalog_memory":[["impl !<a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/panic/unwind_safe/trait.UnwindSafe.html\" title=\"trait core::panic::unwind_safe::UnwindSafe\">UnwindSafe</a> for <a class=\"struct\" href=\"iceberg_catalog_memory/struct.MemoryCatalog.html\" title=\"struct iceberg_catalog_memory::MemoryCatalog\">MemoryCatalog</a>",1,["iceberg_catalog_memory::catalog::MemoryCatalog"]]],