仅在另一个处理程序完成执行后,如何运行处理器?

时间:2019-06-03 15:21:01

标签: apache-nifi

我正在将一个表(200万行)从DB2迁移到SQL Server。我正在使用下一个流程:

  1. ExecuteSQL(用于从Db2表中选择记录)。
  2. SplitAvro(用于拆分记录。我将其配置为Output Size = 1以控制这种情况:如果一个失败,其余的插入就不会出现问题。
  3. PutDataBaseRecord(用于在SQL Server表中插入记录)。
  4. ExecuteSQL(我需要调用一个存储过程,该存储过程针对PutDataBaseRecord正在处理的同一表执行更新语句)。

问题是PutDataBaseRecord完成所有记录的插入之前,第二个ExecuteSQL正在运行。

我如何告诉nifi仅在另一个完成时才运行该处理器?

谢谢!

2 个答案:

答案 0 :(得分:4)

在PutDatabaseRecord之后,可以在“碎片整理”模式下使用MergeContent撤消SplitAvro执行的拆分操作。这样,仅当看到所有拆分后,单个流文件才会从MergeContent中输出,这时您便知道了运行第二个ExecuteSQL的时间。

答案 1 :(得分:0)

@ bryan-bende提供的答案很好,因为它简单而优雅。如果由于某种原因该方法不起作用,您还可以查看“等待/通知”。话虽如此,布莱恩的答案更简单,也可能更可靠。