如何使用groovy脚本读取nifi中的多个流文件

问题描述 投票:0回答:1

我有四个(也可能是十个)传入文件,两个流文件具有相同的名称(flowfile1.txt),另一个流文件名称具有相同的名称(flowfile2.txt)。现在我想根据流文件名读取这些流文件并实现一些逻辑,并且必须发送一个流文件以输出到下一个处理器。您能帮忙解决一下吗,下面是场景。流程文件名相同但内容不同

flowfile1.txt
flowfile1.txt

flowfile2.txt
flowfile2.txt

逻辑完成后,我必须将输出发送到下一个处理器,如下所示

Flowfile1.txt(我将读取 flowfile1.txt 并执行一些逻辑,并将输出发送到 flowfile1.txt 并发送到下一个处理器, 也会对 flowfile2.txt 执行相同的操作..

我只需要如何将其读取到groovy脚本中,我将根据我的业务案例实现逻辑

groovy apache-nifi
1个回答
0
投票

首先 - 我不会推荐它。有很多用例需要用脚本硬封面...

考虑使用 MergeContent 处理器。


但是这里有一个脚本作为 ExecuteGroovyScript 处理器的参考:

//get first file from queue
def file0 = session.get()
if(!file0)return

//get all files with the same filename
def fileList = session.get{ it-> it.filename==file0.filename }

def outFile=file0.clone(false) //clone first file with all attributes but without content

outFile.write{ outStream->
  def text = file0.read().getText("UTF-8")  //beware to read whole content into memory on large files
  for(ff in fileList){
      text += ff.read().getText("UTF-8")
  }
  outStream.withWriter("UTF-8"){ writer->
    writer.write(text)
  }
}
//remove original files
session.remove(file0)
session.remove(fileList)

//transfer new file to success
REL_SUCCESS << outFile
© www.soinside.com 2019 - 2024. All rights reserved.