我正在使用nifi进行数据漂移。在我的流程中使用SelectHiveQL处理器。 selectHiveQL的输出(flowFile)需要带入下一个处理器。 将flowFile内容存储到用户定义变量中的合适处理器是什么,必须使用Executescript中的相同变量来处理数据。
答案 0 :(得分:3)
ExecuteScript
处理器可以通过标准API直接访问传入流文件的内容。这是一个示例:
def flowFile = session.get();
if (flowFile == null) {
return;
}
// This uses a closure acting as a StreamCallback to do the writing of the new content to the flowfile
flowFile = session.write(flowFile,
{ inputStream, outputStream ->
String line
// This code creates a buffered reader over the existing flowfile input
final BufferedReader inReader = new BufferedReader(new InputStreamReader(inputStream, 'UTF-8'))
// For each line, write the reversed line to the output
while (line = inReader.readLine()) {
outputStream.write("${line.reverse()}\n".getBytes('UTF-8'))
}
} as StreamCallback)
flowFile = session?.putAttribute(flowFile, "reversed_lines", "true")
session.transfer(flowFile, /*ExecuteScript.*/ REL_SUCCESS)
将流文件内容移动到属性是危险的,因为在NiFi中对属性和内容内存的管理不同。 Apache NiFi In Depth指南中有更详细的解释。
答案 1 :(得分:1)
您可以使用ExtractText将流文件的内容提取到属性。
在ExtractText处理器中,您将创建一个属性(赋予该属性的名称将是流文件中的新属性),并且该属性的值将为正则表达式(\A.+\Z)
。以我的经验,此正则表达式足以捕获流文件的全部内容,尽管我认为里程可能会根据流文件中内容的类型而有所不同。