2017-06-08 4 views
0

私は1台のマシンでnifiインスタンスを実行しており、別のマシンにSQL Serverを持っています。1台のマシンから別のマシンにSQLServerへバルク挿入する方法は?

ここでは、SQL Serverの一括挿入クエリで一括挿入操作を実行しようとすることができます。私は1台のマシンからデータを挿入して別のマシンのSQL Serverに移動することはできません。

同じマシンでnifiとSQL Serverを実行すると、簡単にバルク挿入操作を実行できます。

私はGetFile->ReplaceText(BulkInsertQuery)-->PutSQLプロセッサを設定しました。

私は単一マシンでnifiとsqlサーバーの両方を試していますが、一括挿入は機能しますが、異なるマシンに両方のインスタンスがあると動作しません。

あるマシンからすべてのデータを取得し、そのデータを別のマシンで実行されるSQLに移動するためのクエリを作成する必要があります。クエリ以下

ときに、同じマシンでnifiとSQL Server

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

私は別のマシンで、そのクエリを実行した場合に動作し、それは言う.. "FileNotFoundError"によるホスト1機で「input.csv」へSQL Serverマシン(host2)でクエリを実行します

誰でも私にこのことを提案できますか?

+0

あなたがこれを読んでなかった:[https://stackoverflow.com/questions/41489816/connect-sql-to-apache-nifi] –

+0

@PrabhatGは、私はすでに、すべての行のフォームInsertQueryがway.Thoseであることを試してみました少量のデータに対してはうまくいくが、膨大な量のデータがあるため、私は一括挿入操作を選択している。 –

+0

一括挿入: 'bcp'ユーティリティを呼び出すのですか? https://docs.microsoft.com/en-us/sql/tools/bcp-utility – daggett

答えて

3

SQLクエリは、SQL Serverアプリケーションをホストするマシン上で実行されています。クエリはファイルシステムパスで受信データを定義するため、そのパスを解決しようとするマシンはSQLマシンです。そのパスにデータが存在しないため、ロードできません。

  1. NiFiを使用して、SQLクエリ実行中にロードするSQL Serverインスタンス上の場所にデータを移動します。 GetFile/PutFTP、またはExecuteStreamCommandRoboCopy(Windowsアナログ:rsync)を使用することができます。これにより、コンテンツをNiFiにまったく持ち込むことを避けることができます。
  2. ローカルシステムのデータをコンテンツリポジトリに取り込み、ファイルシステムパスを提供するのではなく、実際のデータを読み込むSQL挿入文を作成するのにNiFiを使用します。
1

私はコメントできません。これは頼りないかもしれませんが、別々のマシンで実行すると、バッチジョブプリフォームを共通のネットワークロケーションに移動できない可能性がありますか?または、必要なデータをSQLマシン上のある場所にFTPしますか? Nifiが何であるかわからないので、わからないですが、nifiがSQLとNIFIマシンの両方からアクセスできる共通の場所にデータを移動させることが、私がやる最初のことです。次に、この場所を指して一括挿入を実行します。

BULK INSERT BI FROM 'Some network directory' WITH 'you with clauses' 
関連する問題