【问题标题】:Nifi - Truncate and Load to mysql db tableNifi - 截断并加载到 mysql 数据库表
【发布时间】:2017-12-29 07:31:32
【问题描述】:

我正在从 SFTP 站点读取 CSV 文件并使用 Nifi 将其加载到 mysql db。

我有以下似乎工作正常的工作流程。在开始加载数据之前,我只需要一些帮助来弄清楚如何截断表。

Nifi 流:

ListSFTP -> FetchSFTP -> InferAvroSchema -> ConvertCSVtoAvro -> ConvertAvrotoJSON -> SplitJSON -> ConvertJSONtoSQL -> PutSQL

这个流程似乎工作正常,但是每次我运行它时,我都需要先截断表,然后再开始加载。

有人可以帮我提供一些关于我如何实现这一目标的信息。或者有没有比我写的更好的流程,请指教。

谢谢, 阿迪尔

【问题讨论】:

    标签: mysql load truncate apache-nifi data-ingestion


    【解决方案1】:

    在进入“插入前截断”部分之前,我建议将从 ConvertCSVtoAvro 到 PutSQL 的所有内容替换为 PutDatabaseRecord。它基本上是一起执行“ConvertXtoSQL->PutSQL”,并减轻了所有这些转换的需要,只是为了执行 SQL 语句。

    插入前的截断部分有点棘手。从 NiFi 1.5.0(撰写本文时尚未发布)通过NIFI-4522,您将能够在执行 SQL 命令时保留流文件内容。这意味着在 PutDatabaseRecord 之前,您可以将 PutSQL 的“SQL 语句”设置为“TRUNCATE myTable”。 PutSQL 将发出 TRUNCATE 但继续传递流文件。

    目前我能想到的唯一解决方法是 ExecuteScript 处理器。如果使用 PutDatabaseRecord,您可能必须按名称获取 DBCPConnectionPool(参见 my blog post 示例)并自己执行 TRUNCATE 语句,然后传递传入的流文件。如果将上面的流程与 PutSQL 一起使用,您可以获得传入的流程文件,然后仅当 fragment.index 为零并且您在连接上使用Prioritizer 时才写出“TRUNCATE myTable”流程文件,然后传输传入流文件。

    【讨论】:

    • 非常感谢!那效果很好。关于执行脚本的博文也很有帮助。
    猜你喜欢
    • 2014-06-21
    • 1970-01-01
    • 1970-01-01
    • 2014-08-26
    • 2011-06-12
    • 1970-01-01
    • 1970-01-01
    • 2016-01-31
    • 2019-03-04
    相关资源
    最近更新 更多