我正在尝试编写一个函数来计算两个 avro 模式之间的差异并生成另一个模式。
schema_one = {
"type": "record",
"name": "schema_one",
"namespace": "test",
"fields": [
{
"name": "type",
"type": "string"
},
{
"name": "id",
"type": "string"
}
]
}
schema_two = {
"type": "record",
"name": "schema_two",
"namespace": "test",
"fields": [
{
"name": "type",
"type": "string"
}
]
}
获取 schema_one 中的元素字段而不是 schema_two
import org.apache.avro.Schema._
import org.apache.avro.{Schema, SchemaBuilder}
val diff: Set[Schema.Field] = schema_one.getFields.asScala.toSet.filterNot(schema_two.getFields.asScala.toSet)
到目前为止,一切都很好。
我想从 diff 构建一个新模式,我希望它是:
schema_three = {
"type": "record",
"name": "schema_three",
"namespace": "test",
"fields": [
{
"name": "id",
"type": "string"
}
]
}
我似乎无法在 Avro 中找到任何方法SchemaBuilder
来实现这一点,而无需显式提供命名字段。即构建Schema
给定Schema.Field
的s
例如:
SchemaBuilder.record("schema_three").namespace("test").fromFields(diff)
有没有办法做到这一点?欣赏评论。