ValidateCsv

文档中心 › 组件索引 › ValidateCsv

ValidateCsv Processor

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

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

描述

根据用户指定的 CSV 架构验证 FlowFiles 的内容或 FlowFile 属性值。 请查看该处理器的附加文档以获取一些架构示例。

标签

csvschemavalidation

属性

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

名称默认值可选值描述
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 内容。
支持表达式语言:是(仅使用环境/系统变量求值)
Headertrue
  • true
  • false
如果传入的 FlowFile 包含要忽略的标头,则为 true,否则为 false。
Delimiter Character,在传入数据中用作“分隔符”的字符。 例子: ,
支持表达式语言:是(使用 FlowFile 属性与环境/系统变量求值)
Quote Character"传入数据中用作「引号」的字符。例如:\"
支持表达式语言:是(使用 FlowFile 属性与环境/系统变量求值)
Max Lines Per Row0一行可以跨越的最大行数,超过则抛出异常。此选项允许处理器在遇到引号不匹配的 CSV 时快速失败——正常行为是继续读取直到找到匹配的引号,这可能导致读取整个文件(并耗尽所有可用内存)。零值将禁用此选项。
End of Line Symbols\n在传入数据中用作“行尾”的符号。 示例:\n
支持表达式语言:是(使用 FlowFile 属性与环境/系统变量求值)
Validation StrategyFlowFile validation
  • Line by line validation — 如果发现错误,输入 CSV 文件将被拆分为两个 FlowFile:一个路由到 'valid' 关系,包含所有正确的行;另一个路由到 'invalid' 关系,包含所有不正确的行。如果在 schema 定义中使用 Unique 单元处理器时选择此选项,请注意:第一次出现将被视为有效,后续的则视为无效。
  • FlowFile validation — 一旦在 CSV 文件中发现错误,验证将停止,整个 FlowFile 将被路由到 'invalid' 关系。此选项提供最佳性能。
将输入文件路由到输出关系时应用的策略。
Include Violationsfalse
  • true
  • 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 有两列。第一列的任何值都不能包含给定字符串之一,第二列的所有值都必须包含 给定字符串。