Kettle开发体系是基于插件的,平台自身提供接口,开发者按照规范实现接口就能进行插件的开发。在Kettle8.1的官方文档上有关于插件非常详细的介绍,如果有任何疑问可以先去官方文档查看。下面先介绍一下需要进行插件开发最基本的原理。
在Kettle中插件涵盖以下四种类型:
1.步骤插件:Kettle中转换的核心对象
2.作业输入插件:Kettle中作业的核心对象
3.数据库插件:数据库连接中的增加新的自定义连接
4.分区插件
这里只介绍转换步骤插件的开发流程。
转换步骤插件实现ETL数据流中数据处理的任务。转换步骤是为输入、处理或输出而设计的。输入步骤从外部数据源(例如文件或数据库)获取数据行。处理步骤使用数据行、执行字段计算和流操作,例如加入或过滤。一个转换步骤插件至少需要实现四个接口
org.pentaho.di.trans.step.StepMetaInterface:元数据的处理,加载xml,校验,主要是对一个步骤的定义的基本数据。
org.pentaho.di.trans.step. StepDataInterface:数据处理涉及的具体数据,以及对数据的状态的设置和回收。
org.pentaho.di.trans.step. StepInterface:负责数据处理,转换和流转。这里面主要由processRow()方法来处理。
org.pentaho.di.trans.step. StepDialogInterface:提供GUI/dialog,编辑步骤的元数据。
对于以上四个接口的实现,都有相应的基类,具体的步骤只需要继承基类和实现相应的接口即可。
Step扩展接口:
Java 接口 |
基类 |
主要功能 |
StepMetaInterface |
BaseStepMeta |
存储step设置信息 验证step设置信息 序列化step设置信息 提供获取step类的方法 |
StepDialogInterface |
BaseStepDialog |
step属性信息配置窗口 |
StepInterface |
BaseStep |
处理rows |
StepDataInterface |
BaseStepData |
为数据处理提高数据存储 |
同时开发的插件也是符合MVC模式的。
首先官方提供了一个最小化的Sample Step Plugin(样板步骤插件),我们可以去指定地址下载该模板(https://sourceforge.net/projects/pentaho/files/)。选择完8.1的模板下载后,我们可以看到有四个插件模板,选择Kettle-sdk-step-plugin。
将进行打包编译是过不了的,需要将项目导入到STS或者eclipse(官网上面说项目是基于eclipse开发的),对maven的pom.xml需要如下的修改(主要是修改插件版本和增加maven的build资源库):
4.0.0
org.pentaho.di.plugins
pdi-plugins
8.1.0.0-SNAPSHOT
kettle-sdk-step-plugin
8.1.0.0-SNAPSHOT
Pentaho Data Integration SDK Step Plugin
xerces
xercesImpl
2.8.1
org.pentaho
pentaho-metadata
8.1.0.0-SNAPSHOT
provided
pentaho-kettle
kettle-core
8.1.0.0-SNAPSHOT
provided
pentaho-kettle
kettle-engine
8.1.0.0-SNAPSHOT
provided
pentaho-kettle
kettle-ui-swt
8.1.0.0-SNAPSHOT
provided
pentaho-kettle
kettle-engine
8.1.0.0-SNAPSHOT
tests
test
junit
junit
${junit.version}
test
maven-assembly-plugin
distro-assembly
package
single
false
src/main/assembly/assembly.xml
pentaho
true
pentaho-public
Pentaho Public
http://nexus.pentaho.org/content/groups/omni
true
always
true
always
pentaho-public
Pentaho Public
http://nexus.pentaho.org/content/groups/omni
true
always
true
always
如果编译时test有问题,就直接删除test文件。编译完以后应该是如下所示:
我们将插件的jar包放入pdi-ce-8.1.0.0-SNAPSHOT/data-integration/plugins/steps/目录下(如果steps目录不存在则创建)。然后打开Spoon就应该能看到刚刚添加进入的插件,如下所示。Kettle加载插件原理可以查看博客: https://blog.csdn.net/czmacd/article/details/52957188。这里我们的steps目录就是在Kettle的插件的加载目录下。
下面讲一下这个最小化插件的功能:这个最小化插件的功能是将原来输入的字段的值替换成Hello World!。最后执行的结果应该是如下的:
下图是插件的源码。
1.pom.xm的项目的maven配置文件,需要修改的都在上面说了
2.接下来是resources中的messages是国际化资源文件,如果需要添加其他语言就可以在这里添加,如下所示(增加中文):
3.在resources中的resources中存在的是图标,可以使用@step注解指定
4.下面是四个最重要的类上面大致讲过了其中的作用。如果想知道每一个基类和对于的接口是如何使用的,还有元数据注入、行使用等等,可以查看官方文档:https://help.pentaho.com/Documentation/8.1/Developer_Center/PDI/Extend/000#Sample_Step_Plugin
对于开发自定义插件来说,调试代码是必不可少的。这里就简要的说明一下如果对自定义插件进行调试。
1)用STS获取Eclipse导入插件项目
2)将该插件添加到Kettle-ui-swt项目的依赖中
1.选择Configure Build Path
2.选择Projects,然后通过Add添加Kettle-sdk-step-plugin的依赖
上面的方式容易遇到错误: 找不到或无法加载主类 org.pentaho.di.ui.spoon.Spoon或者是XXXStepMeta类ClassNotFound。这里我们也可以导入自定义插件的Jar包进行调试。
3)最后在启动配置中添加要加载的插件配置
-DKETTLE_PLUGIN_CLASSES=value,value值就是XXXXStepMeta.java的类路径。然后Debug启动,看到下面提交说明插件已经被成功注册。
在Kettle8中发现少了很多控件,这么回事呢?通过查找Kettle-engine发现Kettle内部控件没有这些丢失的控件。
既然engine中没有,那我就去pdi-plugins下找,结果找到了对应的插件。也就是说在kettle的源码中其实存在该插件,经过对比发现,原来是@Step注解的categoryDescription有问题。原来的是这么写的。
需要按照类别进行合理的修改,比如Add XML本来就是属于Transform,那么就将类别进行如下修改,修改完成重新打包即可。