我在java中的代码是使用结果集读取teradata并且正在打印终端中的每一行,但它没有正确地写入avro,即很少有行无缘无故地丢失。没有丢失行的模式,我在插入avro文件时将每个数据类型转换为String。我觉得Avro写作过程中出现了错误,但无法弄清楚。 任何帮助表示赞赏。 这是代码。
`
static avroWriter(Schema schema, OutputStream outStream, ResultSet rs) {
final GenericRecord rec = new GenericData.Record(schema)
final DatumWriter<GenericRecord> datumWriter = new GenericDatumWriter<>(schema)
final DataFileWriter<GenericRecord> dataFileWriter = new DataFileWriter<>(datumWriter)
dataFileWriter.create(schema, outStream)
final int nrOfColumns = rs.getMetaData().getColumnCount()
while (rs.next()) {
for (int i = 1; i <= nrOfColumns; i++) {
final Object colValue = rs.getObject(i)
String value
if(colValue == null){
value = "null"
}else{
value = colValue.toString()
}
//println("i :" + i + " value : "+ value)
rec.put(i - 1,value)
}
try {
dataFileWriter.append(rec)
println(rec)
}
catch (IOException e) {
log.error("Record :{} couldn't be read properly", rec, e)
}
}
}
`
答案 0 :(得分:0)
最终解决它。每次写一条记录时刷新数据对我来说都很合适。
dataFileWriter.append(rec)
dataFileWriter.flush()