Как выполнить процессор только тогда, когда другой процессор не выполняется? - PullRequest
0 голосов
/ 02 апреля 2019

Я вставляю / обновляю данные в таблицу. Система баз данных не обеспечивает функциональность «Upsert». Таким образом, я использую промежуточную таблицу для вставки с последующим слиянием с «финальной» таблицей и, наконец, усекаю промежуточную таблицу.

Это приводит к состоянию гонки. Если новые данные вставляются в промежуточную таблицу между объединением + усечением, эти данные теряются.

Как я могу убедиться, что этого не происходит?

Я пытался смоделировать это через Wait / Notify, но это тоже не чистое решение. Очередь для процессора «Поместить данные в промежуточную таблицу» PutDatabaseRecord может быть заполнена, и ExecuteSQL «MergeVertica for Insert / Update» все еще может выполняться.

Nifi Flow

1 Ответ

1 голос
/ 03 апреля 2019

Я бы использовал процессор MonitorActivity с пороговым значением 60 или 30 секунд и использовал бы неактивный выход с Постоянно отправляющими сообщения , установленными на «ложь».

Успешно вставьте SQL в промежуточное соединение в MonitorActivity , поэтому, если в течение последних X секунд не будет видно активности, он запустит потоковый файл, который запустит ваш процесс слияния.

Загрузите шаблон с https://codeshare.io/aJNNkn

enter image description here

...