diff --git a/crates/core/src/operations/write/mod.rs b/crates/core/src/operations/write/mod.rs index 49348415b4..22e61d0b1f 100644 --- a/crates/core/src/operations/write/mod.rs +++ b/crates/core/src/operations/write/mod.rs @@ -555,11 +555,13 @@ impl std::future::IntoFuture for WriteBuilder { .apply_column_metadata_to_protocol(&schema_struct)? .move_table_properties_into_features(&configuration); - let schema_action = Action::Metadata(Metadata::try_new( - schema_struct, - partition_columns.clone(), - configuration, - )?); + let mut metadata = Metadata::try_new(schema_struct, partition_columns.clone(), configuration)?; + let existing_metadata_id = snapshot.metadata().id.clone(); + + if !existing_metadata_id.is_empty() { + metadata = metadata.with_table_id(existing_metadata_id); + } + let schema_action = Action::Metadata(metadata); actions.push(schema_action); if current_protocol != &new_protocol { actions.push(new_protocol.into()) diff --git a/crates/core/src/writer/record_batch.rs b/crates/core/src/writer/record_batch.rs index 6328569370..ca0173458c 100644 --- a/crates/core/src/writer/record_batch.rs +++ b/crates/core/src/writer/record_batch.rs @@ -798,8 +798,6 @@ mod tests { table.load().await.expect("Failed to load table"); assert_eq!(table.version(), 0); - let first_metadata_id = table.metadata()?.id.clone(); - let batch = get_record_batch(None, false); let mut writer = RecordBatchWriter::for_table(&table).unwrap(); @@ -839,15 +837,10 @@ mod tests { let new_schema = table.metadata().unwrap().schema().unwrap(); let expected_columns = vec!["id", "value", "modified", "vid", "name"]; let found_columns: Vec<&String> = new_schema.fields().map(|f| f.name()).collect(); - let second_metadata_id = table.metadata()?.id.clone(); assert_eq!( expected_columns, found_columns, "The new table schema does not contain all evolved columns as expected" ); - assert_eq!( - first_metadata_id, second_metadata_id, - "table metadata id change differed between runs" - ) } #[tokio::test]