我遇到了一些問題,爲avro字段設置默認值。我有一個簡單的模式,如下所示: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的插件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" },
我沒有得到這個錯誤。我在文檔中讀到聯合中的第一個模式成爲默認模式。所以我的問題是,爲什麼我仍然需要指定「默認」屬性?我還有什麼可以讓字段可選?
如果我確實需要指定默認值,那麼對於聯合如何工作;我是否需要爲聯合中的每個模式指定默認值,以及它們在順序/語法方面如何工作?
謝謝。
簡單地把null放在類型union中看起來並不是可選的 - 這就是我如何使用它,並且仍然有錯誤。至少在我使用的Avro 1.7.5上需要添加默認空值。 –
https://avro.apache.org/docs/1.7.7/spec.html#Unions確實提到了這一點。 –