如何在Pentaho Data Integration中过滤错误整数数据并分流至日志?
解决Kettle文本数据整数校验与分流方案
核心思路
先以字符串全量读取数据,避免读取阶段因类型转换失败中断流程,再通过正则校验筛选有效数据,最后分流处理有效/无效数据。
具体步骤
Text File Input 读取配置
- 选择input.txt文件,分隔符设置为制表符(Tab),确保两列数据正确识别。
- 把两列的元数据类型都设为
String,不要提前设为Integer,避免读取带/的行时直接报错。
Regex Evaluator 验证整数有效性
- 添加Regex Evaluator步骤,配置:
- 要校验的字段:选择第二列(比如字段名设为col2)
- 正则表达式:
^\\d+$(匹配纯数字字符串,无任何非数字字符) - 目标字段名:
is_valid,类型设为Boolean
- 这个步骤会给每行数据添加一个标记:有效行的
is_valid为True,含/的无效行为False。
- 添加Regex Evaluator步骤,配置:
Filter Rows 分流数据
- 添加Filter Rows步骤,设置条件:
is_valid = True - 满足条件的分支(有效数据):
- 用Select Values或Convert Fields步骤,把第二列的类型从
String转换为Integer,之后连接数据库输出步骤写入目标库。
- 用Select Values或Convert Fields步骤,把第二列的类型从
- 不满足条件的分支(无效数据):
- 用Text File Output步骤,把整行数据(或包含错误信息的字段)写入日志文件;如果是要写入系统日志,也可以用Write to Log步骤。
- 添加Filter Rows步骤,设置条件:
为什么之前的方法失败?
如果一开始就在Text File Input里把第二列设为Integer,Kettle在读取阶段遇到带/的字符串时,会直接抛出String : couldn't convert String to Integer错误并中断流程,根本到不了后续的Filter或Validator步骤。必须先以字符串读取,再做校验和转换,才能实现错误数据的分流处理。
内容的提问来源于stack exchange,提问作者wolfderby
相关产品推荐
相关产品推荐

