kettle 插件开发以及常用的接口和对象

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中相关类的命名规则

1)StepInterface的实现类以插件的功能相关命名:*.java
2)StepDataInterface的实现类:*Data.java
3)StepMetaInterface的实现类:*Meta.java
4)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对象即可。

猜你喜欢

转载自blog.csdn.net/kone0611/article/details/83650693
今日推荐