我目前的理解是 NiFi 处理器属性特定于该处理器。那么向处理器添加新属性将仅在该处理器中可见,而不会传递给以后的处理器块?
这就是为什么UpdateAttribute
有必要在流文件遍历数据流时添加与流文件一起保留的元数据:
那么,允许用户在处理器中添加超出该处理器执行所定义和所需的自定义属性的价值是什么?是否类似于创建可以在其他属性中使用的变量?
我目前的理解是 NiFi 处理器属性特定于该处理器。那么向处理器添加新属性将仅在该处理器中可见,而不会传递给以后的处理器块?
这就是为什么UpdateAttribute
有必要在流文件遍历数据流时添加与流文件一起保留的元数据:
那么,允许用户在处理器中添加超出该处理器执行所定义和所需的自定义属性的价值是什么?是否类似于创建可以在其他属性中使用的变量?
当他们开始在 NiFi 中构建数据流时,每个人都会想到一个很好的问题。
首先要做的事情:属性与流文件属性
正如您自己在问题本身中提到的那样Properties
,用于控制您的行为的东西是您的行动Processor
中Attributes
的元数据。
一个简单的例子,让我们以GetFile
处理器为例。它公开的属性,例如Input Directory
,File Filter
等,告诉您的处理器在哪里以及如何查找源数据。当处理器成功找到与您的配置匹配的源时,它会启动流程,这意味着FlowFile
生成了 a。这个 FlowFile 将携带源数据的内容以及源的一些元数据,例如文件名、文件大小、上次修改时间等,这些元数据实际上可以帮助您使用后续处理器(如检查文件的类型并相应地路由 FlowFile。请注意,元数据不是固定的;它因不同的处理器而异。
每个处理器都会添加一些核心属性,例如application.type
, filesize
, uuid
,path
等,
让用户在未添加到属性时添加自定义属性的目的是什么?
这是 NiFi 提供给处理器的功能,他们可以使用或忽略。并非所有处理器都允许添加自定义属性。只有选择性处理器可以。
让我们InvokeHttp
举个例子。该处理器允许开发人员创建自定义属性。当用户添加新的自定义属性时,该属性将作为标头添加到处理器将要进行的 HTTP 调用中,因为处理器是以这种方式构建的。它查找任何动态(自定义)属性。如果它们存在,它将被视为用户想要发送的自定义标头。
至少,在此处理器的上下文中,将此标头数据捕获为元数据是没有意义的,因为它可能对后续处理器没有用,但是在提供自定义属性时,某些其他处理器的行为会有所不同,例如UpdateAttribute
其唯一的目的是将任何自定义属性作为属性添加到传入的 FlowFile。