使用null默认值编码avro枚举时遇到问题

Raz*_*orm 1 java avro

org.apache.avro.UnresolvedUnionException: Not in union ["null",{"type":"enum","name":"document_change_type","namespace":"document","symbols":["create","update","delete"]}]: create
Run Code Online (Sandbox Code Playgroud)

我传入create此字段的字符串,它抛出上述异常.

create 枚举的3个可接受值之一是什么导致异常?

Con*_*ine 6

假设您的avro架构看起来像这样:

{
  "type" : "record",
  "namespace" : "document",
  "name" : "document_details",
  "fields" : [
              { "name" : "documentName" , "type" : "string" },
              {"name" : "documentChange" , 
                        "type" : ["null", 
                                  {"type" : "enum",
                                  "namespace" : "document",
                                   "name" : "documentChangeType",                                
                                   "symbols" :["create","update","delete"]
                                   }]
               }            
             ]
}
Run Code Online (Sandbox Code Playgroud)

您可以在代码中为此架构创建记录,如下所示:

  GenericRecord documentDetailsRecord = new GenericData.Record(schema);
  GenericEnumSymbol enumSymbol = new GenericData.EnumSymbol(schema.getField("documentChange").schema().getTypes().get(1), "create");
  e2.put("documentName", "someDocumentName");
  e2.put("documentChange",enumSymbol);
Run Code Online (Sandbox Code Playgroud)

您可以获取union的所有字段的模式列表,如下所示:

schema.getField(<unionFieldName>).schema().getTypes()
Run Code Online (Sandbox Code Playgroud)