【问题标题】:NIFI insert large CSV into SQL DatabaseNIFI 将大型 CSV 插入 SQL 数据库
【发布时间】:2018-09-04 14:18:14
【问题描述】:

我正在尝试将大量大型 CSV 文件插入数据库。 我正在使用 PutDataBaseRecord 处理器执行此操作,这使此过程非常快速和简单。

问题是我不知道如何正确处理故障,例如如果值与列的数据类型不匹配,或者行重复。 如果发生这种情况,PutDataBaseRecord 处理器将丢弃它刚刚从 CSV 文件转换的批次的所有记录。因此,如果 2.000.000 的一条记录失败,则 2.000.000 条记录都不会进入数据库。

我通过事先清理 CSV 数据设法解决了一个问题源,但我仍然遇到重复行的问题。

我尝试通过在 NIFI 中将 CSV 拆分为单行,然后将它们传递到 PutDatabaseRecord 处理器来解决这个问题,这真的很慢并且经常导致 OOM 错误。

有人可以建议一种在 SQL 数据库中插入大型 CSV 的替代方法吗?

【问题讨论】:

    标签: csv apache-nifi


    【解决方案1】:

    您应该能够使用ValidateCsvValidateRecord 来执行数据类型的工作和其他验证。检测大文件中的重复项很困难,因为您必须跟踪所看到的所有内容,这可能会占用大量内存。如果您有一列可用于检测重复项,请尝试在该列上使用唯一约束的 ValidateCsv,并将验证策略设置为逐行。这应该将所有有效行保持在一起,以便您之后仍然可以使用 PutDatabaseRecord。

    或者,您可以将 CSV 拆分为单行(使用至少两个 SplitText 或 SplitRecord 处理器,一个将流文件拆分为较小的块,然后将较小的块拆分为单独的行)并使用 DetectDuplicate删除重复的行。此时,您可能希望使用 MergeContent 或 MergeRecord 之类的东西来捆绑行备份,以便 PutDatabaseRecord 更有效地使用

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-19
      • 1970-01-01
      • 1970-01-01
      • 2019-09-11
      • 2021-10-21
      • 2014-11-26
      • 1970-01-01
      相关资源
      最近更新 更多