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 88635dd3 deploy: 5cdd6eb1d6f7352e6da6e63406bd488c7d322858
88635dd3 is described below

commit 88635dd38d2dcb76928e9f98866d1f7722b915e3
Author: liurenjie1024 <[email protected]>
AuthorDate: Mon Mar 31 13:23:15 2025 +0000

    deploy: 5cdd6eb1d6f7352e6da6e63406bd488c7d322858
---
 api/help.html                                  |   2 +-
 api/iceberg/inspect/struct.SnapshotsTable.html |   8 +-
 api/search-index.js                            |   2 +-
 api/search.desc/iceberg/iceberg-desc-0-.js     |   2 +-
 api/settings.html                              |   2 +-
 api/src/iceberg/inspect/snapshots.rs.html      | 144 +++++++++++++++++--------
 6 files changed, 107 insertions(+), 53 deletions(-)

diff --git a/api/help.html b/api/help.html
index 21943ce1..b3855f23 100644
--- a/api/help.html
+++ b/api/help.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="Documentation for 
Rustdoc"><title>Help</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781e4970d388.woff2,SourceCodePro-Regular-5
 [...]
\ 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="Documentation for 
Rustdoc"><title>Help</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781e4970d388.woff2,SourceCodePro-Regular-5
 [...]
\ No newline at end of file
diff --git a/api/iceberg/inspect/struct.SnapshotsTable.html 
b/api/iceberg/inspect/struct.SnapshotsTable.html
index 8d287dba..18284ec6 100644
--- a/api/iceberg/inspect/struct.SnapshotsTable.html
+++ b/api/iceberg/inspect/struct.SnapshotsTable.html
@@ -1,7 +1,7 @@
-<!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#35-108">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#42-72">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#75-107">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;<a class="type" 
href="../scan/type.ArrowRecordBatchStream.html" title="type 
iceberg::scan::ArrowRecordBatch [...]
+<!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#41-135">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#48-79">source</a><h4 
class="code-header">pub fn <a href="#method.schema" 
class="fn">schema</a>(&amp;self) -&gt; <a class="struct" 
href="../spec/struct.Schema.html" title="struct 
iceberg::spec::Schema">Schema</a></h4></section></summary><div 
class="docblock"><p>Returns the iceberg schema of the snapshots t [...]
+</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#82-134">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;<a class="type" 
href="../scan/type.ArrowRecordBatchStream.html" title="type 
iceberg::scan::ArrowRecordBatch [...]
 </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:/ [...]
diff --git a/api/search-index.js b/api/search-index.js
index f104c727..14be72c3 100644
--- a/api/search-index.js
+++ b/api/search-index.js
@@ -1,5 +1,5 @@
 var searchIndex = new Map(JSON.parse('[\
-["iceberg",{"t":"PPPPPKPPPPPFGPPPFFPPPPPPPPPIPPPPPPPPFFFGGPPPFNCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMMOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMMQNNNNNNNNNNNNNNNNNNCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMNNNNNNNNNNNNNNCNNNNNNNNNNNCNMMMOONNNOOONOMNNNNNNONOOMOCOONNNNONCOCMNNNNNNNNNNNNNCCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMMNNNNNNNNNNNNNCOOOOOOOOOOOOOOOOOOOOOOOOOOOOOFFFFKSRRSNNNNNNNNHHHNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMNMNNNMNMHMNNNNNNNNNNNNNNHNNNNNNNNNNNPPPPPPPPFKRGFIPPPPPPPPFP
 [...]
+["iceberg",{"t":"PPPPPKPPPPPFGPPPFFPPPPPPPPPIPPPPPPPPFFFGGPPPFNCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMMOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMMQNNNNNNNNNNNNNNNNNNCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMNNNNNNNNNNNNNNCNNNNNNNNNNNCNMMMOONNNOOONOMNNNNNNONOOMOCOONNNNONCOCMNNNNNNNNNNNNNCCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMMNNNNNNNNNNNNNCOOOOOOOOOOOOOOOOOOOOOOOOOOOOOFFFFKSRRSNNNNNNNNHHHNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMNMNNNMNMHMNNNNNNNNNNNNNNHNNNNNNNNNNNPPPPPPPPFKRGFIPPPPPPPPFP
 [...]
 
["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 41533b88..d900b73d 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/settings.html b/api/settings.html
index 8bb04340..0b4d7eab 100644
--- a/api/settings.html
+++ b/api/settings.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="Settings 
of 
Rustdoc"><title>Settings</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781e4970d388.woff2,SourceCodePro-Regular-562
 [...]
\ 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="Settings 
of 
Rustdoc"><title>Settings</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781e4970d388.woff2,SourceCodePro-Regular-562
 [...]
\ No newline at end of file
diff --git a/api/src/iceberg/inspect/snapshots.rs.html 
b/api/src/iceberg/inspect/snapshots.rs.html
index 9904f033..213fd592 100644
--- a/api/src/iceberg/inspect/snapshots.rs.html
+++ b/api/src/iceberg/inspect/snapshots.rs.html
@@ -187,6 +187,33 @@
 <a href="#187" id="187">187</a>
 <a href="#188" id="188">188</a>
 <a href="#189" id="189">189</a>
+<a href="#190" id="190">190</a>
+<a href="#191" id="191">191</a>
+<a href="#192" id="192">192</a>
+<a href="#193" id="193">193</a>
+<a href="#194" id="194">194</a>
+<a href="#195" id="195">195</a>
+<a href="#196" id="196">196</a>
+<a href="#197" id="197">197</a>
+<a href="#198" id="198">198</a>
+<a href="#199" id="199">199</a>
+<a href="#200" id="200">200</a>
+<a href="#201" id="201">201</a>
+<a href="#202" id="202">202</a>
+<a href="#203" id="203">203</a>
+<a href="#204" id="204">204</a>
+<a href="#205" id="205">205</a>
+<a href="#206" id="206">206</a>
+<a href="#207" id="207">207</a>
+<a href="#208" id="208">208</a>
+<a href="#209" id="209">209</a>
+<a href="#210" id="210">210</a>
+<a href="#211" id="211">211</a>
+<a href="#212" id="212">212</a>
+<a href="#213" id="213">213</a>
+<a href="#214" id="214">214</a>
+<a href="#215" id="215">215</a>
+<a href="#216" id="216">216</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
@@ -204,15 +231,21 @@
 // specific language governing permissions and limitations
 // under the License.
 
-</span><span class="kw">use </span>std::sync::Arc;
+</span><span class="kw">use </span>std::collections::HashMap;
+<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::builder::{MapBuilder, MapFieldNames, 
PrimitiveBuilder, StringBuilder};
+<span class="kw">use </span>arrow_array::types::{Int64Type, 
TimestampMicrosecondType};
 <span class="kw">use </span>arrow_array::RecordBatch;
-<span class="kw">use </span>arrow_schema::{DataType, Field, Schema, TimeUnit};
+<span class="kw">use </span>arrow_schema::{DataType, Field};
 <span class="kw">use </span>futures::{stream, StreamExt};
+<span class="kw">use </span>parquet::arrow::PARQUET_FIELD_ID_META_KEY;
 
+<span class="kw">use </span><span 
class="kw">crate</span>::arrow::{schema_to_arrow_schema, 
DEFAULT_MAP_FIELD_NAME};
 <span class="kw">use </span><span 
class="kw">crate</span>::scan::ArrowRecordBatchStream;
+<span class="kw">use </span><span class="kw">crate</span>::spec::{
+    MapType, NestedField, PrimitiveType, Type, MAP_KEY_FIELD_NAME, 
MAP_VALUE_FIELD_NAME,
+};
 <span class="kw">use </span><span class="kw">crate</span>::table::Table;
 <span class="kw">use </span><span class="kw">crate</span>::Result;
 
@@ -227,51 +260,72 @@
         <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="doccomment">/// Returns the iceberg 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; <span 
class="kw">crate</span>::spec::Schema {
+        <span class="kw">let </span>fields = <span class="macro">vec!</span>[
+            NestedField::required(
+                <span class="number">1</span>,
                 <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>,
+                Type::Primitive(PrimitiveType::Timestamptz),
             ),
-            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(
+            NestedField::required(<span class="number">2</span>, <span 
class="string">"snapshot_id"</span>, Type::Primitive(PrimitiveType::Long)),
+            NestedField::optional(<span class="number">3</span>, <span 
class="string">"parent_id"</span>, Type::Primitive(PrimitiveType::Long)),
+            NestedField::optional(<span class="number">4</span>, <span 
class="string">"operation"</span>, Type::Primitive(PrimitiveType::String)),
+            NestedField::optional(<span class="number">5</span>, <span 
class="string">"manifest_list"</span>, Type::Primitive(PrimitiveType::String)),
+            NestedField::optional(
+                <span class="number">6</span>,
                 <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(),
-                        ),
+                Type::Map(MapType {
+                    key_field: Arc::new(NestedField::map_key_element(
+                        <span class="number">7</span>,
+                        Type::Primitive(PrimitiveType::String),
+                    )),
+                    value_field: Arc::new(NestedField::map_value_element(
+                        <span class="number">8</span>,
+                        Type::Primitive(PrimitiveType::String),
                         <span class="bool-val">false</span>,
                     )),
-                    <span class="bool-val">false</span>,
-                ),
-                <span class="bool-val">false</span>,
+                }),
             ),
-        ])
+        ];
+        <span class="kw">crate</span>::spec::Schema::builder()
+            .with_fields(fields.into_iter().map(|f| f.into()))
+            .build()
+            .unwrap()
     }
 
     <span class="doccomment">/// Scans the snapshots table.
     </span><span class="kw">pub async fn </span>scan(<span 
class="kw-2">&amp;</span><span class="self">self</span>) -&gt; <span 
class="prelude-ty">Result</span>&lt;ArrowRecordBatchStream&gt; {
+        <span class="kw">let </span>schema = schema_to_arrow_schema(<span 
class="kw-2">&amp;</span><span class="self">self</span>.schema())<span 
class="question-mark">?</span>;
+
         <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>);
+            
PrimitiveBuilder::&lt;TimestampMicrosecondType&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">let </span><span class="kw-2">mut </span>summary = 
MapBuilder::new(
+            <span class="prelude-val">Some</span>(MapFieldNames {
+                entry: DEFAULT_MAP_FIELD_NAME.to_string(),
+                key: MAP_KEY_FIELD_NAME.to_string(),
+                value: MAP_VALUE_FIELD_NAME.to_string(),
+            }),
+            StringBuilder::new(),
+            StringBuilder::new(),
+        )
+        .with_keys_field(Arc::new(
+            Field::new(MAP_KEY_FIELD_NAME, DataType::Utf8, <span 
class="bool-val">false</span>).with_metadata(HashMap::from([(
+                PARQUET_FIELD_ID_META_KEY.to_string(),
+                <span class="string">"7"</span>.to_string(),
+            )])),
+        ))
+        .with_values_field(Arc::new(
+            Field::new(MAP_VALUE_FIELD_NAME, DataType::Utf8, <span 
class="bool-val">true</span>).with_metadata(HashMap::from([
+                (PARQUET_FIELD_ID_META_KEY.to_string(), <span 
class="string">"8"</span>.to_string()),
+            ])),
+        ));
         <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());
+            committed_at.append_value(snapshot.timestamp_ms() * <span 
class="number">1000</span>);
             snapshot_id.append_value(snapshot.snapshot_id());
             parent_id.append_option(snapshot.parent_snapshot_id());
             manifest_list.append_value(snapshot.manifest_list());
@@ -283,7 +337,7 @@
             summary.append(<span class="bool-val">true</span>)<span 
class="question-mark">?</span>;
         }
 
-        <span class="kw">let </span>batch = 
RecordBatch::try_new(Arc::new(<span class="self">self</span>.schema()), <span 
class="macro">vec!</span>[
+        <span class="kw">let </span>batch = 
RecordBatch::try_new(Arc::new(schema), <span class="macro">vec!</span>[
             Arc::new(committed_at.finish()),
             Arc::new(snapshot_id.finish()),
             Arc::new(parent_id.finish()),
@@ -312,14 +366,14 @@
         check_record_batches(
             batch_stream,
             <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>]],
+                Field { name: "committed_at", data_type: 
Timestamp(Microsecond, Some("+00:00")), nullable: false, dict_id: 0, 
dict_is_ordered: false, metadata: {"PARQUET:field_id": "1"} },
+                Field { name: "snapshot_id", data_type: Int64, nullable: 
false, dict_id: 0, dict_is_ordered: false, metadata: {"PARQUET:field_id": "2"} 
},
+                Field { name: "parent_id", data_type: Int64, nullable: true, 
dict_id: 0, dict_is_ordered: false, metadata: {"PARQUET:field_id": "3"} },
+                Field { name: "operation", data_type: Utf8, nullable: true, 
dict_id: 0, dict_is_ordered: false, metadata: {"PARQUET:field_id": "4"} },
+                Field { name: "manifest_list", data_type: Utf8, nullable: 
true, dict_id: 0, dict_is_ordered: false, metadata: {"PARQUET:field_id": "5"} },
+                Field { name: "summary", data_type: Map(Field { name: 
"key_value", data_type: Struct([Field { name: "key", data_type: Utf8, nullable: 
false, dict_id: 0, dict_is_ordered: false, metadata: {"PARQUET:field_id": "7"} 
}, Field { name: "value", data_type: Utf8, nullable: true, dict_id: 0, 
dict_is_ordered: false, metadata: {"PARQUET:field_id": "8"} }]), nullable: 
false, dict_id: 0, dict_is_ordered: false, metadata: {} }, false), nullable: 
true, dict_id: 0, dict_is_ordered: false [...]
             <span class="macro">expect!</span>[[<span class="string">r#"
-                committed_at: PrimitiveArray&lt;Timestamp(Millisecond, 
Some("+00:00"))&gt;
+                committed_at: PrimitiveArray&lt;Timestamp(Microsecond, 
Some("+00:00"))&gt;
                 [
                   2018-01-04T21:22:35.770+00:00,
                   2019-04-12T20:29:15.770+00:00,
@@ -347,11 +401,11 @@
                 [
                 ]
                 [
-                -- child 0: "keys" (Utf8)
+                -- child 0: "key" (Utf8)
                 StringArray
                 [
                 ]
-                -- child 1: "values" (Utf8)
+                -- child 1: "value" (Utf8)
                 StringArray
                 [
                 ]
@@ -361,11 +415,11 @@
                 [
                 ]
                 [
-                -- child 0: "keys" (Utf8)
+                -- child 0: "key" (Utf8)
                 StringArray
                 [
                 ]
-                -- child 1: "values" (Utf8)
+                -- child 1: "value" (Utf8)
                 StringArray
                 [
                 ]

Reply via email to