Avro字段默认值

我在设置Avro字段的默认值时遇到了一些问题。我有一个简单的架构,如下所示:

{

"namespace":"test",

"type":"record",

"name":"Data",

"fields":[

{ "name": "id", "type": [ "long", "null" ] },

{ "name": "value", "type": [ "string", "null" ] },

{ "name": "raw", "type": [ "bytes", "null" ] }

]

}

我正在使用 avro-maven-plugin v1.7.6 生成Java模型。

当我使用:创建模型的实例时 Data data = Data.newBuilder().build();,它会失败并出现以下异常:

org.apache.avro.AvroRuntimeException:org.apache.avro.AvroRuntimeException:字段ID类型:UNION

pos:0未设置,并且没有默认值。

但是,如果我指定“默认”属性,

{ "name": "id", "type": [ "long", "null" ], "default": "null" },

我没有得到这个错误。我在文档中读到,联合中的第一个架构成为默认架构。所以我的问题是,为什么我仍然需要指定“默认”属性?我还如何使字段可选?

而且,如果我确实需要指定默认值,那么它如何适用于联合;我需要为联合中的每个架构指定默认值,以及如何按照顺序/语法进行工作?

谢谢。

回答:

联合的默认值对应于联合的第一个架构(Source)。为此,您定义了并集["long",

"null"],默认值必须是长整数。null不是很长的数字,这就是为什么您会收到错误消息。

如果您仍想定义null为默认值,则将空模式放在第一位,即将并集["null", "long"]改为。

以上是 Avro字段默认值 的全部内容, 来源链接: utcz.com/qa/417215.html

回到顶部