如何使用 Avro SchemaBuilder 类设置 null 默认值?

问题描述 投票:0回答:1

我正在以编程方式创建模式,这是一个要求,使用

SchemaBuilder
例如:

Schema s = SchemaBuilder.record(collectionName).namespace("com.company.something").fields()
  .name(field).type().nullable().stringType().noDefault()
  ...
  .endRecord();

然而,这会创建一个没有默认值的可为空字段。我想将其默认为空。 我不明白如何使用API来设置默认值,除了字符串默认值,例如使用

stringDefault("default")
代替
noDefault()
。不幸的是,参数不能为空。

这个API是如何实现的?

avro
1个回答
0
投票

Avro 中的可为 null 字段是字段类型 + null 类型的联合。由于某种原因,可以为空的字段,例如

.name(field).type().nullable().stringType()
,生成一个模式,其中并集为
["string", "null"]

看起来联合体的第一种类型可以控制默认值,所以像上面这样的联合体可以有默认的字符串值,但不能有默认的空值。为此,您需要一个

["null", "string"]
工会。

为此,您使用的 API 构造不起作用。你需要这样的东西:

.name(field).type().unionOf().nullType().and().stringType().endUnion().nullDefault()

从 API 中找出它可能会更困难,因为您需要意识到代码片段中也使用了联合,并且在尝试之前必须首先使用 null。由于问题中的片段和这个看起来非常不同,人们会感到困惑。

© www.soinside.com 2019 - 2024. All rights reserved.