liurenjie1024 commented on code in PR #262:
URL: https://github.com/apache/iceberg-rust/pull/262#discussion_r1524080929
##########
crates/iceberg/src/spec/table_metadata.rs:
##########
@@ -275,6 +277,78 @@ impl TableMetadata {
}
}
+/// Manipulating table metadata.
+pub struct TableMetadataBuilder(TableMetadata);
+
+impl TableMetadataBuilder {
+ /// Creates a new table metadata builder from the given table metadata.
+ pub fn new(origin: TableMetadata) -> Self {
+ Self(origin)
+ }
+
+ /// Creates a new table metadata builder from the given table creation.
+ pub fn from_table_creation(table_creation: TableCreation) -> Result<Self> {
+ let TableCreation {
+ name: _,
+ location,
+ schema,
+ partition_spec,
+ sort_order,
+ properties,
+ } = table_creation;
+
+ let table_metadata = TableMetadata {
+ format_version: FormatVersion::V2,
+ table_uuid: Uuid::new_v4(),
+ location: location.ok_or_else(|| {
+ Error::new(
+ ErrorKind::DataInvalid,
+ "Can't create table without location",
+ )
+ })?,
+ last_sequence_number: 0,
+ last_updated_ms: 0,
Review Comment:
This should be updated by current ts.
##########
crates/iceberg/src/spec/table_metadata.rs:
##########
@@ -275,6 +277,78 @@ impl TableMetadata {
}
}
+/// Manipulating table metadata.
+pub struct TableMetadataBuilder(TableMetadata);
+
+impl TableMetadataBuilder {
+ /// Creates a new table metadata builder from the given table metadata.
+ pub fn new(origin: TableMetadata) -> Self {
+ Self(origin)
+ }
+
+ /// Creates a new table metadata builder from the given table creation.
+ pub fn from_table_creation(table_creation: TableCreation) -> Result<Self> {
+ let TableCreation {
+ name: _,
+ location,
+ schema,
+ partition_spec,
+ sort_order,
+ properties,
+ } = table_creation;
+
+ let table_metadata = TableMetadata {
+ format_version: FormatVersion::V2,
+ table_uuid: Uuid::new_v4(),
+ location: location.ok_or_else(|| {
+ Error::new(
+ ErrorKind::DataInvalid,
+ "Can't create table without location",
+ )
+ })?,
+ last_sequence_number: 0,
+ last_updated_ms: 0,
+ last_column_id: 0,
Review Comment:
This should be schema's largest field id.
##########
crates/iceberg/src/spec/table_metadata.rs:
##########
@@ -275,6 +277,78 @@ impl TableMetadata {
}
}
+/// Manipulating table metadata.
+pub struct TableMetadataBuilder(TableMetadata);
+
+impl TableMetadataBuilder {
+ /// Creates a new table metadata builder from the given table metadata.
+ pub fn new(origin: TableMetadata) -> Self {
+ Self(origin)
+ }
+
+ /// Creates a new table metadata builder from the given table creation.
+ pub fn from_table_creation(table_creation: TableCreation) -> Result<Self> {
+ let TableCreation {
+ name: _,
+ location,
+ schema,
+ partition_spec,
+ sort_order,
+ properties,
+ } = table_creation;
+
+ let table_metadata = TableMetadata {
+ format_version: FormatVersion::V2,
+ table_uuid: Uuid::new_v4(),
+ location: location.ok_or_else(|| {
+ Error::new(
+ ErrorKind::DataInvalid,
+ "Can't create table without location",
+ )
+ })?,
+ last_sequence_number: 0,
+ last_updated_ms: 0,
+ last_column_id: 0,
+ schemas: HashMap::from([(0, Arc::new(schema))]),
+ current_schema_id: 0,
+ partition_specs: partition_spec
Review Comment:
This is incorrect, we should bind partition spec to schema.
##########
crates/iceberg/src/spec/table_metadata.rs:
##########
@@ -275,6 +277,78 @@ impl TableMetadata {
}
}
+/// Manipulating table metadata.
+pub struct TableMetadataBuilder(TableMetadata);
+
+impl TableMetadataBuilder {
+ /// Creates a new table metadata builder from the given table metadata.
+ pub fn new(origin: TableMetadata) -> Self {
+ Self(origin)
+ }
+
+ /// Creates a new table metadata builder from the given table creation.
+ pub fn from_table_creation(table_creation: TableCreation) -> Result<Self> {
+ let TableCreation {
+ name: _,
+ location,
+ schema,
+ partition_spec,
+ sort_order,
+ properties,
+ } = table_creation;
+
+ let table_metadata = TableMetadata {
+ format_version: FormatVersion::V2,
+ table_uuid: Uuid::new_v4(),
+ location: location.ok_or_else(|| {
+ Error::new(
+ ErrorKind::DataInvalid,
+ "Can't create table without location",
+ )
+ })?,
+ last_sequence_number: 0,
+ last_updated_ms: 0,
+ last_column_id: 0,
+ schemas: HashMap::from([(0, Arc::new(schema))]),
+ current_schema_id: 0,
+ partition_specs: partition_spec
+ .map(|x| {
+ let partition_spec = PartitionSpecRef::new(x.create_new());
+ HashMap::from([(partition_spec.spec_id, partition_spec)])
+ })
+ .unwrap_or_default(),
+ default_spec_id: 0,
+ last_partition_id: 0,
+ properties,
+ current_snapshot_id: None,
+ snapshots: Default::default(),
+ snapshot_log: vec![],
+ metadata_log: vec![],
+ sort_orders: sort_order
Review Comment:
We should bind to schema.
##########
crates/iceberg/src/spec/table_metadata.rs:
##########
@@ -275,6 +277,78 @@ impl TableMetadata {
}
}
+/// Manipulating table metadata.
+pub struct TableMetadataBuilder(TableMetadata);
+
+impl TableMetadataBuilder {
+ /// Creates a new table metadata builder from the given table metadata.
+ pub fn new(origin: TableMetadata) -> Self {
+ Self(origin)
+ }
+
+ /// Creates a new table metadata builder from the given table creation.
+ pub fn from_table_creation(table_creation: TableCreation) -> Result<Self> {
+ let TableCreation {
+ name: _,
+ location,
+ schema,
+ partition_spec,
+ sort_order,
+ properties,
+ } = table_creation;
+
+ let table_metadata = TableMetadata {
+ format_version: FormatVersion::V2,
+ table_uuid: Uuid::new_v4(),
+ location: location.ok_or_else(|| {
+ Error::new(
+ ErrorKind::DataInvalid,
+ "Can't create table without location",
+ )
+ })?,
+ last_sequence_number: 0,
+ last_updated_ms: 0,
+ last_column_id: 0,
+ schemas: HashMap::from([(0, Arc::new(schema))]),
+ current_schema_id: 0,
Review Comment:
Ditto, this should be schema's id.
##########
crates/iceberg/src/spec/table_metadata.rs:
##########
@@ -275,6 +277,78 @@ impl TableMetadata {
}
}
+/// Manipulating table metadata.
+pub struct TableMetadataBuilder(TableMetadata);
+
+impl TableMetadataBuilder {
+ /// Creates a new table metadata builder from the given table metadata.
+ pub fn new(origin: TableMetadata) -> Self {
+ Self(origin)
+ }
+
+ /// Creates a new table metadata builder from the given table creation.
+ pub fn from_table_creation(table_creation: TableCreation) -> Result<Self> {
+ let TableCreation {
+ name: _,
+ location,
+ schema,
+ partition_spec,
+ sort_order,
+ properties,
+ } = table_creation;
+
+ let table_metadata = TableMetadata {
+ format_version: FormatVersion::V2,
+ table_uuid: Uuid::new_v4(),
+ location: location.ok_or_else(|| {
+ Error::new(
+ ErrorKind::DataInvalid,
+ "Can't create table without location",
+ )
+ })?,
+ last_sequence_number: 0,
+ last_updated_ms: 0,
+ last_column_id: 0,
+ schemas: HashMap::from([(0, Arc::new(schema))]),
Review Comment:
The key should be schema id.
--
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]