如何等待GenerateTableFetch查询完成

时间:2018-09-15 17:08:55

标签: apache-nifi hortonworks-data-platform hortonworks-dataflow

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

当所有表导入完成后,我想收到通知或采取其他措施。在SplitText的文本处理器中,我已将original的关系路由到Wait上的${filename},目标计数为${fragment.count}。这将跟踪完成多少张表。

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

有没有办法可以做到这一点?或者,也许有一种方法可以在整个流程的末尾知道流程中的所有流程文件是否都已处理,而队列中没有任何内容或正在处理中?

2 个答案:

答案 0 :(得分:2)

如果您有一个独立的NiFi实例(或未将流文件在群集中分配给ExecuteSQL节点),则可以改用QueryDatabaseTable,它(默认情况下)仅在整个结果集时才会发布所有流文件已处理。如果您将所有行都放入一个流文件中,那么该流文件已被传输到下游这一事实表明提取已完成。

我写了NIFI-5601来介绍在GTF生成的流文件中添加fragment。*属性的改进。

答案 1 :(得分:1)

直到NiFi add对此提供支持,我设法使用MergeContent使它起作用。使用table_name作为Correlation attribute name,然后使用merged作为目标,使用与Wait处理器的${merge.count}关系。如果有人希望这样做,请参考屏幕截图。

enter image description here

MergeContent processor

Wait processor