in crates/iceberg/src/spec/partition.rs [884:972]
fn test_partition_type() {
let spec = r#"
{
"spec-id": 1,
"fields": [ {
"source-id": 4,
"field-id": 1000,
"name": "ts_day",
"transform": "day"
}, {
"source-id": 1,
"field-id": 1001,
"name": "id_bucket",
"transform": "bucket[16]"
}, {
"source-id": 2,
"field-id": 1002,
"name": "id_truncate",
"transform": "truncate[4]"
} ]
}
"#;
let partition_spec: PartitionSpec = serde_json::from_str(spec).unwrap();
let schema = Schema::builder()
.with_fields(vec![
NestedField::required(1, "id", Type::Primitive(crate::spec::PrimitiveType::Int))
.into(),
NestedField::required(
2,
"name",
Type::Primitive(crate::spec::PrimitiveType::String),
)
.into(),
NestedField::required(
3,
"ts",
Type::Primitive(crate::spec::PrimitiveType::Timestamp),
)
.into(),
NestedField::required(
4,
"ts_day",
Type::Primitive(crate::spec::PrimitiveType::Timestamp),
)
.into(),
NestedField::required(
5,
"id_bucket",
Type::Primitive(crate::spec::PrimitiveType::Int),
)
.into(),
NestedField::required(
6,
"id_truncate",
Type::Primitive(crate::spec::PrimitiveType::Int),
)
.into(),
])
.build()
.unwrap();
let partition_type = partition_spec.partition_type(&schema).unwrap();
assert_eq!(3, partition_type.fields().len());
assert_eq!(
*partition_type.fields()[0],
NestedField::optional(
partition_spec.fields[0].field_id,
&partition_spec.fields[0].name,
Type::Primitive(crate::spec::PrimitiveType::Date)
)
);
assert_eq!(
*partition_type.fields()[1],
NestedField::optional(
partition_spec.fields[1].field_id,
&partition_spec.fields[1].name,
Type::Primitive(crate::spec::PrimitiveType::Int)
)
);
assert_eq!(
*partition_type.fields()[2],
NestedField::optional(
partition_spec.fields[2].field_id,
&partition_spec.fields[2].name,
Type::Primitive(crate::spec::PrimitiveType::String)
)
);
}