我有一个AVRO模式,其中包含一堆元素。在每个元素中,我都提供一个默认值。但是,当我尝试序列化时,如果我尝试不设置任何带有值的元素,则会出现异常。即使我只为元素提供一个空字符串,也不会得到这些序列化异常。
avro模式中的“默认”字段用于模式演变案例。有关规则,请参见http://avro.apache.org/docs/current/spec.html#Schema+Resolution。
序列化(写入)数据时不使用默认值。在对(缺少)字段模式生成的avro数据进行脱盐(读取)时使用它。
例如如果我们有使用此模式生成的数据:
{
"type":"record",
"name":"Product",
"fields":[
{"name":"product_id","type": "long"}
]
}
而且我们想使用扩展模式来读取(解决)它,该模式也包含如下product_name字段:
{
"type":"record",
"name":"Product",
"fields":[
{"name":"product_id","type": "long"},
{"name":"product_name","type": "string","default":"old product data"},
]
}
默认值将用于为数据中缺少的字段'product_name'设置值,因为该数据是使用第一个架构写入的。