java maven avro

java - Valores por defecto del campo avro



maven (3)

Tengo algunos problemas para configurar los valores predeterminados de los campos de Avro. Tengo un esquema simple como se indica a continuación:

data.avsc:

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

Estoy utilizando el complemento vro.7.6 de avro-maven para generar el modelo de Java.

Cuando creo una instancia del modelo usando: Data data = Data.newBuilder().build(); , falla con una excepción:

org.apache.avro.AvroRuntimeException: org.apache.avro.AvroRuntimeException: tipo de ID de campo: UNION pos: 0 no establecido y no tiene un valor predeterminado.

Pero si especifico la propiedad "por defecto",

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

No consigo este error. Leí en la documentación que el primer esquema de la unión se convierte en el esquema predeterminado. Entonces, mi pregunta es, ¿por qué todavía necesito especificar la propiedad "predeterminada"? ¿De qué otra manera puedo hacer un campo opcional?

Y si tengo que especificar los valores predeterminados, ¿cómo funciona eso para una unión? ¿Debo especificar valores predeterminados para cada esquema en la unión y cómo funciona en términos de orden / sintaxis?

Gracias.


Debe proporcionar "default": null no "default": "null" en el esquema para que el método de construcción funcione


El valor predeterminado de una unión corresponde al primer esquema de la unión ( Source ). Su unión se define como ["long", "null"] por lo que el valor predeterminado debe ser un número largo. null no es un número largo, por eso está recibiendo un error.

Si aún desea definir null como un valor predeterminado, coloque primero el esquema nulo, es decir, cambie la unión a ["null", "long"] .


Es un error al final de Avro que está marcado como Not A Problem . Es necesario agregar el atributo predeterminado para mencionar el valor predeterminado.

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

Consulte AVRO-1803 .