阿夫罗架构。如何同时将类型设置为 "record" 和 "null"
Avro Schema. How to set type to "record" and "null" at once
我需要在架构中混合 "record" 类型和空类型。
"name":"specShape",
"type":{
"type":"record",
"name":"noSpecShape",
"fields":[
{
"name":"bpSsc",
"type":"null",
"default":null,
"doc":"SampleValue: null"
},...
例如,对于某些数据,specShape 可能为空。
所以如果我将类型设置为
"name":"specShape",
"type":{
**"type":["record", "null"],**
"name":"noSpecShape",
"fields":[
{
"name":"bpSsc",
"type":"null",
"default":null,
"doc":"SampleValue: null"
},...
它说
No type: {"type":["record","null"]...
但是如果我将整体类型设置为
"name":"specShape",
**"type":[{
"type":"record",
"name":"noSpecShape",
"fields":[
{
"name":"bpSsc",
"type":"null",
"default":null,
"doc":"SampleValue: null"
}, "null"]**,...
它说
Not in union [{"type":"record"
如何联合这两种类型?
您的想法是正确的,您只需要将 "null"
包含在更高级别的 "type"
数组中,而不是包含在 "fields"
数组中(如第三个示例中所示)。这是可空记录的架构:
[
"null",
{
"type": "record",
"name": "NoSpecShape",
"fields": [
{
"type": "null",
"name": "bpSsc",
"default": null
}
]
}
]
您还可以将其嵌套在需要类型声明的任何位置,例如在另一条记录中:
{
"type": "record",
"name": "SpecShape",
"fields": [
{
"type": [
"null",
{
"type": "record",
"name": "NoSpecShape",
"fields": [
{
"type": "null",
"name": "bpSsc",
"default": null
}
]
}
],
"name": "shape"
}
]
}
JSON-最后一个模式的编码实例如下所示:
{"shape": null}
{"shape": {"NoSpecShape": {"bpSsc": null}}}
我需要在架构中混合 "record" 类型和空类型。
"name":"specShape",
"type":{
"type":"record",
"name":"noSpecShape",
"fields":[
{
"name":"bpSsc",
"type":"null",
"default":null,
"doc":"SampleValue: null"
},...
例如,对于某些数据,specShape 可能为空。
所以如果我将类型设置为
"name":"specShape",
"type":{
**"type":["record", "null"],**
"name":"noSpecShape",
"fields":[
{
"name":"bpSsc",
"type":"null",
"default":null,
"doc":"SampleValue: null"
},...
它说
No type: {"type":["record","null"]...
但是如果我将整体类型设置为
"name":"specShape",
**"type":[{
"type":"record",
"name":"noSpecShape",
"fields":[
{
"name":"bpSsc",
"type":"null",
"default":null,
"doc":"SampleValue: null"
}, "null"]**,...
它说
Not in union [{"type":"record"
如何联合这两种类型?
您的想法是正确的,您只需要将 "null"
包含在更高级别的 "type"
数组中,而不是包含在 "fields"
数组中(如第三个示例中所示)。这是可空记录的架构:
[
"null",
{
"type": "record",
"name": "NoSpecShape",
"fields": [
{
"type": "null",
"name": "bpSsc",
"default": null
}
]
}
]
您还可以将其嵌套在需要类型声明的任何位置,例如在另一条记录中:
{
"type": "record",
"name": "SpecShape",
"fields": [
{
"type": [
"null",
{
"type": "record",
"name": "NoSpecShape",
"fields": [
{
"type": "null",
"name": "bpSsc",
"default": null
}
]
}
],
"name": "shape"
}
]
}
JSON-最后一个模式的编码实例如下所示:
{"shape": null}
{"shape": {"NoSpecShape": {"bpSsc": null}}}