ryzhyk commented on code in PR #707:
URL: https://github.com/apache/iceberg-rust/pull/707#discussion_r1849634146
##########
crates/integrations/datafusion/src/table/mod.rs:
##########
@@ -60,14 +66,52 @@ impl IcebergTableProvider {
let schema =
Arc::new(schema_to_arrow_schema(table.metadata().current_schema())?);
- Ok(IcebergTableProvider { table, schema })
+ Ok(IcebergTableProvider {
+ table,
+ snapshot_id: None,
+ schema,
+ })
}
/// Asynchronously tries to construct a new [`IcebergTableProvider`]
/// using the given table. Can be used to create a table provider from an
existing table regardless of the catalog implementation.
pub async fn try_new_from_table(table: Table) -> Result<Self> {
let schema =
Arc::new(schema_to_arrow_schema(table.metadata().current_schema())?);
- Ok(IcebergTableProvider { table, schema })
+ Ok(IcebergTableProvider {
+ table,
+ snapshot_id: None,
+ schema,
+ })
+ }
+
+ /// Asynchronously tries to construct a new [`IcebergTableProvider`]
+ /// using a specific snapshot of the given table. Can be used to create a
table provider from an existing table regardless of the catalog implementation.
+ pub async fn try_new_from_table_snapshot(table: Table, snapshot_id: i64)
-> Result<Self> {
+ let schema_id = table
+ .metadata()
+ .snapshot_by_id(snapshot_id)
+ .ok_or_else(|| {
+ Error::new(
+ ErrorKind::Unexpected,
+ format!(
+ "snapshot id {snapshot_id} not found in table {}",
+ table.identifier().name()
+ ),
+ )
+ })?
+ .schema_id()
Review Comment:
@liurenjie1024 , I am new to Iceberg. What does it mean that a particular
snapshot doesn't have a schema id and why it's ok to use the table's latest
schema in this case (which I think what the `Snapshot::schema` function returns
in this case).
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]