如何从一台机器到另一台机器批量插入SQLServer?

时间:2017-06-08 10:24:40

标签: sql sql-server sql-server-2008 bulkinsert apache-nifi

我在一台计算机上运行了nifi实例,并在另一台计算机上安装了SQL Server。

在这里,我可以尝试在SQLserver中使用批量插入Query执行批量插入操作。但我无法从一台机器插入数据并将其移动到另一台机器的SQL Server中。

如果我在同一台机器上运行nifi和SQL Server,那么我就可以轻松地执行批量插入操作。

我配置了GetFile->ReplaceText(BulkInsertQuery)-->PutSQL个处理器。

我在单机中尝试了nifi和sql server然后批量插入工作,但是当两个实例都在不同的机器上时不能正常工作。

我需要从一台计算机获取所有数据并编写查询以将该数据移动到另一台计算机上的SQL运行中。

当nifi和sql server在同一台机器上时,以下查询有效

BULK INSERT BI FROM 'C:\Directory\input.csv' WITH (FIRSTROW = 1, ROWTERMINATOR = '\n', FIELDTERMINATOR = ',', ROWS_PER_BATCH = 10000)

如果我在另一台机器上运行该查询,那么它会说...,"FileNotFoundError"由于Host1机器中的“input.csv”而在sql server machine(host2)中运行查询 < / p>

有人可以建议我这样做吗?

2 个答案:

答案 0 :(得分:3)

正在承载SQL Server应用程序的计算机上执行SQL查询。由于查询使用文件系统路径定义传入数据,因此尝试解析该路径的计算机是SQL计算机。该路径上不存在数据,因此无法加载。您有几种方法可以解决这个问题:

  1. 使用NiFi将数据移动到SQL查询执行期间要加载的SQL Server实例上的某个位置。您可以将GetFile / PutFTPExecuteStreamCommandRoboCopy(Windows类似于rsync)一起使用 - 这将避免将内容带入的费用完全是NiFi。
  2. 使用NiFi将数据从本地系统提取到内容存储库,然后制作一个读取实际数据的SQL插入语句,而不是提供文件系统路径。

答案 1 :(得分:1)

由于我无法发表评论,这可能是愚蠢的问题,但是当您在两台独立的机器上运行时,您是否可以将批量作业预制件移至公共网络位置?或者将所需数据FTP到SQL机器上的某个位置? 由于我不知道Nifi是什么,我不确定,但确保nifi将数据移动到SQL和NIFI机器都可访问的公共位置是我要做的第一件事。然后在指向此位置时运行批量插入。

BULK INSERT BI FROM 'Some network directory' WITH 'you with clauses'