我的用例是这样的。我有一些 X 表要从 MySQL 中提取。我使用 SplitText
拆分它们,将每个表放入单独的流文件中,并使用 GenerateTableFetch
和 ExecuteSQL
进行拉取。
当所有表的导入完成时,我希望收到通知或采取其他操作。在 SplitText
文本处理器中,我已将 original
关系路由到 ${filename}
上的 Wait
,目标计数 ${fragment.count}
。这将跟踪完成了多少张表。
但现在我无法弄清楚如何知道特定表何时完成。 GenerateTableFetch
根据分区大小将流文件分成多个。但它不会写入像fragment.count这样的属性,我可以用它来等待每个表。
有什么办法可以实现这个目标吗?或者也许有一种方法可以在整个流程结束时知道流程中的所有流程文件是否已被处理并且没有任何内容在队列中或正在处理?
最佳答案
如果您有一个独立的 NiFi 实例(或者没有将流文件在集群之间分发到 ExecuteSQL 节点),那么您可以使用 QueryDatabaseTable 代替,它(默认情况下)只会在整个结果集时发出所有流文件已处理。如果您将所有行都放入单个流文件中,则流文件已向下游传输这一事实表明提取已完成。
我写了NIFI-5601涵盖向 GTF 生成的流文件添加fragment.* 属性的改进。
关于apache-nifi - 如何等待GenerateTableFetch查询完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52346994/