如何查找GenerateTableFetch创建的所有文件已处理

时间:2018-11-14 15:32:43

标签: apache-nifi

我们有一个流程,其中GenerateTableFetch从splitJson获取输入,后者将TableName,ColumnName作为参数。立即将多个表作为输入传递到GenerateTableFetch,然后ExecuteSql执行查询。

现在,当一个表的所有文件都已由以下处理器处理(最后有PutFile)时,我想触发一个新过程。

如何查找为表创建的所有文件都已处理?

1 个答案:

答案 0 :(得分:2)

您可能需要NIFI-5601才能完成此操作,在撰写本文时,目前正在审核一个补丁,我希望将其纳入NiFi 1.9.0。

编辑:同时添加潜在的解决方法

如果可以使用ListDatabaseTables而不是从JSON文件获取表名,则可以将Include Count设置为true。然后,您将获得表名称及其行数的属性。然后,您可以将计数除以GTF中的Partition Size的值,这将为您提供访存次数(我们将其称为X)。然后,通过UpdateAttribute添加一个名为“ parent”或诸如此类的属性,并将其设置为${UUID()}。将这些属性保留在进入GTF和ExecuteScript的流文件中,然后可以使用Wait / Notify等待直到收到X个流文件(将Target Signal Count设置为${X})并使用{{ 1}}作为${parent}

如果您不能使用ListDatabaseTables,则在SplitJSON之后可以具有ExecuteSQLRecord,则可以执行类似Release Signal Identifier的操作。如果使用ExecuteSQL,则可能需要ConvertAvroToJSON,如果使用ExecuteSQLRecord,请使用JSONRecordSetWriter。然后,您可以使用EvaluateJsonPath从流文件内容中提取计数。

一旦在属性中具有表名和行数,就可以继续上面概述的流程(即,确定GTF将生成的流程文件的数量,等等)。