如何等待GenerateTableFetch查询完成

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

我的用例是这样的。我有一些X表从MySQL中提取。我正在使用SplitText拆分它们,将每个表放在一个单独的流文件中并使用GenerateTableFetchExecuteSQL进行拉动。

我希望在对所有表进行导入时收到通知或进行一些其他操作。在SplitText文本处理器中,我已经将originalWait${filename}关系与目标数量${fragment.count}相关联。这将跟踪完成的表数。

但现在我无法弄清楚如何知道特定表何时完成。 GenerateTableFetch根据分区大小将流文件分成多个。但它不会写像fragment.count这样的属性,我可以用来等待每个表。

有没有办法实现这个目标?或者,如果流中的所有流文件都已处理且没有任何内容正在处理或正在处理,那么有可能在整个流程结束时知道吗?

apache-nifi hortonworks-data-platform hortonworks-dataflow
2个回答
2
投票

如果您有一个独立的NiFi实例(或者没有将集群中的流文件分发到ExecuteSQL节点),那么您可以使用QueryDatabaseTable,它(默认情况下)只会在处理整个结果集时发出所有流文件。如果所有行都进入单个流文件,则流文件已向下游传输的事实表明提取已完成。

我编写了NIFI-5601来介绍将片段。*属性添加到GTF生成的流文件的改进。


1
投票

直到NiFi添加对此的支持,我设法使用MergeContent使其工作。使用table_name作为Correlation attribute name,然后使用merged作为目标使用Wait${merge.count}处理器的关系。如果有人想要做同样的事情,请参考屏幕截图。

enter image description here

MergeContent processor

Wait processor

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