2017-01-24 5 views
2

При преобразовании CSV в AVRO я хотел бы вывести все отклонения в файл (скажем, error.csv).NiFi - ConvertCSVtoAVRO - как захватить неудачные записи?

Отказ обычно вызван неправильным типом данных - например, когда значение «строка» появляется в поле «long».

Я пытаюсь сделать это с использованием несовместимого вывода, однако вместо сохранения строк, которые не удалось преобразовать (2 в приведенном ниже примере), он сохраняет весь CSV-файл. Можно ли каким-то образом отфильтровать только те записи, которые не удалось преобразовать? (Добавляет ли NiFi некоторые метки в эти записи и т. Д.?) Оба процессора: RouteOnAttribute и RouteOnContent маршрутизируют все файлы. «Несовместимая» нога потока каким-то образом помещает отдельные записи с чем-то вроде атрибута «ошибка», который доступен после разделения файла на строки? Я не могу найти это в любом документе.

Nifi flow

ответ

6

Я рекомендую использовать SplitText процессор перед ConvertCSVToAvro, если вы можете, так что вы только преобразование одной записи за один раз. У вас также будет четкий контекст, для которого атрибут errors ссылается на любые файлы потоков, отправленные на несовместимый выход.

Отправка всего несостоявшегося файла в несовместимые отношения представляется целенаправленным выбором. Я предполагаю, что это может быть необходимо, если CSV-файл плохо сформирован, особенно в отношении записей, которые аккуратно содержатся в одной строке (или правильно экранированы). Если ваши данные нарушают это предположение, SplitText может ухудшить ситуацию, создав фрагментированный набор неудачных строк.