在Avro中,可以通过架构演化来更新和扩展现有架构,而无需中断现有应用程序。但是,当我们需要将原始字段转换为复杂字段时,可能会遇到一定的挑战。下面是解决此问题的步骤:
{ "name": "user", "type": "record", "fields": [ {"name": "name", "type": "string"}, {"name": "address", "type": "string"}, {"name": "age", "type": { "type":"record", "name":"Age", "fields":[ {"name": "years", "type": "int"}, {"name": "months", "type": "int"} ] } } ] }
//assume we have an existing record with just name and age fields Record originalRecord = new Record(originalSchema); originalRecord.put("name", "John"); originalRecord.put("age", 50);
//create a new record using the updated schema Record newRecord = new Record(newSchema); newRecord.put("name", originalRecord.get("name")); newRecord.put("address", "123 Main St."); Record ageRecord = newRecord.get("age"); //create a nested record for the complex field GenericRecord age = new GenericData.Record(ageRecord.getSchema()); age.put("years", originalRecord.get("age")); age.put("months", 0);