【发布时间】:2021-08-05 02:44:37
【问题描述】:
我需要设置自动化流程来将大量数据(显然是数百万行)从平面文件传输到 SQL Server。我知道我们可以使用 Java IO 库来做到这一点,但这会非常慢。还有哪些其他选项可以加快执行速度?
【问题讨论】:
-
这是您之前关闭的问题的副本。请不要那样做。
标签: sql-server file data-transfer
我需要设置自动化流程来将大量数据(显然是数百万行)从平面文件传输到 SQL Server。我知道我们可以使用 Java IO 库来做到这一点,但这会非常慢。还有哪些其他选项可以加快执行速度?
【问题讨论】:
标签: sql-server file data-transfer
如果文件是 .sql,那么我建议使用 sqlcmd 文件来导入它。如果它不是那种格式,那么你可以在 c# 中使用blockingCollection并行读取一个大文件,这也很酷,因为你可以限制有多少线程将执行导入,你甚至可以有逻辑得到核心数等,然后根据需要决定线程数。
【讨论】:
在 SQL Server 中,有一个单独的工具 bcp.exe 可用于此目的。这是向表中插入数据的最快方式。
加载 tsv 文件的简单示例(bcp 的默认格式为 tsv)
bcp.exe DBName.SchemaName.TableName IN "C:\inputFile.tsv" -c -T -S "TargetServerName"
如果你想使用 tsql 路由,你可以使用BULK INSERT 命令。您需要先生成格式文件,然后使用BULK INSERT 命令插入到表格中。
BCP DBName.SchemaName.TableName format nul
-x -S ServerName -c -f C:\inputFileFormat.xml-t, -T
BULK INSERT DBName.SchemaName.TableName
FROM "C:\inputFile.tsv"
WITH (FORMATFILE = 'C:\inputFileFormat.xml');
GO
【讨论】: