Nested 嵌套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”}, {“名称”:

根据on nesting Avro模式,嵌套记录模式的正确方法如下:

{
“姓名”:“人”,
“类型”:“记录”,
“字段”:[
{“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和其他)允许您指定多个模式,通常通过
名称
参数(Java
schema$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对象模式的生产者调用语法不适用于您的方案。谢谢