Apache kafka 带有可选记录的AVRO模式

Apache kafka 带有可选记录的AVRO模式,apache-kafka,avro,avro4s,Apache Kafka,Avro,Avro4s,大家好,我需要为下面的示例创建AVRO模式 { "Car" : { "Make" : "Ford" , "Year": 1990 , "Engine" : "V8" , "VIN" : "123123123" , "Plate" : "XXTT9O", "Accident" : { "Date" :"2020/02/02" , "Location" : "NJ" , "Driver" : "Joe" } , "Owner" : { "Name" : "Joe" , "LastName" :

大家好,我需要为下面的示例创建AVRO模式

{ "Car" : { "Make" : "Ford" , "Year": 1990 , "Engine" : "V8" , "VIN" : "123123123" , "Plate" : "XXTT9O", 
"Accident" : { "Date" :"2020/02/02" , "Location" : "NJ" , "Driver" : "Joe" } ,
"Owner" :  { "Name" : "Joe" , "LastName" : "Doe" } } 
意外事件和所有者是可选对象,创建的模式还需要验证以下子集消息

{ "Car" : { "Make" : "Tesla" , "Year": 2020 , "Engine" : "4ELEC" , "VIN" : "54545426" , "Plate" : "TESLA" }
我阅读了AVRO规范,看到了很多可选的属性和数组示例,但没有一个适用于记录。如何将记录定义为可选记录?谢谢

没有任何可选属性的以下架构正在工作

{
  "name": "MyClass",  "type": "record",  "namespace": "com.acme.avro",  "fields": [
    {
      "name": "Car",   "type": {
        "name": "Car","type": "record","fields": [
          { "name": "Make",    "type": "string"   },
          { "name": "Year",    "type": "int"      },
          { "name": "Engine",    "type": "string" },
          { "name": "VIN",    "type": "string"    },
          { "name": "Plate",    "type": "string"  },
          { "name": "Accident",
                "type":
                { "name": "Accident",
                  "type": "record",
                  "fields": [
                       { "name": "Date","type": "string" },
                       { "name": "Location","type": "string" },
                       { "name": "Driver", "type": "string" }
                    ]
                 }
          },

          { "name": "Owner",
            "type":
                {"name": "Owner",
                 "type": "record",
                 "fields": [
                {"name": "Name",  "type": "string" },
                {"name": "LastName", "type": "string" }
              ]
            }
          }
        ]
      }
    }
  ]
}
当我按照建议更改所有者对象时,avro工具返回错误

      { "name": "Owner",
        "type": [
            "null",
            "record" : {
              "name": "Owner",
              "fields": [
                 {"name": "Name",  "type": "string" },
                 {"name": "LastName", "type": "string" }
               ]
             }
          ] , "default": null  }
       ]
   }
}
] }

测试:


通过与
null
进行联合,可以使记录成为可选记录

像这样:

  {
    "name": "Owner",
    "type": [
      "null",
      {
        "name": "Owner",
        "type": "record",
        "fields": [
          { "name": "Name", type": "string" },
          { "name": "LastName", type": "string" },
        ]

      }
    ],
    "default": null
  },

通过与
null
进行联合,可以使记录成为可选记录

像这样:

  {
    "name": "Owner",
    "type": [
      "null",
      {
        "name": "Owner",
        "type": "record",
        "fields": [
          { "name": "Name", type": "string" },
          { "name": "LastName", type": "string" },
        ]

      }
    ],
    "default": null
  },

非常感谢您的代码片段。但这对我不起作用。只需使用完整架构添加更多信息。抱歉,我的响应格式不正确。请尝试更新的答案。非常感谢您提供的代码片段。但这对我不起作用。只需使用完整架构添加更多信息。抱歉,我的响应格式不正确。尝试更新的答案。