Nested 嵌套Avro模式
根据on nesting Avro模式,嵌套记录模式的正确方法如下:Nested 嵌套Avro模式,nested,schema,record,avro,Nested,Schema,Record,Avro,根据on nesting Avro模式,嵌套记录模式的正确方法如下: { “姓名”:“人”, “类型”:“记录”, “字段”:[ {“name”:“firstname”,“type”:“string”}, {“name”:“lastname”,“type”:“string”}, { “姓名”:“地址”, “类型”:{ “类型”:“记录”, “名称”:“AddressUSRecord”, “字段”:[ {“name”:“streetaddress”,“type”:“string”}, {“名称”:
{
“姓名”:“人”,
“类型”:“记录”,
“字段”:[
{“name”:“firstname”,“type”:“string”},
{“name”:“lastname”,“type”:“string”},
{
“姓名”:“地址”,
“类型”:{
“类型”:“记录”,
“名称”:“AddressUSRecord”,
“字段”:[
{“name”:“streetaddress”,“type”:“string”},
{“名称”:“城市”,“类型”:“字符串”}
]
},
}
]
}
我不喜欢给字段命名address
,也不喜欢给字段的模式命名(AddressUSRecord
)。我能否给字段和架构指定相同的名称,地址
如果我想在多个其他模式中使用AddressUSRecord
模式,而不仅仅是person
,该怎么办?如果我想在另一个模式中使用AddressUSRecord
,比如说business
,我必须给它起个别的名字吗
理想情况下,我希望在单独的模式中定义AddressUSRecord
,然后让address
的类型引用AddressUSRecord
。但是,不清楚AVRO1.8.1是否支持这种开箱即用的功能。这表明需要使用自定义代码处理子模式。在Avro 1.8.1中定义可重用模式的最佳方法是什么
注意:我想要一个与Confluent Inc.的Schema Registry一起工作的解决方案。有一种说法似乎表明模式注册表不能很好地处理模式引用。您可以将
名称空间
设置为记录类型,然后在后续字段中,使用{namespace}.{name}
作为类型
参数。不幸的是,目前无法从其他模式文件引用类型
我可以给字段和架构提供相同的名称和地址吗
是的,您可以使用与字段名相同的名称命名记录
如果我想在多个其他模式中使用AddressUSRecord模式,而不仅仅是person,该怎么办
您可以使用两种技术使用多个模式:avro模式解析器客户端(JVM和其他)允许您指定多个模式,通常通过名称
参数(Javaschema$parser/parse
方法允许多个模式字符串
参数)
然后,可以将从属架构指定为命名类型:
{
"type": "record",
"name": "Address",
"fields": [
{
"name": "streetaddress",
"type": "string"
},
{
"name": "city",
"type": "string"
}
]
}
并在父模式之前通过解析器运行此命令:
{
"name": "person",
"type": "record",
"fields": [
{
"name": "firstname",
"type": "string"
},
{
"name": "lastname",
"type": "string"
},
{
"name": "address",
"type": "Address"
}
]
}
顺便说一句,这允许您从单独的文件进行解析
或者,您也可以解析以相同方式引用模式的单个联合模式:
[
{
"type": "record",
"name": "Address",
"fields": [
{
"name": "streetaddress",
"type": "string"
},
{
"name": "city",
"type": "string"
}
]
},
{
"type": "record",
"name": "person",
"fields": [
{
"name": "firstname",
"type": "string"
},
{
"name": "lastname",
"type": "string"
},
{
"name": "address",
"type": "Address"
}
]
}
]
我想要一个与Confluent Inc.的模式注册表一起工作的解决方案
模式注册表不支持单独解析模式,但它支持后一个解析为联合类型的示例 您好,Niel,我正在confluent cloud上尝试完全相同的模式,但当我在producer中调用此模式时,我无法使用此模式,即“您的模式(JSON数组)通过了avro验证,但如何使用它?”?用于JSON对象模式的生产者调用语法不适用于您的方案。谢谢