in crates/iceberg/src/spec/table_metadata.rs [1473:1641]
fn test_table_data_v1() {
let data = r#"
{
"format-version" : 1,
"table-uuid" : "df838b92-0b32-465d-a44e-d39936e538b7",
"location" : "/home/iceberg/warehouse/nyc/taxis",
"last-updated-ms" : 1662532818843,
"last-column-id" : 5,
"schema" : {
"type" : "struct",
"schema-id" : 0,
"fields" : [ {
"id" : 1,
"name" : "vendor_id",
"required" : false,
"type" : "long"
}, {
"id" : 2,
"name" : "trip_id",
"required" : false,
"type" : "long"
}, {
"id" : 3,
"name" : "trip_distance",
"required" : false,
"type" : "float"
}, {
"id" : 4,
"name" : "fare_amount",
"required" : false,
"type" : "double"
}, {
"id" : 5,
"name" : "store_and_fwd_flag",
"required" : false,
"type" : "string"
} ]
},
"partition-spec" : [ {
"name" : "vendor_id",
"transform" : "identity",
"source-id" : 1,
"field-id" : 1000
} ],
"last-partition-id" : 1000,
"default-sort-order-id" : 0,
"sort-orders" : [ {
"order-id" : 0,
"fields" : [ ]
} ],
"properties" : {
"owner" : "root"
},
"current-snapshot-id" : 638933773299822130,
"refs" : {
"main" : {
"snapshot-id" : 638933773299822130,
"type" : "branch"
}
},
"snapshots" : [ {
"snapshot-id" : 638933773299822130,
"timestamp-ms" : 1662532818843,
"sequence-number" : 0,
"summary" : {
"operation" : "append",
"spark.app.id" : "local-1662532784305",
"added-data-files" : "4",
"added-records" : "4",
"added-files-size" : "6001"
},
"manifest-list" : "/home/iceberg/warehouse/nyc/taxis/metadata/snap-638933773299822130-1-7e6760f0-4f6c-4b23-b907-0a5a174e3863.avro",
"schema-id" : 0
} ],
"snapshot-log" : [ {
"timestamp-ms" : 1662532818843,
"snapshot-id" : 638933773299822130
} ],
"metadata-log" : [ {
"timestamp-ms" : 1662532805245,
"metadata-file" : "/home/iceberg/warehouse/nyc/taxis/metadata/00000-8a62c37d-4573-4021-952a-c0baef7d21d0.metadata.json"
} ]
}
"#;
let schema = Schema::builder()
.with_fields(vec![
Arc::new(NestedField::optional(
1,
"vendor_id",
Type::Primitive(PrimitiveType::Long),
)),
Arc::new(NestedField::optional(
2,
"trip_id",
Type::Primitive(PrimitiveType::Long),
)),
Arc::new(NestedField::optional(
3,
"trip_distance",
Type::Primitive(PrimitiveType::Float),
)),
Arc::new(NestedField::optional(
4,
"fare_amount",
Type::Primitive(PrimitiveType::Double),
)),
Arc::new(NestedField::optional(
5,
"store_and_fwd_flag",
Type::Primitive(PrimitiveType::String),
)),
])
.build()
.unwrap();
let schema = Arc::new(schema);
let partition_spec = PartitionSpec::builder(schema.clone())
.with_spec_id(0)
.add_partition_field("vendor_id", "vendor_id", Transform::Identity)
.unwrap()
.build()
.unwrap();
let sort_order = SortOrder::builder()
.with_order_id(0)
.build_unbound()
.unwrap();
let snapshot = Snapshot::builder()
.with_snapshot_id(638933773299822130)
.with_timestamp_ms(1662532818843)
.with_sequence_number(0)
.with_schema_id(0)
.with_manifest_list("/home/iceberg/warehouse/nyc/taxis/metadata/snap-638933773299822130-1-7e6760f0-4f6c-4b23-b907-0a5a174e3863.avro")
.with_summary(Summary { operation: Operation::Append, additional_properties: HashMap::from_iter(vec![("spark.app.id".to_string(), "local-1662532784305".to_string()), ("added-data-files".to_string(), "4".to_string()), ("added-records".to_string(), "4".to_string()), ("added-files-size".to_string(), "6001".to_string())]) })
.build();
let default_partition_type = partition_spec.partition_type(&schema).unwrap();
let expected = TableMetadata {
format_version: FormatVersion::V1,
table_uuid: Uuid::parse_str("df838b92-0b32-465d-a44e-d39936e538b7").unwrap(),
location: "/home/iceberg/warehouse/nyc/taxis".to_string(),
last_updated_ms: 1662532818843,
last_column_id: 5,
schemas: HashMap::from_iter(vec![(0, schema)]),
current_schema_id: 0,
partition_specs: HashMap::from_iter(vec![(0, partition_spec.clone().into())]),
default_partition_type,
default_spec: Arc::new(partition_spec),
last_partition_id: 1000,
default_sort_order_id: 0,
sort_orders: HashMap::from_iter(vec![(0, sort_order.into())]),
snapshots: HashMap::from_iter(vec![(638933773299822130, Arc::new(snapshot))]),
current_snapshot_id: Some(638933773299822130),
last_sequence_number: 0,
properties: HashMap::from_iter(vec![("owner".to_string(), "root".to_string())]),
snapshot_log: vec![SnapshotLog {
snapshot_id: 638933773299822130,
timestamp_ms: 1662532818843,
}],
metadata_log: vec![MetadataLog { metadata_file: "/home/iceberg/warehouse/nyc/taxis/metadata/00000-8a62c37d-4573-4021-952a-c0baef7d21d0.metadata.json".to_string(), timestamp_ms: 1662532805245 }],
refs: HashMap::from_iter(vec![("main".to_string(), SnapshotReference { snapshot_id: 638933773299822130, retention: SnapshotRetention::Branch { min_snapshots_to_keep: None, max_snapshot_age_ms: None, max_ref_age_ms: None } })]),
statistics: HashMap::new(),
partition_statistics: HashMap::new(),
};
check_table_metadata_serde(data, expected);
}