1 前言
在使用表输出输出数据到数据库时,因数据库约束检查等原因造成数据无法正常入库.这时"表输出"步骤若是没有定义错误处理的话,transformation转换会报出异常并且停止进行运行.
为了保证程序的正常运行,我们可以在transform安通转换中"表输出"步骤中定义错误处理.此种方式可以捕获异常数据并持久化保存到硬盘或数据库中,利于后期数据的分析,来提高数据质量.
2 错误处理设置
错误处理,处理步骤如下:
image.png
在可能出错的组件上单击鼠标右键,选择Error Handling.填写相应的信息字段,然后将错误信息写入数据库或者文件中.
image.png
image.png
入库错误日志表展示如下:
image.png
3 错误处理里面的坑
然而,在转换"表输出"上设置错误处理时,会提示如下信息:
image.png
翻译为:警告!由于驱动程序的限制,在使用的数据库上不完全支持与批处理结合的错误处理。请谨慎行事,风险自负。
也就是说当进行批处理操作时,设置错误处理可能会出现异常信息漏捕获的情况.我案例中生成异常信息1692个,而实际只捕获到168个.
而当"表输出"操作取消批处理时(如下设置),就可以全部捕获异常信息.然后为了保证正确数据被处理,同时不缺失异常信息而让每次提交的数据量设置为1,这样会大大降低效率.
image.png
解决方案: 创建一张和指定表结构完全相同的表,只是不设置任何数据库约束(主键).然后先将数据全部接收进这张表,再在数据库层面进行去重后插入另外一张指定的表中.这样既可以保留所有原数据,又可以实现数据去重.
4 参考文章:
(1) Kettle中定义错误处理: https://blog.csdn.net/feng19821209/article/details/9120561
(2) KETTLE 执行转换时遇到错误,记录并继续运行: https://blog.csdn.net/shenlong_no1/article/details/78819453