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