Как использовать ConvertRecord и CSVRecordSetWriter для вывода заголовка (без данных) в Apache NiFi? - PullRequest
0 голосов
/ 13 сентября 2018

Я работаю с Apache NiFi, чтобы извлечь данные из таблицы базы данных и использовать ConvertRecord, чтобы изменить извлеченные записи из файла avro в файл CSV, используя AvroReader и CSVRecordSetWriter.

Мой процесс работает нормально, когда из базы данных возвращается хотя бы одна строка.

Однако, когда процессор ExecuteSQL выводит FlowFile, содержащий 0 записей (FlowFile по-прежнему содержит схему метаданных / avro) - ConvertRecord дает мне 0-байтовый вывод FlowFile. Мои настройки в сервисе CSVRecordSetWriter настроены на вывод заголовка.

Есть ли способ заставить ConvertRecord вывести FlowFile, который содержит только строку заголовка в этом случае?

1 Ответ

0 голосов
/ 14 сентября 2018

Процессор ExecuteSql добавляет в поток атрибут executetesql.row.count (Contains the number of rows returned in the select query).

Вы можете проверить значение attribute(executesql.row.count) и принять решение, нужно ли нам использовать ConvertRecord процессор или нет.

Поток:

Executesql(success)--> RouteOnAttribute(add new property ${executesql.row.count:equals(0)}) 
     --> matched --> ReplaceText //Add Header
     --> unmatched --> ConvertRecord //convert to csv format

, если соответствует , тогда используйте Замените текстовый процессор , чтобы перезаписать существующее содержимое файла потока заголовком.

, если Unmatched , что означает, что у вас имеется несколько строк данных в содержимом потокового файла, поэтому используйте процессор ConvertRecord и подготовьте данные CSV.

...