ExecutionScript输出两个不同的流文件NIFI

时间:2016-12-21 13:44:02

标签: apache-nifi

我正在使用带有python的executionScript,并且我有一个数据集,它可能有一些损坏的数据,我的想法是处理好的数据,并把它放在我的流程文件内容中我的成功关系和损坏的一个重定向他们在失败的关系中,我做过这样的事情:

for msg in messages :
   try :
        id = msg['id']
        timestamp = msg['time']
        value_encoded = msg['data']
        hexFrameType = '0x'+value_encoded[0:2]          
        matches = re.match(regex,value_encoded)
        ....
    except:
        error_catched.append(msg)

        pass

任何想法我该怎么做?

1 个答案:

答案 0 :(得分:4)

出于本答案的目的,我假设您有一个名为“flowFile”的传入流文件,您从session.get()获取该文件。如果您只是想检查flowFile的内容,然后根据发生的错误将其路由到成功或失败,那么在您的成功路径中,您可以使用:

headerFormat    
    Expected copyright and license header

在您的错误路径中,您可以执行以下操作:

session.transfer(flowFile, REL_SUCCESS)

如果您想要新文件(可能在上面的循环中包含一个“msg”),您可以使用:

session.transfer(flowFile, REL_FAILURE)

使用输入流文件作为父文件创建新的流文件。如果要写入新的流文件,可以使用my blog post中描述的PyStreamCallback技术。

如果您创建新的流文件,请确保使用上面描述的session.transfer()调用将其最新版本传输到REL_SUCCESS或REL_FAILURE(但使用outputFlowFile而不是flowFile)。此外,您还需要删除传入的流文件(因为您已经从中创建了子流文​​件并转移了它们)。为此,您可以使用:

outputFlowFile = session.create(flowFile)