【问题标题】:How to increase data processing speed in CSV data into SQL Server?如何提高 CSV 数据到 SQL Server 中的数据处理速度?
【发布时间】:2016-10-14 06:46:30
【问题描述】:

我使用了 Nifi-0.6.1 和 GetFile+SplitText+ReplaceText 处理器的组合来拆分具有 30MB(300 000 行)的 csv 数据。

GetFile 能够非常快速地将 30mb 传递给 SplitText。

In SpliText +Replace Text 需要 25 分钟才能将数据拆分为 Json。

仅 30 mb 的数据需要 25 分钟才能将 csv 存储到 SQL Server。 它逐字节执行转换。

我已经尝试过处理器中的并发任务选项。它可以加快速度,但也需要更多时间。那时它达到了 100% cpu Usage。

如何更快地将 csv 数据执行到 sql Server 中?

【问题讨论】:

  • “30 万行”?!这意味着什么?此外,还有本机 BULK INSERT 语句将 CSV 数据加载到 SQL Server 中。也许你先试试这个。
  • 我只能在 SQL Server 中执行批量插入。但我的情况完全集中在 Apache Nifi 处理器中。
  • 再次尝试解决问题。请不要只回滚那些试图对你的真正糟糕的语法/语言更有意义的更改。

标签: json csv apache-nifi


【解决方案1】:

您传入的 CSV 文件有大约 300,000 行?您可以尝试使用多个 SplitText 处理器分阶段分解。一次大拆分可能会对系统资源造成很大负担,但将其分成多个阶段可以使您的流程更加顺畅。通常建议的最大值是每次拆分 1,000 到 10,000 之间。

更多详情请见this answer

【讨论】:

  • 我已经使用了 4 个拆分文本处理器来拆分这些行,但使用单个替换文本,从中获取行需要更多时间。例如:数据输入大小为 30MB 转换为 json 后增加到 70MB。所以将 json 移到 SQLServer 需要很长时间
【解决方案2】:

您提到将数据拆分为 JSON,但您使用的是 SplitText 和 ReplaceText。您传入的数据是什么样的?您是否尝试转换为 JSON 以使用 ConvertJSONtoSQL?

如果您有 CSV 传入,并且您知道列,SplitText 应该很快拆分行,并且 ReplaceText 可用于创建供 PutSQL 使用的 INSERT 语句。

或者,正如@Tomalak 提到的,您可以尝试将 CSV 文件放在 SQLServer 可以访问它的位置,然后使用 PutSQL 发出 BULK INSERT 语句。

如果这些都不够,您可以使用 ExecuteScript 执行拆分、列解析和转换为 SQL 语句。

【讨论】:

  • 我的传入数据是 CSV 文件。我使用 4 个拆分文本和一个替换文本。是的,我已经使用 CovertJsonToSQL 将这些数据转换为 Json。PutSQL 只有插入,仅更新而不是批量插入语句。如果有的话我做错了,请更新我。
  • PutSQL 将执行任何不返回结果集的语句(可调用语句除外)。因此,您可以发出 INSERT、UPDATE、CREATE TABLE、BULK INSERT 等。如果您打算使用 BULK INSERT,您不会想使用 SplitText 或 ConvertJsonToSQL。相反,您将暂存 CSV 文件,以便数据库可以访问它,然后通过 PutSQL 发送 BULK INSERT 语句以摄取它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-11-13
  • 2017-08-06
  • 1970-01-01
  • 1970-01-01
  • 2021-01-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多