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

Я переношу таблицу (2 миллиона строк) с DB2 на SQL Server.Я использую следующий поток:

  1. ExecuteSQL (для выбора записей из таблицы Db2).
  2. SplitAvro (для разделения записей. Я настроил его с Output Size = 1 дляуправлять случаем, что в случае сбоя один из них вставляется без проблем.
  3. PutDataBaseRecord (для вставки записей в таблицу SQL Server).
  4. ExecuteSQL (мне нужно вызвать хранимую процедуру, которая выполняетобновить предложения для той же таблицы, с которой работает PutDataBaseRecord).

Проблема в том, что второй ExecuteSQL работает до того, как PutDataBaseRecord завершит вставку всех записей.

Как я могу сказать nifiзапускать этот процессор только после завершения работы другого?

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

Ответы [ 2 ]

4 голосов
/ 03 июня 2019

После PutDatabaseRecord вы можете использовать MergeContent в режиме дефрагментации, чтобы отменить операцию разделения, выполняемую SplitAvro. Таким образом, единственный файл потока выйдет из MergeContent только после того, как будут видны все разбиения, и в этот момент вы знаете, что пора запускать второй ExecuteSQL.

0 голосов
/ 05 июня 2019

Ответ, предоставленный @ bryan-bende, великолепен, так как он прост и элегантен.Если по какой-то причине это не сработает, вы также можете посмотреть «Ожидание / Уведомление».Сказав это, ответ Брайана является более простым и, вероятно, более надежным.

...