Использование Apache Nifi для сбора файлов с сторонних Rest APi - PullRequest
0 голосов
/ 08 апреля 2019

Я пытаюсь создать поток в Apache-Nifi для сбора файлов из стороннего RESTful APi, и я установил свой поток следующим образом:

InvokeHTTP - ExtractText - PutFile

Я могу собрать файл, который мне нужен, поскольку я указал это в своем удаленном URL, однако, когда я получаю все данные из указанного файла, он выводит несколько (100) одинаковых файлов на мой выходкаталог.

3 вещи, в которых мне нужна помощь:

1: Как получить поток для вывода файла в читаемом .csv, а не просто в файле без ext

2: Как я могу остановить процессор, когда у меня есть все данные, которые мне нужны

3: Файл Json, который мне был предоставлен, дает мне возможность получать файлы из определенного диапазона дат:

https://api.3rdParty.com/reports/v1/scheduledReports/877800/1553731200000

Или я могу выбрать определенный файл:

https://api.3rdParty.com/reports/v1/scheduledReports/download/877800/201904/CTDDaily/2019-04-02T01:50:00Z.csv

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

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

Спасибо.

Примечание: имя хоста 3rdParty было переименовано для обеспечения безопасности - поэтому ссылки не будут работать напрямую.Благодарю.

1 Ответ

3 голосов
/ 08 апреля 2019

1) Вы изменяете имя файла потока на любое другое, используя процессор UpdateAttribute. Если вы хотите, чтобы оно имело расширение «.csv», вы можете добавить свойство с именем «filename» со значением «$ {filename} .csv» (без кавычек при его вводе).

2) По умолчанию большинство процессоров имеют стратегию планирования с таймером-драйвером 0 секунд, что означает, что работа будет продолжаться максимально быстро. Перейдите к конфигурации процессора на вкладке планирования и настройте соответствующее расписание. Похоже, вы хотите, чтобы планирование CRON планировало его ежедневно.

3) Вы можете использовать операторы языка выражений NiFi для создания динамических временных диапазонов. Я не совсем понимаю синтаксис API, с которым вам нужно общаться, но вы можете сделать что-то вроде этого для URL:

https://api.3rdParty.com/reports/v1/scheduledReports/877800/${now()}

Где now () вернет текущую метку времени как эпоху.

Вы также можете отформатировать его в строку даты, если необходимо:

$ {сейчас (): формат (ГГГГ-ММ-дд ')}

https://nifi.apache.org/docs/nifi-docs/html/expression-language-guide.html

...