2016-05-30 27 views
4

Nifiに新着!PutFile添付ファイル

"PutFile"などのプロセッサを使用して1つのファイルに書き込む(このファイルにデータを追加するか、このファイルにデータを上書きする)方法があるかどうか疑問に思っています。複数の異なるファイルを作成するのではなく、これを達成するために使用する必要がある別のプロセッサはありますか?

答えて

3

現在、ファイルにデータを追加する方法はありませんが、PutFileを使用してファイルを上書きすることはできます。

PutFileプロセッサは、FlowFileの属性 "filename"を使用してファイルをディスクに書き込みます。したがって、すべての着信FlowFilesを同じ「ファイル名」に更新するPutFileの前にUpdateAttributeプロセッサーを置くと、PutFileプロセッサーはディスク上に同じファイル名ですべてを書き込みます。

PutFileでこれを行うには、プロセッサプロパティ "競合解決方針"を "Replace"に設定してください。

2

申し訳ありません。これは初めてです。もう一度お試しください...

LogAttributeプロセッサは、ファイルに最も近い機能を提供するように見えるため、オプションになる可能性があります。しかし、出力を指示するオプションがほとんどないため、理想的ではないようです。

カスタマイズするクラスを開発するのではなく、「すぐに使用できる」プロセッサー機能を使用する場合は、もう2つの方法があります。 ExecuteScriptプロセッサを使用して、必要な属性のみを含むように出力フローファイルを変更するJython、Groovy、またはJSスクリプトを実行します。それに続いて、PutMongoまたはPutSQLプロセッサーを使用して、永続データベース・リソースを更新します。

データベースリソースを自由に使用することができない場合は、上記のExecuteScriptプロセッサーと、一意の名前付きファイル名属性を出力するPutFile($ {filename}など)を使用します。$ { uuid}。同様にフォーマットされた多数のファイル(ファイルごとに1つのログレコード)を作成し、Linuxのラインコマンドを使用して解析するために1つのファイルにロールアップするか、ワークフローで最後のExecuteScriptプロセッサを使用して毎回ロールアップしますファイルはワークフローを通じて処理されます。この最後の方法は良い考えではないかもしれません。なぜなら、フローファイルのストリームが高い場合に、同期を導入し、競合の問題を書き込むかどうかが明確でないためです。

+0

ありがとうございます!これは、あなたの応答で言及したように、このタスクを実行するために「すぐに使える」プロセッサーを探している人にとって役に立ちます。私は実際にカスタムプロセッサを作成することでこれを解決しました – BigBug