Ho riscontrato alcuni problemi nella configurazione dei valori predefiniti per i campi avro. Ho un semplice schema come indicato di seguito:Valori predefiniti del campo 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" ] }
]
}
Sto usando la v1.7.6 avro-maven-plugin per generare il modello java.
Quando creo un'istanza del modello utilizzando
Data data = Data.newBuilder().build();
, si riesce con un'org.apache.avro.AvroRuntimeException eccezione: org.apache.avro.AvroRuntimeException: campo ID Tipo: UNION pos: 0 non fissati e non ha un valore predefinito.
Ma se a specificare la proprietà "default",
{ "name": "id", "type": [ "long", "null" ], "default": "null" },
non ottengo questo errore. Ho letto nella documentazione che il primo schema dell'unione diventa lo schema predefinito. Quindi la mia domanda è, perché devo ancora specificare la proprietà "predefinita"? In quale altro modo posso rendere un campo facoltativo?
E se devo specificare i valori di default, come funziona per un sindacato; devo specificare i valori predefiniti per ogni schema nell'unione e come funziona in termini di ordine/sintassi?
Grazie.
Il semplice inserimento del valore null nel tipo union non lo rende facoltativo, a quanto pare - è così che l'ho avuto e ho ancora ottenuto l'errore. L'aggiunta di null di default è richiesta almeno su Avro 1.7.5 che sto usando. –
https://avro.apache.org/docs/1.7.7/spec.html#Unions menziona questo. –