PutDataBaseRecord не вставляет ни одной записи, если одна из них уже существует в базе данных. - PullRequest
0 голосов
/ 09 мая 2019

Я работаю в NIFI с PutDataBaseRecord, чтобы вставить данные файла CSV в таблицу базы данных. В первом исполнении все идет хорошо, потому что в таблице нет данных. Затем я изменяю файл, чтобы он содержал новые записи и существующие. Сбой PutDataBaseRecord из-за существующих записей (ограничение первичного ключа), но он не вставляет новые записи.

Есть ли способ настроить процессор так, чтобы он указывал ему вставлять новые записи и игнорировать те, которые потерпели неудачу?

Я прикрепил картинки с настройкой моего процессора.

Заранее спасибо!

Flujo NIFI

PutDataBaseRecord

1 Ответ

0 голосов
/ 10 мая 2019

Это возможно.Однако это не простая реализация.

Я бы предложил вам попробовать следующий поток - ListFile -> FetchFile -> SplitRecord -> PutDatabaseRecord .

В процессоре SplitRecord установите свойство «Записи на разделение»в '1'.

Процессор SplitRecord разбивает файл входного потока на несколько небольших файлов потока (в нашем случае по 1 файлу на каждую строку из-за настройки 'Records per Split = 1').Затем эти отдельные файлы потока будут направлены в разделенное отношение, т.е. к процессору PutDatabaseRecord в нашем потоке.

PutDatabaseRecord вставляет новые записи в таблицу и завершается с ошибкой для существующих записей.

Протестировал поток сGetFile процессор и все работает.Надеюсь, это решит вашу проблему.enter image description here

...