无法从teradata的结果集中可靠地写入avro

时间:2018-05-02 13:31:39

标签: java teradata avro

我在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)
        }
    }
}

`

1 个答案:

答案 0 :(得分:0)

最终解决它。每次写一条记录时刷新数据对我来说都很合适。

dataFileWriter.append(rec) dataFileWriter.flush()