2017-06-08 21 views
0

我在一台机器上运行nifi实例,并在另一台机器上安装了SQL Server。如何从一台机器执行到SQLServer的大容量插入?

在这里,我可以尝试在SQLserver中使用批量插入查询执行批量插入操作。但我无法从一台机器插入数据并将其移入另一台机器中的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"因“input.csv”在主机1机但在SQL服务器机器(主机2)运行查询

任何人都可以给我建议这样做吗?

+0

你读过这个:[https://stackoverflow.com/questions/41489816/connect-sql-to-apache-nifi] –

+0

@PrabhatG我已经试过这种方式。那些形式InsertQuery的每一行适用于少量的数据,但我有大量的数据,这就是为什么我选择批量插入操作。 –

+0

批量插入:你的意思是调用'bcp' util? https://docs.microsoft.com/en-us/sql/tools/bcp-utility – daggett

回答

3

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

  1. 使用NiFi将数据移动到SQL查询执行期间要加载的位置。您可以使用GetFile/PutFTPExecuteStreamCommandRoboCopy(与rsync对应的Windows模拟) - 这样可以避免将内容带入NiFi。
  2. 使用NiFi将本地系统中的数据提取到内容存储库中,然后创建一个读取实际数据而不是提供文件系统路径的SQL插入语句。
1

因为我不能评论,这可能是愚蠢的要求,但是当你在两台独立的机器上运行时,你是否可以没有批量作业瓶坯移动到一个通用的网络位置?或者将所需的数据通过FTP传输到SQL计算机上的某个位置? 由于我不知道Nifi是什么,我不确定,但确保nifi将数据移动到您的SQL和NIFI机器可访问的常见位置是我会做的第一件事。然后在指向此位置的同时运行批量插入。

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