如何提高 CSV 数据到 SQL Server 中的数据处理速度?

Posted

技术标签:

【中文标题】如何提高 CSV 数据到 SQL Server 中的数据处理速度?【英文标题】:How to increase data processing speed in CSV data into 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 处理器中。 再次尝试解决问题。请不要只回滚那些试图对你的真正糟糕的语法/语言更有意义的更改。 【参考方案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 语句以摄取它。

以上是关于如何提高 CSV 数据到 SQL Server 中的数据处理速度?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 SQL Server 2005 查询导出到 CSV

如何把csv文件导入到sql数据库

java实现把csv文件导入到sqlserver

将CSV文件中的数据导入到SQL Server 数据库中

把csv文件导入到SQL Server表中

将超过 255 个字符从 excel 导入到 sql server(上一个问题 - 如何使用 ssis 将文本限定 CSV 动态加载到 sql server)