RouteOnAttribute

文档中心 › 组件索引 › RouteOnAttribute

RouteOnAttribute Processor

类型全限定名:cn.org.acal.lynxus.processors.standard.RouteOnAttribute

所属 Bundle:cn.org.acal.lynxus:lynxus-standard-nar:2.11.8

描述

使用属性Expression Language根据属性路由 FlowFiles

标签

attributesroutingAttribute Expression LanguageregexpregexRegular ExpressionExpression Languagefindtextstringsearchfilterdetect

使用场景

使用 Lynxus 表达式语言根据数据的属性将数据路由到一个或多个关系。

attributesroutingexpression language
将 "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 结尾。

keepfilterremovedeleteexpression language
为保留数据必须满足的每个条件添加一个新属性。
如果满足所提供条件中的任意一个即应保留数据,将 "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' 关系连接到流程中的下一个处理器。

根据属性(如文件名)丢弃或删除文件。

discarddropfilterremovedeleteexpression language
为丢弃数据必须满足的每个条件添加一个新属性。
如果满足所提供条件中的任意一个即应丢弃数据,将 "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' 关系连接到流程中的下一个处理器。

多处理器协同场景

根据记录值是否符合某些条件来路由面向记录的数据

recordroutecontentdata

配置 PartitionRecord:

根据传入数据的格式选择合适的 RecordReader。
选择以所需输出格式写入数据的 RecordWriter。

添加一个额外的属性。该属性的名称应描述用于路由的标准。 该属性的值应是一个 RecordPath,当 Record 满足标准时返回 `true`,否则返回 `false`。 这会向 FlowFile 添加一个新属性,其名称等于该属性名。

将 'success' Relationship 连接到 RouteOnAttribute。

配置 RouteOnAttribute:

将 "Routing Strategy" 设置为 "Route to Property name"

添加两个额外的属性。对于第一个,该属性的名称应描述匹配标准的数据。 该值是一个 Expression Language 表达式,用于检查 PartitionRecord 处理器添加的属性是否具有 `true` 值。 例如 `${criteria:equals('true')}`。
第二个属性的名称应描述不匹配标准的数据。该值是一个 Expression Language,其计算结果为 第一个属性值的相反值。例如 `${criteria:equals('true'):not()}`。

将每个新创建的 Relationship 连接到适当的下游处理器。

属性

下表中,加粗的属性为必填项;其余为可选项。表格同时标注默认值、是否支持表达式语言,以及是否为敏感属性(值会被加密)。

名称默认值可选值描述
Routing StrategyRoute to Property name
  • Route to Property name — FlowFile 的副本将被路由到其对应表达式求值为 'true' 的每个关系
  • Route to 'matched' if all match — 要求所有用户定义的表达式都求值为 'true',该 FlowFile 才被视为匹配
  • Route to 'matched' if any matches — 要求至少有一个用户定义的表达式求值为 'true',该 FlowFile 才被视为匹配
指定在评估Expression Language时如何确定使用哪种关系

动态属性

动态属性允许用户自定义属性的名称与值。

名称值描述
关系名称返回布尔值的表达式语言(Expression Language)表达式,指示 FlowFile 是否应被路由到此关系将属性匹配动态属性值中指定的表达式语言的 FlowFile 路由到动态属性键中指定的关系

关系 (Relationships)

名称描述自动终止
unmatched不匹配任何用户定义表达式的 FlowFiles 将被路由到此处否

写入的 FlowFile 属性

名称描述
RouteOnAttribute.RouteFlowFile 路由到的关系

状态管理

该组件不存储状态。

受限 (Restricted)

该组件不受限。

输入要求

该组件要求有传入连接。

详细说明

RouteOnAttribute

使用示例

此 Processor 使用 Lynxus 表达式语言(Expression Language),根据 FlowFile 的 Attribute 进行路由。 用户添加的属性以合法的 Lynxus 表达式作为值,每个表达式必须返回布尔类型的值(true 或 false)。

示例:目标是将文件名以 ABC 开头的所有文件路由到特定路径。可以添加如下名称和值的属性:

  • 属性名:ABC
  • 属性值:${filename:startsWith('ABC')}

在本示例中,所有文件名以 ABC 开头的文件都会沿着 ABC Relationship 流转。