gpt4 book ai didi

java - 未应用 boolean 值的 avro 默认值

转载 作者:行者123 更新时间:2023-12-02 08:51:14 27 4
gpt4 key购买 nike

我有一个 avro 架构,其中我将 capture 声明为 boolean 值,并且我想将默认值指定为 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

最佳答案

这不仅仅与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”的 boolean 字段。除了 Avro 架构定义之外,生成的类相同。这确认默认值未反射(reflect)在源代码中。

我也尝试过Golang,结果是一样的。

关于java - 未应用 boolean 值的 avro 默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60752253/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com