完整的模式如下。
{
"type": "record",
"name": "envelope",
"fields": [
{
"name": "before",
"type": [
"null",
{
"type": "record",
"name": "row",
"fields": [
{
"name": "username",
"type": "string"
},
{
"name": "timestamp",
"type": "long"
}
]
}
]
},
{
"name": "after",
"type": [
"null",
"row"
]
}
]
}
我想通过编程提取以下的子模式。
{
"type": "record",
"name": "row",
"fields": [
{
"name": "username",
"type": "string"
},
{
"name": "timestamp",
"type": "long"
}
]
}
如你所见,字段 "before "是空的。我可以通过以下操作提取它的模式。
schema.getField("before").schema()
但是这个模式不是记录,因为它的开头包含了NULL(UNION类型),所以我不能进去提取 "行 "的模式。
["null",{"type":"record","name":"row","fields":[{"name":"username","type":"string"},{"name":"tweet","type":"string"},{"name":"timestamp","type":"long"}]}]
我想获取子schema,因为我想用它来创建GenericRecord。基本上,我想创建两个GenericRecords "before "和 "after",然后把它们添加到从完整模式创建的主GenericRecord中。
任何帮助都将是非常感激的。
好消息是,如果你有一个联合模式,你可以 可以 里面去获取可能的选项列表。
Schema unionSchema = schema.getField("before").schema();
List<Schema> unionSchemaContains = unionSchema.getTypes();
这时,你可以在列表中寻找对应Type. RECORD的选项。