我有一个这样的Avro模式,其中我已将捕获声明为布尔值,并且希望将默认值设置为true
。
{
"namespace": "abc",
"type": "record",
"name": "Request",
"fields": [
{
"name": "amount",
"type": "long",
},
{
"name": "currency",
"type": ["string", "null"],
},
{
"name": "capture",
"type": "boolean",
"default": true
}
}
在Java中使用它时,它将获得默认值null
。
我需要怎么做才能将其默认设置为true
?
答案 0 :(得分:1)
这不仅与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)
因此,默认值仅用于架构演变,因此当您使用不同的架构读取/写入记录时。 例如,假设您要读取使用架构A1编写的记录,而不是使用经过演化的架构A2,并且 capture 字段已经被架构A2引入(因此在架构A1中不存在)。 因此,您读取的记录包含该变量的架构A2的默认值。
为了进行测试,我从一个架构中分别生成了两个 Java 类,它们的布尔值字段的默认值为“ true”和“ false”。除Avro模式定义外,生成的类相同。这确认默认值未反映在源代码上。
我也尝试过使用 Golang ,结果是相同的。