Apache nifi-如何实现“如果在GetMongo处理器中未找到任何记录,则继续”

时间:2018-08-15 13:12:47

标签: mongodb apache-nifi

在我的项目中,我正在按计划从mongo数据库中读取数据,在每个 new 行上执行一些处理,然后转发到另一个处理器。

我想确保从mongo读取的所有记录均未得到处理,因此我将第二个mongoDB集合用作跟踪表。

我想拥有这样的逻辑:

  • 从初始数据库[GetMongo处理器]中读取
  • 如果跟踪数据库[GetMongo中尚不存在记录,则将其插入[PutMongo]
  • 如果记录已存在于跟踪数据库中,请终止流程(我们可以假定它已被处理)
  • Tracking DB稍后将由另一个处理器按照另一个时间表在另一个流程中查询

我的问题是“仅在跟踪表中不存在时继续”步骤。

如果我使用GetMongo处理器,当没有记录返回时,它似乎终止了流程。返回结果 时,它遵循success路径,但是无论如何我都想终止它。对于记录和no_records结果,original路径都是由原始文件触发的,但我认为这不会对我有帮助。

我倾向于使用ExecuteScript处理器,并且仅通过ECMAScript使用Mongo的db.collection.count()功能,然后可以继续使用它,但理想情况下,我希望有一个更清洁的选项。

1 个答案:

答案 0 :(得分:0)

查看了DetectDuplicate处理器之后,我认为它的缓存性质使其不适合我的目的。

我最终使用maven原型创建了一个自定义处理器来处理此逻辑,该逻辑根据查询是否有重用而分为matchedunmatched关系。

链接到原型以创建您自己的处理器-https://mvnrepository.com/artifact/org.apache.nifi/nifi-processor-bundle-archetype