ScriptedPartitionRecord

文档中心 › 组件索引 › ScriptedPartitionRecord

ScriptedPartitionRecord Processor

类型全限定名:cn.org.acal.lynxus.processors.script.ScriptedPartitionRecord

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

描述

接收面向记录的数据(即可以通过配置的记录读取器读取的数据)并计算

标签

recordpartitionscriptgroovysegmentsplitgrouporganize

属性

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

名称默认值可选值描述
Record Reader控制器服务 API:
RecordReaderFactory
cn.org.acal.lynxus-lynxus-standard-services-api-nar-2.11.8
Record Reader用于将传入的FlowFile解析为记录
Record Writer控制器服务 API:
RecordSetWriterFactory
cn.org.acal.lynxus-lynxus-standard-services-api-nar-2.11.8
记录转换后用于序列化记录的Record Writer
Script EngineGroovy
  • Clojure
  • Groovy
用于执行脚本的语言引擎
Script Body要执行的脚本主体。 只能使用脚本文件或脚本体之一
Script File要执行的脚本文件的路径。 只能使用脚本文件或脚本体之一
支持表达式语言:是(仅使用环境/系统变量求值)
Module Directory以逗号分隔的文件和/或目录的路径列表,其中包含脚本所需的模块。
支持表达式语言:是(仅使用环境/系统变量求值)

关系 (Relationships)

名称描述自动终止
failure如果 FlowFile 无法从配置的输入格式分区为配置的输出格式,未更改的 FlowFile 将被路由到此关系否
original一旦传入 FlowFile 中的所有记录都已分区,原始 FlowFile 就会路由到此关系。否
success成功分区的FlowFile将被路由到此关系否

写入的 FlowFile 属性

名称描述
partition传出流文件的分区。如果脚本指示分区具有空值,属性将设置为字面字符串"<null partition>"(不含引号)。否则,属性设置为脚本返回的任何值的字符串表示。
mime.type将 mime.type 属性设置为Record Writer指定的 MIME 类型
record.countFlowFile中的记录数。
record.error.message此属性在失败时提供读取器或写入器遇到的错误消息。
fragment.index一个单数,指示从单个父 FlowFile 创建的分区 FlowFile 的顺序
fragment.count从父FlowFile生成的分区FlowFile的数量

状态管理

该组件不存储状态。

受限 (Restricted)

该组件不受限。

详细说明

ScriptedPartitionRecord

说明

ScriptedPartitionRecord 提供了使用脚本语言(例如 Groovy)根据内容 快速、方便地对记录进行分区的能力。有多种方式可以达到相同的行为 (例如使用 PartitionRecord),但使用用户提供的脚本为单条记录 分区决策逻辑开启了广泛的可能性。

对于传入 FlowFile 中遇到的每条记录,所提供的脚本都会被求值一次。 每次调用脚本时,期望它返回一个 object 或 null 值。返回值的 字符串表示用作该记录的"分区"。null 值会单独处理,不会转换为 字符串。所有具有相同分区的记录会被批量放入一个 FlowFile,并 路由到 success Relationship。

该 Processor 维护一个名为 "Records Processed" 的计数器,表示已处理 的记录数量,与分区结果无关。

变量绑定

虽然提供给该 Processor 的脚本不需要提供样板代码或实现任何 类/接口,但它需要某种方式来访问记录和其他所需信息。这通过 变量绑定实现。每次调用脚本时,以下每个变量都会提供给脚本:

变量名 说明 变量类型
record 要处理的记录。 Record
recordIndex 记录在 FlowFile 中从 0 开始的索引。 Long(64 位带符号整数)
log Processor 的日志器。写入该日志器的任何内容都会写入日志,就好像 Processor 自己记录的一样。此外,写入该日志器的任何日志消息都会创建一条公告(bulletin)(默认情况下,Processor 会隐藏级别低于 WARN 的公告)。 ComponentLog
attributes FlowFile Attribute 的键/值对 Map。该 Map 的键和值都是 String 类型。该 Map 是不可变的,任何修改尝试都会抛出 UnsupportedOperationException。 java.util.Map

返回值

脚本会为每条记录单独调用。返回任何可以表示为字符串的对象都是 允许的。该字符串值会被用作给定记录的分区。此外,脚本也可以 返回 null。

示例

以下脚本会按 "stellarType" 字段的值对输入进行分区。

输入示例(CSV):

starSystem, stellarType Wolf 359, M Epsilon Eridani, K Tau Ceti, G Groombridge 1618, K Gliese 1, M

输出示例 1(CSV)- 分区 "M":

starSystem, stellarType Wolf 359,M Gliese 1,M

输出示例 2(CSV)- 分区 "K":

starSystem, stellarType Epsilon Eridani,K Groombridge 1618,K

输出示例 3(CSV)- 分区 "G":

starSystem, stellarType Tau Ceti,G

注意:输出 FlowFile 的顺序不保证。

脚本示例(Groovy):

return record.getValue("stellarType")