【发布时间】:2014-05-21 05:07:20
【问题描述】:
我在为 Avro 字段设置默认值时遇到了一些问题。我有一个简单的架构,如下所示:
data.avsc:
{
"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 not 设置并且没有默认值。
但如果我指定“默认”属性,
{ "name": "id", "type": [ "long", "null" ], "default": "null" },
我没有收到此错误。我在文档中读到联合中的第一个模式成为默认模式。所以我的问题是,为什么我还需要指定“默认”属性?还有什么方法可以使字段成为可选字段?
如果我确实需要指定默认值,这对联合有什么作用?我需要为联合中的每个架构指定默认值吗?这在顺序/语法方面是如何工作的?
谢谢。
【问题讨论】: