ValidateCsv Processor
描述
根据用户指定的 CSV 架构验证 FlowFiles 的内容或 FlowFile 属性值。 请查看该处理器的附加文档以获取一些架构示例。
标签
属性
| 名称 | 默认值 | 可选值 | 描述 |
|---|---|---|---|
| Schema | | 用于验证的 Schema。预期为逗号分隔的字符串,表示要应用的单元格处理器。Schema 定义中允许使用以下单元格处理器:[ParseBigDecimal, ParseBool, ParseChar, ParseDate, ParseDouble, ParseInt, ParseLong, Optional, DMinMax, Equals, ForbidSubStr, LMinMax, NotNull, Null, RequireHashCode, RequireSubStr, Strlen, StrMinMax, StrNotNullOrEmpty, StrRegEx, Unique, UniqueHashCode, IsIncludedIn]。注意:单元格处理器不能嵌套,Optional 除外。如果 Header 为 false,则 Schema 为必填。 支持表达式语言:是(使用 FlowFile 属性与环境/系统变量求值) | |
| CSV Source Attribute | | 包含要验证的 CSV 数据的属性的名称。 如果此属性为空,则将验证 FlowFile 内容。 支持表达式语言:是(仅使用环境/系统变量求值) | |
| Header | true |
| 如果传入的 FlowFile 包含要忽略的标头,则为 true,否则为 false。 |
| Delimiter Character | , | 在传入数据中用作“分隔符”的字符。 例子: , 支持表达式语言:是(使用 FlowFile 属性与环境/系统变量求值) | |
| Quote Character | " | 传入数据中用作「引号」的字符。例如:\" 支持表达式语言:是(使用 FlowFile 属性与环境/系统变量求值) | |
| Max Lines Per Row | 0 | 一行可以跨越的最大行数,超过则抛出异常。此选项允许处理器在遇到引号不匹配的 CSV 时快速失败——正常行为是继续读取直到找到匹配的引号,这可能导致读取整个文件(并耗尽所有可用内存)。零值将禁用此选项。 | |
| End of Line Symbols | \n | 在传入数据中用作“行尾”的符号。 示例:\n 支持表达式语言:是(使用 FlowFile 属性与环境/系统变量求值) | |
| Validation Strategy | FlowFile validation |
| 将输入文件路由到输出关系时应用的策略。 |
| Include Violations | false |
| 如果为 true,validation.error.message 属性将包含第一条无效行的所有违规的列表。请注意,将此属性设置为 true 会稍微降低性能,因为所有列都将被验证。如果为 false,则一旦发现某个列违反指定约束,该行即为无效,并且 validation.error.message 属性中仅包含第一条无效行的此违规信息。 |
关系 (Relationships)
| 名称 | 描述 | 自动终止 |
|---|---|---|
invalid | 不符合指定架构的 FlowFile,或无法识别架构或 CSV 头的 FlowFile,将路由到此关系 | 否 |
valid | 根据架构成功验证的 FlowFile 将路由到此关系 | 否 |
写入的 FlowFile 属性
| 名称 | 描述 |
|---|---|
count.valid.lines | 如果逐行验证,从源数据中提取的有效行数 |
count.invalid.lines | 如果逐行验证,则从源数据中提取的无效行数 |
count.total.lines | 如果逐行验证,则源数据中的总行数 |
validation.error.message | 对于路由到无效的 FlowFiles,第一个验证错误的消息 |
状态管理
该组件不存储状态。
受限 (Restricted)
该组件不受限。
输入要求
该组件要求有传入连接。
详细说明
ValidateCsv
使用说明
Validate CSV Processor 基于 super-csv 库以及 Cell Processors 的概念。 对应的 Java 文档可以在这里找到。
Cell Processor 不能嵌套(除了 Optional,它可以为可能为 null 的值定义一个 CellProcessor), 并且必须以逗号分隔的字符串形式定义在 Schema 属性中。
支持的 Cell Processor 有:
- ParseBigDecimal
- ParseBool
- ParseChar
- ParseDate
- ParseDouble
- ParseInt
- Optional
- DMinMax
- Equals
- ForbidSubStr
- LMinMax
- NotNull
- Null
- RequireHashCode
- RequireSubStr
- Strlen
- StrMinMax
- StrNotNullOrEmpty
- StrRegEx
- Unique
- UniqueHashCode
- IsIncludedIn
以下是一些示例:
Schema 属性: Null, ParseDate("dd/MM/yyyy"), Optional(ParseDouble()) 含义: 输入 CSV 有三列,第一列可以为 null 且无其他约束,第二列必须是符合预期格式的日期, 第三列必须是 double 或 null(无值)。
Schema 属性: ParseBigDecimal(), ParseBool(), ParseChar(), ParseInt(), ParseLong() 含义: 输入 CSV 有五列,第一列必须是 big decimal,第二列必须是布尔值,第三列必须是字符, 第四列必须是整数,第五列必须是 long。
Schema 属性: Equals(), NotNull(), StrNotNullOrEmpty() 含义: 输入 CSV 有三列,第一列的所有值必须彼此相等,第二列的所有值必须不为 null, 第三列的所有值不能是 null/空字符串。
Schema 属性: Strlen(4), StrMinMax(3,5), StrRegex("[a-z0-9\\._]+@[a-z0-9\\.]+") 含义: 输入 CSV 有三列,第一列的所有值长度必须为 4 个字符,第二列的所有值长度必须在 3 到 5 个字符之间(含边界),最后一列的所有值必须匹配给定的正则表达式(电子邮件地址)。
Schema 属性: Unique(), UniqueHashCode() 含义: 输入 CSV 有两列。第一列的所有值必须唯一(所有值都保存在内存中)。第二列的所有值必须 唯一(仅保存输入值的哈希码来保证唯一性)。
Schema 属性: ForbidSubStr("test", "tset"), RequireSubStr("test") 含义: 输入 CSV 有两列。第一列的任何值都不能包含给定字符串之一,第二列的所有值都必须包含 给定字符串。