文章目录
  1. 1. 组件开发:支持错误处理
  2. 2. 参考文档

Kettle于2.4.1-M1版本引入错误处理特性。如下图所示,支持错误处理的组件可以向后拖拽出一条红色的线条。当出现错误数据时不会抛出异常终止step,而是将出错行沿着红线向后发送。

错误处理连线

右击组件选择Define error handling…(或者单击红色错误连线上的叉图标),打开错误处理设置界面:

错误处理配置界面

主要配置项:

  • nrErros: (本轮)发生错误行数,绝大多数组件为1
  • errorDescription: 错误堆栈信息
  • errorField: 错误列名;本例中为空因为在表输出组件实现中,jdbc发生错误时没有办法通过JDBC Driver获取具体的出错数据库列名。其他组件是否有值取决于具体的后台实现。
  • errorCode: 错误码,由组件约定;比如表输出组件的TOP001表示常规数据库错误

Note: 这四个列会被后续组件获取到

组件开发:支持错误处理

  1. 在组件Meta实现类中覆盖基类中的supportsErrorHandling()方法,返回true
  2. 后台逻辑实现

通过一个boolean变量标记组件是否启用错误处理模式(后面连着红线),可在构造方法中初始化

1
boolean sendToErrorRow = getStepMeta().isDoingErrorHandling();

在行处理逻辑附近,catch块中进行putError()的调用

1
2
3
4
5
6
7
8
9
if(sendToErrorRow) {
putError( getInputRowMeta(), r, 1, e.toString(), null, "ExchangeFileInput001" );
} else {
logError( BaseMessages.getString(PKG, "ExchangeFile.ErrorInStepRunning", e.getMessage()) );
setErrors( 1 );
stopAll();
setOutputDone(); // signal end to receiver(s)
return false;
}

参考文档

Matt的博客
Step error handling codes

文章目录
  1. 1. 组件开发:支持错误处理
  2. 2. 参考文档