Невозможно надежно записать в avro из набора результатов teradata - PullRequest
0 голосов
/ 02 мая 2018

Мой код в 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)
        }
    }
}

`

1 Ответ

0 голосов
/ 03 мая 2018

В конечном итоге решить это. Очистка данных каждый раз, когда вы пишете запись, мне кажется, работает нормально.

dataFileWriter.append(rec) dataFileWriter.flush()

...