BigQueryIO # read (SerializableFunction) позволяет использовать любую из существующих библиотек / функций преобразования Avro в POJO.
Например, я использую код из этого сообщение в блоге :
private static <T> T mapRecordToObject(GenericRecord record, T object) {
Assert.notNull(record, "record must not be null");
Assert.notNull(object, "object must not be null");
final Schema schema = ReflectData.get().getSchema(object.getClass());
Assert.isTrue(schema.getFields().equals(record.getSchema().getFields()), "Schema fields didn’t match");
record.getSchema().getFields().forEach(d -> PropertyAccessorFactory.forDirectFieldAccess(object).setPropertyValue(d.name(), record.get(d.name()) == null ? record.get(d.name()) : record.get(d.name()).toString()));
return object;
}
PCollection<MyType> data = pipeline.apply(
BigQueryIO
.read(new SerializableFunction<SchemaAndRecord, MyType>() {
public MyType apply(SchemaAndRecord schemaAndRecord) {
return mapRecordToObject(schemaAndRecord.getRecord(), new MyType());
}
})
.from("mydataset:mytable"));
Код из сообщения в блоге предполагает, что схема avro использовалась для генерации POJO.