1. kettle插件开发的四个常用的接口介绍
1.1 转换步骤插件开发至少需要实现 四个接口:
1)StepMetaInterface:该接口主要是针对元数据的处理,加载xml文件,校验,主要针对一个步骤的定义基本数据.在转换开始之前,kettle会调用init()方法。转换运行将仅在所有步骤从init()调用成功后才开始。在步骤完成调用dispose()时,该步骤用于关闭资源,如文件句柄(用来定位打开的文件在内存中的位置, 文件句柄定位到的是文件对象,而非文件。而文件对象是对这个文件的一些状态、属性的封装,例如读取到的文件位置等)、高速缓存等。在实际处理时,kettle将会调用run方法(RunThread类中),而run经常调用的是proccessRow(),直到没有什么要处理,或者转换已经停止。调用proccessRow()用来处理单行的数据。这个方法会调用getRow()调用来获取一行进行处理。随后proccessRow()将会执行转换工作,并调用putRow()。
2)StepDataInterface:数据处理涉及具体数据以及数据的状态的设置和回收。
3)StepInterface:负责数据处理,转换和流转。这里主要由proccessRow()方法来处理。
4)StepDialogInterface:提供GUI/dialog,编辑步骤的元数据。
2. kettle中相关类的命名规则
StepInterface的实现类以插件的功能相关命名:*.java
StepDataInterface的实现类:*Data.java
StepMetaInterface的实现类:*Meta.java
StepDialogInterface的实现类:*Dialog.java
3. 转换执行过程
3.1 简单代码
这段代码是根据已经生成的ktr文件进行操作的
KettleEnvironment.init();
TransMeta transMeta = new TransMeta("etl/capturing_rows.ktr");
Trans trans = new Trans(transMeta);
trans.prepareExecution(null);
trans.startThreads();//执行该方法的时候,将会调用proccessRow()方法对每一行进行操作
trans.waitUntilFinished();
3.2 添加行监听器
获取转换的所有步骤:
String[] stepNames = TransMeta.getStepNames();//获取转换的所有的步骤的名称
StepInterface stepInterface = trans.getStepInterface(stepName,copy);//获取执行步骤
添加对应步骤的监听器
stepInterface.addListener(new RowAdapter(){
@Override
public void rowReadEvent(RowMetaInterface rowMeta, Object[] row) throws KettleStepException {
//具体的读取的过程
}
public void rowWrittenEvent(RowMetaInterface rowMeta, Object[] row) throws KettleStepException {
//具体写的具体过程
}
});
添加监听器之后的执行顺序:
在proccessRow()方法中,将会先调用getRow()方法,在getRow()方法中如果没有读取到数据,将会返回null,也不会执行对应的监听器。如果有数据,将会执行窃听器中的rowReadEvent方法。之后在调用putRow()方法时,将会执行rowWrittenEvent()方法。
3.3 转换监听器
代码如下所示:
```
trans.addTransListener(new TransListener() {
@Override
public void transStarted(Trans trans) throws KettleException {
//转换开始的事件
}
@Override
public void transActive(Trans trans) {
//转换进行的操作
}
@Override
public void transFinished(Trans trans) throws KettleException {
//转换结束的操作
}
});
4. kettle 其他对象说明
4.1 Row对象是kettle用来表示一行数据的标准对象,跟jdbc取出来的一条数据转化后成为的一个POJO是一样的。里面可以包含多个字段。
4.1 MemoryMetaData对象是pentaho特有的,是专门用来返回ETL任务执行后的结果的,与标准的JDBC里面的resultSet 对应的resultSetMetaData 是一样的。
4.3 对于如何处理数据的一个Listener,实现的是一个RowListener,数据是每一行每一行处理的,后面会介绍如果需要输出数据怎么取得这些输出数据。如果不需要放回任何对象,则从1处开始都可以不要,只要初始化step对象即可。