简体   繁体   中英

Avro field default values

I am running into some issues setting up default values for Avro fields. I have a simple schema as given below:

data.avsc:

{
 "namespace":"test",
 "type":"record",
 "name":"Data",
 "fields":[
    { "name": "id", "type": [ "long", "null" ] },
    { "name": "value", "type": [ "string", "null" ] },
    { "name": "raw", "type": [ "bytes", "null" ] }
 ]
}

I am using the avro-maven-plugin v1.7.6 to generate the Java model.

When I create an instance of the model using: Data data = Data.newBuilder().build(); , it fails with an exception:

org.apache.avro.AvroRuntimeException: org.apache.avro.AvroRuntimeException: Field id type:UNION pos:0 not set and has no default value.

But if I specify the "default" property,

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

I do not get this error. I read in the documentation that first schema in the union becomes the default schema. So my question is, why do I still need to specify the "default" property? How else do I make a field optional?

And if I do need to specify the default values, how does that work for a union; do I need to specify default values for each schema in the union and how does that work in terms of order/syntax?

Thanks.

The default value of a union corresponds to the first schema of the union ( Source ). Your union is defined as ["long", "null"] therefor the default value must be a long number. null is not a long number that is why you are getting an error.

If you still want to define null as a default value then put null schema first, ie change the union to ["null", "long"] instead.

Its a bug at Avro's end which is marked as Not A Problem . You need to add default attribute to mention default value.

{"name": "xxx", "type": ["null", "boolean"], "default": null}

Please refer AVRO-1803 .

您必须在架构中提供"default": null而不是"default": "null"才能使构建器方法正常工作

I think the problem is that you are using builder,

According to the documentation of the Java API:

using a builder requires setting all fields, even if they are null

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM