如何提高 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 中的数据处理速度?的主要内容,如果未能解决你的问题,请参考以下文章
将超过 255 个字符从 excel 导入到 sql server(上一个问题 - 如何使用 ssis 将文本限定 CSV 动态加载到 sql server)