NiFi: вручную объединить несколько потоковых файлов на основе атрибута - PullRequest
1 голос
/ 05 мая 2020

Версия NiFi - 1.8

Хотел бы вручную объединить несколько потоковых файлов на основе атрибута.

Я знаю, это можно легко сделать, используя MergeRecordProcessor указав свойство Correlation Attribute Name, но хотелось бы сделать это с помощью Groovy Script(ExecuteGroovyScript/ExecuteScript).

Количество файловых потоков будет меньше 20, поэтому после слияния с этим атрибутом c оно должно стать меньше 8.

Есть эффективный способ сделать это manually using Groovy script? Укажите мне правильное направление, если бы мне пришлось сделать это с помощью скрипта.

1 Ответ

3 голосов
/ 05 мая 2020

Как уже указывалось, существуют стандартные процессоры, которые выполняют sh эту задачу, а Max Bin Age является необязательным свойством, поэтому вам не нужно его устанавливать.

Если вы настаиваете на выполнении этого вручную с помощью сценария, вы должны написать сценарий, который получает несколько потоковых файлов из сеанса, используя def flowfiles = session.get(100) (настройте размер пакета, чтобы убедиться, что вы получаете все связанные потоковые файлы из входящей очереди не нагружая кучу), отфильтруйте и сгруппируйте их по определенному атрибуту c, а затем объедините все содержимое с содержимым нового потокового файла. Обновите входящие потоковые файлы и включите все UUID в атрибут объединенного потокового файла. Затем перенесите все объединенные потоковые файлы в «исходные» отношения, а объединенные потоковые файлы в пользовательские «объединенные» отношения (вам нужно будет использовать InvokeScriptedProcessor для обеспечения настраиваемых отношений). Любые потоковые файлы, которые вы не объединили, нужно будет вернуть во входящую очередь.

Это только краткое изложение. Необходимо рассмотреть дополнительные детали и крайние случаи. Я настоятельно рекомендую не создавать для этого специальный обработчик сценариев, когда уже существуют надежные, проверенные решения. Если вы все же хотите написать свой собственный, посмотрите существующий код для процессора MergeContent, чтобы понять, как он работает. В Руководстве разработчика Apache NiFi также есть раздел , посвященный шаблонам проектирования (хотя он не охватывает многие-к-одному , как это уже делают стандартные процессоры).

...