2017-12-29 17 views
0

SFTPサイトからCSVファイルを読み込み、Nifiを使ってmysql dbにロードしています。Nifi - mysql dbテーブルに切り捨ててロードする

以下のワークフローがうまくいきます。データロードを開始する前にテーブルを切り捨てる方法を理解するには、ちょっとした助けが必要です。

Nifiフロー:

ListSFTP - > FetchSFTP - > InferAvroSchema - > ConvertCSVtoAvro - > ConvertAvrotoJSON - > SplitJSON - > ConvertJSONtoSQL - > PutSQL

この流れが正常に動作するようですしかし、私はこれを実行するたびに、私は最初に切り捨てられ、その後、負荷を開始するテーブルが必要です。

誰かが私がこれをどのように達成できるかについての情報を手伝ってくれますか?または、私が書いたものより良い流れがある、助言してください。私は「切り捨て挿入する前に」の部分に入る前に

おかげで、 Aadil

答えて

1

は、私はPutDatabaseRecordでConvertCSVtoAvroからPutSQLにすべてを置き換えることをお勧めします。基本的には "ConvertXtoSQL-> PutSQL"を一緒に実行し、SQL文を実行するだけのすべての変換の必要性を軽減します。

挿入部分の前にトランケートが少しトリッキーです。 NIFI-4522経由のNiFi 1.5.0(この執筆時点ではまだリリースされていません)では、SQLコマンドの実行中にフローファイルの内容を保持することができます。これは、PutDatabaseRecordの前に、 "SQL文"を "TRUNCATE myTable"に設定したPutSQLを持つことができることを意味します。 PutSQLはTRUNCATEを発行しますが、フローファイルを渡します。

私が今考えている唯一の回避策は、ExecuteScriptプロセッサです。 PutDatabaseRecordを使用している場合は、DBCPConnectionPoolを名前で取得する必要があります(たとえば、my blog postを参照)。TRUNCATE文を自分で実行してから、着信フローファイルを渡します。上記のフローをPutSQLで使用している場合は、着信フローファイルを取得し、fragment.indexが0で、接続でPrioritizerを使用している場合にのみ、 "TRUNCATE myTable"フローファイルを書き出してから、着信フローを転送しますファイル。

+1

ありがとうございました! これはちょうど完全にうまくいった。 Executeスクリプトのブログ記事も役立ちます。 –

関連する問題