ScriptedPartitionRecord Processor
描述
接收面向记录的数据(即可以通过配置的记录读取器读取的数据)并计算
标签
属性
| 名称 | 默认值 | 可选值 | 描述 |
|---|---|---|---|
| Record Reader | | 控制器服务 API:RecordReaderFactorycn.org.acal.lynxus-lynxus-standard-services-api-nar-2.11.8 | Record Reader用于将传入的FlowFile解析为记录 |
| Record Writer | | 控制器服务 API:RecordSetWriterFactorycn.org.acal.lynxus-lynxus-standard-services-api-nar-2.11.8 | 记录转换后用于序列化记录的Record Writer |
| Script Engine | 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.count | FlowFile中的记录数。 |
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")