kettle的报错解决机制
Posted For_elegant
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了kettle的报错解决机制相关的知识,希望对你有一定的参考价值。
在kettle执行的过程中,如果遇到错误,kettle会停止运行。在某些时候,并不希望kettle停止运行,这时候可以使用错误处理(Step Error Handling)。错误处理允许你配置一个步骤来取代出现错误时停止运行一个转换,出现错误的记录行将会传递给另一个步骤。在Step error handling settings对话框里,需要设置启用错误处理。
下面例子中读取postgres数据库中的a0表数据,然后输出到a1表:
![技术分享](http://dl2.iteye.com/upload/attachment/0089/0026/7626ae7d-9a2e-3650-9614-6cf0a22ad4a7.jpg)
a1表结构如下:
CREATE TABLE a1 ( a double precision, id integer NOT NULL, CONSTRAINT idpk PRIMARY KEY (id ), CONSTRAINT idunin UNIQUE (id ) )
从表结构可以看出,a1表中id为主键、唯一。
a0表数据预览:
![技术分享](http://dl2.iteye.com/upload/attachment/0089/0028/a01830e1-ef73-33f2-a471-e5e76924a21d.jpg)
现在a1表数据为空,执行上面的转换,执行成功之后,a1表数据和a0表数据一致。 再次执行,上面的转换会报错,程序停止运行,会报主键重复的异常。
现在,我想报错之后,程序继续往下执行,并记录错误的记录的相关信息,这时候可以使用“定义错误处理”的功能。 在“表输出”的步骤上右键选择“定义错误处理”,弹出如下对话框。
![技术分享](http://dl2.iteye.com/upload/attachment/0089/0030/d02b2e8f-8664-3689-80f1-08d1dca6e4d5.jpg)
相关字段说明:
- 目标步骤:指定处理错误的步骤
- 启用错误处理?:设置是否启用错误处理
- 错误数列名:出错的记录个数
- 错误描述列名:描述错误信息的列名称
- 错误列的列名:出错列的名称
- 错误编码列名:描述错误的代码的列名
- 允许的最大错误数:允许的最大错误数,超过此数,不在处理错误
- 允许的最大错误百分比:
- 在计算百分百前最少要读入的行数:
添加错误处理后的转换如下:
![技术分享](http://dl2.iteye.com/upload/attachment/0089/0032/ad66d70b-a47c-3b25-a74b-986eff6d9b87.jpg)
记录错误信息的字段列表如下,可以看出,errorNum、errorDesc、errorName、errorCode都是在定义错误处理时候填入的列名称,a、id来自于输入的记录的列。
![技术分享](http://dl2.iteye.com/upload/attachment/0089/0034/ecdb9fcf-b337-3792-bf08-f1858b368f80.jpg)
记录的错误信息如下:
![技术分享](http://dl2.iteye.com/upload/attachment/0089/0036/19c05b50-413d-3784-9788-af8e73f09cfe.jpg)
分析 可以看到,错误日志里只是记录了出错的行里面的信息,并没有记录当前行所在的表名称以及执行时间等等,如果能够对此进行扩展,则该错误日志表才能更有实际意义。
以上是关于kettle的报错解决机制的主要内容,如果未能解决你的问题,请参考以下文章