Apache nifi 如何仅在其他处理器完成其执行时运行处理器?

Apache nifi 如何仅在其他处理器完成其执行时运行处理器?,apache-nifi,Apache Nifi,我正在将一个表(200万行)从DB2迁移到SQL Server。我正在使用下一个流: ExecuteSQL(从Db2表中选择记录) SplitAvro(用于分割记录。我将其配置为输出大小=1,以控制如果一个失败,则插入其余记录时不会出现问题的情况 PutDataBaseRecord(在SQL Server表中插入记录) ExecuteSQL(我需要调用一个存储过程,该过程对PutDataBaseRecord正在处理的同一个表执行更新语句) 问题是在PutDataBaseRecord完成所有记录的

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

  • ExecuteSQL(从Db2表中选择记录)
  • SplitAvro(用于分割记录。我将其配置为输出大小=1,以控制如果一个失败,则插入其余记录时不会出现问题的情况
  • PutDataBaseRecord(在SQL Server表中插入记录)
  • ExecuteSQL(我需要调用一个存储过程,该过程对PutDataBaseRecord正在处理的同一个表执行更新语句)
  • 问题是在PutDataBaseRecord完成所有记录的插入之前,第二个ExecuteSQL正在运行

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


    提前感谢!

    在PutDatabaseRecord之后,您可以在碎片整理模式下使用MergeContent来撤消SplitAvro执行的拆分操作。这样,只有在看到所有拆分后,MergeContent才会生成一个流文件,此时您知道第二个ExecuteSQL运行的时间。

    PutDatabaseRecord之后可以在碎片整理模式下使用MergeContent撤消SplitAvro执行的拆分操作。这样,只有在看到所有拆分后,MergeContent才会生成单个流文件,此时您知道第二个ExecuteSQL运行的时间。

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

    由@Bryan bende提供的答案很好,因为它简单而优雅。如果出于某种原因不起作用,你也可以看看等待/通知。话虽如此,布莱恩的答案更简单,也可能更可靠更健壮。

    感谢Bryan的回答!我尝试了MergeContent,但出现了另一个问题。碰巧有些记录在插入时失败,而MergeContent从未运行。您如何处理这个问题?您还需要将失败关系路由到合并内容,因为所有拆分都是成功+失败的组合正在退出PutDatabaseRecord感谢Bryan的回答!我尝试了MergeContent,但出现了另一个问题。有些记录在插入时失败,而MergeContent从未运行。您如何处理此问题?您还需要将失败关系路由到合并内容,因为所有拆分都是成功+f的组合来自PutDatabaseRecord的故障