如何仅在另一个处理器执行完毕后才运行一个处理器?

问题描述 投票:0回答:2

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

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

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

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

提前致谢!

apache-nifi
2个回答
6
投票

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


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.