Java Avro使用不存在的架构字段追加通用记录

Java Avro使用不存在的架构字段追加通用记录,java,avro,Java,Avro,我有以下模式 {"namespace": "POS.avro", "type": "record", "name": "POS", "fields": [ {"name": "TransactionID", "type": "int"}, {"name": "Date", "type": "long"}, {"name": "Invoice", "type": "string"}, {"name": "StoreId", "type": "strin

我有以下模式

{"namespace": "POS.avro",
 "type": "record",
 "name": "POS",
 "fields": [
     {"name": "TransactionID", "type": "int"},
     {"name": "Date", "type": "long"},
     {"name": "Invoice", "type": "string"},
     {"name": "StoreId", "type": "string"},
     {"name": "StoreName", "type": "string"},
     {"name": "SalesMan", "type": "string"},
  ]
}
我正在用Java创建通用记录,将其附加到Avro文件中

    DatumWriter<GenericRecord> datumWriter = new GenericDatumWriter<GenericRecord>(schema);
    File avroFile = new File(avroFileName);

    DataFileWriter<GenericRecord> dataFileWriter = new DataFileWriter<GenericRecord>(datumWriter);
    dataFileWriter.create(schema, avroFile);

    // Instantiating the GenericRecord class.
    GenericRecord salesRecord = new GenericData.Record(schema);

    String key = "Product Name";
    Field field = schema.getField(key);
    if (field == null) {
        salesRecord.put(key, "some value");
    }

    dataFileWriter.append(salesRecord);
DatumWriter DatumWriter=新的GenericDatumWriter(模式);
文件avroFile=新文件(avroFileName);
DataFileWriter DataFileWriter=新的DataFileWriter(datumWriter);
创建(模式,avroFile);
//实例化GenericRecord类。
GenericRecord salesRecord=新的GenericData.Record(模式);
String key=“产品名称”;
Field=schema.getField(键);
如果(字段==null){
salesRecord.put(key,“some value”);
}
dataFileWriter.append(salesRecord);
我试图用一些值附加不存在的字段,但得到一个AvroRuntimeException


我们可以附加不存在的字段吗?如果是,如何使用Java追加此类字段?

如果架构中没有字段,则不能在genericRecord中放入任何键值

这就是put方法的工作原理:

public void put(String key, Object value) {
    Field field = this.schema.getField(key);
    if(field == null) {
        throw new AvroRuntimeException("Not a valid schema field: " + key);
    } else {
        this.values[field.pos()] = value;
    }
}
另外,您确定您的模式有效吗?第
{“name”:“saller”,“type”:“string”},