Apache kafka 带有可选记录的AVRO模式
大家好,我需要为下面的示例创建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" :
{ "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
},
非常感谢您的代码片段。但这对我不起作用。只需使用完整架构添加更多信息。抱歉,我的响应格式不正确。请尝试更新的答案。非常感谢您提供的代码片段。但这对我不起作用。只需使用完整架构添加更多信息。抱歉,我的响应格式不正确。尝试更新的答案。