Meg*_*dad 7 java boolean default avro
我有一个 avro 模式,其中我已将捕获声明为布尔值,并且我想将默认值指定为true。
{
"namespace": "abc",
"type": "record",
"name": "Request",
"fields": [
{
"name": "amount",
"type": "long",
},
{
"name": "currency",
"type": ["string", "null"],
},
{
"name": "capture",
"type": "boolean",
"default": true
}
}
Run Code Online (Sandbox Code Playgroud)
当在 Java 中使用它时,它会获得默认值null。我需要做什么才能将其默认为true?
这不仅仅与Java有关。一般来说(根据https://avro.apache.org/docs/current/spec.html上提供的文档)我们有:
default: A default value for this field, used when reading instances that lack this field (optional)
Run Code Online (Sandbox Code Playgroud)
因此,默认值仅用于模式演变,因此当您使用不同模式读取/写入记录时。例如,假设您想要读取使用模式 A1 写入的记录,而使用演变的模式 A2 ,并且捕获字段已通过模式 A2 引入(因此它在模式 A1 中不存在)。因此,您读取的记录包含该变量的架构 A2 的默认值。
为了测试,我从一个模式生成了两个Java类,分别具有一个布尔字段,默认值为“true”和“false”。除了 Avro 模式定义之外,生成的类是相同的。这确认默认值未反映在源代码中。
我也尝试过Golang,结果是一样的。