RouteOnAttribute Processor
描述
使用属性Expression Language根据属性路由 FlowFiles
标签
使用场景
使用 Lynxus 表达式语言根据数据的属性将数据路由到一个或多个关系。
将 "Routing Strategy" 属性设置为 "Route to Property name"。
对于 FlowFile 可能被路由到的每个路由,添加一个新属性。该属性的名称应描述该路由。
该属性的值是一个 Attribute Expression Language 表达式,返回一个布尔值,指示给定的 FlowFile 是否将被路由到 关联的关系。
例如,我们可以使用以下属性根据文件扩展名路由数据:
- "Routing Strategy" = "Route to Property Name"
- "jpg" = "${filename:endsWith('.jpg')}"
- "png" = "${filename:endsWith('.png')}"
- "pdf" = "${filename:endsWith('.pdf')}"
处理器现在将有 3 个关系:`jpg`、`png` 和 `pdf`。每个都应连接到适当的下游处理器。
仅当数据的属性满足某些条件时保留,例如其文件名以 .txt 结尾。
为保留数据必须满足的每个条件添加一个新属性。
如果满足所提供条件中的任意一个即应保留数据,将 "Routing Strategy" 属性设置为 "Route to 'matched' if any matches"。
如果必须满足所有条件才能保留数据,将 "Routing Strategy" 属性设置为 "Route to 'matched' if all match"。
例如,要保留文件名以 .txt 结尾且文件大小至少为 1000 字节的文件,我们将使用以下属性:
- "ends_with_txt" = "${filename:endsWith('.txt')}"
- "large_enough" = "${fileSize:ge(1000)}
- "Routing Strategy" = "Route to 'matched' if all match"
自动终止(Auto-terminate)'unmatched' 关系。
将 'matched' 关系连接到流程中的下一个处理器。
根据属性(如文件名)丢弃或删除文件。
为丢弃数据必须满足的每个条件添加一个新属性。
如果满足所提供条件中的任意一个即应丢弃数据,将 "Routing Strategy" 属性设置为 "Route to 'matched' if any matches"。
如果必须满足所有条件才能丢弃数据,将 "Routing Strategy" 属性设置为 "Route to 'matched' if all match"。
以下是配置属性的几个示例:
示例 1 用例:如果数据的 "uuid" 属性包含 'a' 或以 '0' 结尾,则应丢弃。
这里,我们将使用以下属性:
- "has_a" = "${uuid:contains('a')}"
- "ends_with_0" = "${uuid:endsWith('0')}
- "Routing Strategy" = "Route to 'matched' if any matches"
示例 2 用例:如果数据的 'uuid' 属性包含 'a' 且以 '1' 结尾,则应丢弃。
这里,我们将使用以下属性:
- "has_a" = "${uuid:contains('a')}"
- "ends_with_1" = "${uuid:endsWith('1')}
- "Routing Strategy" = "Route to 'matched' if all match"
自动终止(Auto-terminate)'matched' 关系。
将 'unmatched' 关系连接到流程中的下一个处理器。
多处理器协同场景
根据记录值是否符合某些条件来路由面向记录的数据
根据传入数据的格式选择合适的 RecordReader。
选择以所需输出格式写入数据的 RecordWriter。
添加一个额外的属性。该属性的名称应描述用于路由的标准。 该属性的值应是一个 RecordPath,当 Record 满足标准时返回 `true`,否则返回 `false`。 这会向 FlowFile 添加一个新属性,其名称等于该属性名。
将 'success' Relationship 连接到 RouteOnAttribute。
将 "Routing Strategy" 设置为 "Route to Property name"
添加两个额外的属性。对于第一个,该属性的名称应描述匹配标准的数据。 该值是一个 Expression Language 表达式,用于检查 PartitionRecord 处理器添加的属性是否具有 `true` 值。 例如 `${criteria:equals('true')}`。
第二个属性的名称应描述不匹配标准的数据。该值是一个 Expression Language,其计算结果为 第一个属性值的相反值。例如 `${criteria:equals('true'):not()}`。
将每个新创建的 Relationship 连接到适当的下游处理器。
属性
| 名称 | 默认值 | 可选值 | 描述 |
|---|---|---|---|
| Routing Strategy | Route to Property name |
| 指定在评估Expression Language时如何确定使用哪种关系 |
动态属性
| 名称 | 值 | 描述 |
|---|---|---|
| 关系名称 | 返回布尔值的表达式语言(Expression Language)表达式,指示 FlowFile 是否应被路由到此关系 | 将属性匹配动态属性值中指定的表达式语言的 FlowFile 路由到动态属性键中指定的关系 |
关系 (Relationships)
| 名称 | 描述 | 自动终止 |
|---|---|---|
unmatched | 不匹配任何用户定义表达式的 FlowFiles 将被路由到此处 | 否 |
写入的 FlowFile 属性
| 名称 | 描述 |
|---|---|
RouteOnAttribute.Route | FlowFile 路由到的关系 |
状态管理
该组件不存储状态。
受限 (Restricted)
该组件不受限。
输入要求
该组件要求有传入连接。
详细说明
RouteOnAttribute
使用示例
此 Processor 使用 Lynxus 表达式语言(Expression Language),根据 FlowFile 的 Attribute 进行路由。 用户添加的属性以合法的 Lynxus 表达式作为值,每个表达式必须返回布尔类型的值(true 或 false)。
示例:目标是将文件名以 ABC 开头的所有文件路由到特定路径。可以添加如下名称和值的属性:
- 属性名:ABC
- 属性值:${filename:startsWith('ABC')}
在本示例中,所有文件名以 ABC 开头的文件都会沿着 ABC Relationship 流转。