我们有一个流程,其中GenerateTableFetch从splitJson获取输入,后者将TableName,ColumnName作为参数。立即将多个表作为输入传递到GenerateTableFetch,然后ExecuteSql执行查询。
现在,当一个表的所有文件都已由以下处理器处理(最后有PutFile)时,我想触发一个新过程。
如何查找为表创建的所有文件都已处理?
答案 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将生成的流程文件的数量,等等)。