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. Can you help me to understand what it means 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: issues-unsubscr...@iceberg.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org --------------------------------------------------------------------- To unsubscribe, e-mail: issues-unsubscr...@iceberg.apache.org For additional commands, e-mail: issues-h...@iceberg.apache.org