【问题标题】:How to wait for GenerateTableFetch queries to finish如何等待 GenerateTableFetch 查询完成
【发布时间】:2018-09-15 17:08:54
【问题描述】:

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

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

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

有什么方法可以实现吗?或者有没有办法在整个流程结束时知道流程中的所有流程文件是否都已处理,并且队列中没有任何内容或正在处理?

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 嗨,马特。再次感谢您将此标记为对 Jira 的改进。 QueryDatabaseTable 的问题是,它不允许传入关系。我有 100-1000 张桌子要拉。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2016-11-19
      • 1970-01-01
      • 2021-03-23
      • 2020-03-22
      • 2022-01-21
      • 1970-01-01
      • 2018-06-09
      • 2019-04-08
      • 2018-11-22
      相关资源
      最近更新 更多