【问题标题】:Cannot reliably write to avro from resultset of teradata无法从 teradata 的结果集中可靠地写入 avro
【发布时间】:2018-10-12 15:20:46
【问题描述】:

我在 java 中的代码正在使用结果集读取 teradata,并且正在打印终端中的每一行,但它没有正确写入 avro,即很少有行无缘无故丢失。没有发生行删除的模式,我在插入 avro 文件时将每种数据类型转换为字符串。我觉得我的 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)
        }
    }
}

`

【问题讨论】:

    标签: java teradata avro


    【解决方案1】:

    最终解决它。每次写入记录时刷新数据似乎对我来说都很好。

    dataFileWriter.append(rec) dataFileWriter.flush()

    【讨论】:

      猜你喜欢
      • 2018-11-21
      • 2012-04-29
      • 1970-01-01
      • 2011-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-17
      相关资源
      最近更新 更多