注:ApacheのNiFi 1.3.0+のバージョンを使用している場合は、Mattの方法が優れている
私の推薦はExecuteScript
プロセッサを使用して、これを行うためにGroovyのを使用することです。私はあなたが最終的にあなたが探しているものと一致する正規表現を作ることができると信じていますが、あなたが注意しているように、パフォーマンスは良くならないでしょう、そして、より大きいフローファイルが入ったら、ヒープをクラッシュさせるかもしれません。 Groovyで
、これがそうのような単純な文字列置換操作だろうが(やPython/Rubyのは/ etc。):
import org.apache.commons.io.IOUtils
import java.nio.charset.*
def flowFile = session.get()
if(!flowFile) return
flowFile = session.write(flowFile, {inputStream, outputStream ->
def elements = IOUtils.toString(inputStream, StandardCharsets.UTF_8).split(",")
// Rather than hardcoding, you could make the column index also read from a flowfile attribute to make this more generic
elements[2] = flowfile.getAttribute("myAttributeName")
def outputString = elements.join(",")
outputStream.write(outputString.getBytes(StandardCharsets.UTF_8))
} as StreamCallback)
session.transfer(flowFile, REL_SUCCESS)
スキームは時折変更される場合があります。だからこそ、私はアップデート・レコード・プロセッサーを使いたくなかったのです。しかし、私はそれをあなたの返信に感謝します。@mattyb – user4321
レコード対応のプロセスはスキーマの移行を考慮して設計されており、正規表現よりも保守性が高いはずです。 – mattyb