【问题标题】:avro default value for boolean not applied未应用布尔值的 avro 默认值
【发布时间】:2020-03-19 06:57:55
【问题描述】:

我有这个 avro 架构,其中我将 capture 声明为布尔值,我想将默认值设为 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 boolean default avro


    【解决方案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,结果是一样的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-29
      • 1970-01-01
      • 2011-12-13
      • 2013-07-05
      • 2015-01-11
      • 2020-05-21
      • 2014-05-21
      • 2013-05-09
      相关资源
      最近更新 更多