我在不同位置有3个文件,我使用3个列表文件处理器,然后是获取文件处理器。现在我想将这些文件路由到各自的目的地,这对于所有3个文件都是不同的。需要一些帮助来解决这个问题。
由于
答案 0 :(得分:3)
根据您上面提到的路由逻辑,您可以将流程设为:
$("#menu")
在ListFile(s) -> FetchFile(s) -> RouteOnAttribute -> PutFile(s)
中,您可以使用NiFi Expression Language支持。例如,您可以有三个属性:
RouteOnAttribute
<强>解释强>
您将有三个destination.one : ${filename:startsWith('abc')}
destination.two : ${filename:startsWith('def')}
destination.three : ${filename:startsWith('xyz')}
处理器连接到三个ListFile
处理器。然后将所有三个处理器的FetchFile
输出连接到Success
,在定义上述三种关系后,您可以将三种关系连接到相关的RouteOnAttribute
处理器。
在上面的示例中,PutFile
将名称以RouteOnAttribute
开头的文件路由到关系abc
,以destination.one
开头的文件名转到def
等等。
答案 1 :(得分:0)
您可以使用简单的if else语句,并在flowfile属性上设置目标,因此可以在单个处理器中执行相同的操作。您可以根据单个处理器上的线程数进一步调整它们,以获得干净的布局。 PFB示例假定hostname1将文件放入hostnameX / path1,hostname2将文件放入hostnameY / path2:
您的putfile路径的新属性= $ {sftp.remote.hostname:equals('hostname1'):ifElse('hostnameX / path1','hostnameY / path2')}
在n个主机名及其对应的目的地的情况下,您可以进一步嵌套ifElse并将其新属性用作目的地。