也可参见本人百度文库:Pantaho Kettle插件开发
1 Kettle
1.1 Kettle介绍
Kettle也叫PDI,在2006年kettle加入了开源的BI组织Pantaho,正式命名为PDI(Pantaho Data Integeration),而kettle是“Kettle E.T.T.L.Envirnoment”的缩写。
kettle是一款国外开源的ETL(Extract Transform Load)工具,纯java编写,可以在Window、Linux、Unix上运行,绿色无需安装,被设计用来抽取、转换、装入和加载数据,可以形象的理解为将各种数据放入到一个壶里面然后以一种指定的格式流出来。
Kettle中有两种脚本文件,transformation和job,transformation完成针对数据的基础转换,job则完成整个工作流的控制。
1.2 Kettle组件
- Spoon:一个图形用户界面,用来运行transformation(转换)和job(任务),其中transformation是用Pan工具来运行,任务是用Kitchen来运行。
- Pan:一个数据转换引擎,主要用来执行数据源读取,操作和写入数据等等功能。
- Kitchen:一个运行任务(利用XML或数据资源库描述)的工具。
1.3 Kettle插件
Kettle本身提供了很多组件,多个组件一起构成一个transformation(转换),多个转换一起构成一个job(任务)。kettle的组件已经非常丰富,在组件不满足需求时可以在kettle上面开发自己的组件,kettle支持的组件开发如下:
注意:本文档以下内容只讲解“转换步骤插件”开发
2 Kettle转换步骤插件开发
2.1 Kettle转换步骤插件开发概述
2.1.1Kettle转换步骤插件至少需要实现四个接口
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,编辑步骤的元数据。
对于以上四个接口的实现,都有相应的基类,具体的步骤只需要继承基类和实现相应的接口即可。
2.1.2Kettle转换步骤插件各个类命名推荐规则
stepInterface的实现类以插件的功能相关命名:*.java
stepDataInterface的实现类:*Data.java
stepMetaInterface实现类:*Meta.java
StepDialogInterface的实现类:*Dialog.java
2.2 Kettle转换步骤插件开发例子
本例子主要实现功能:将添加的HTTP URL列表逐个进行W3C XML规范进行校验,将符合XML规范的HTTP URL列表刷选出来。
2.2.1Kettle转换步骤插件初步开发
1.在“src-plugins”下创建文件夹“kettle-urlContentValidate-plugin”,然后依次创建上面四个接口类的实现,如下图:
2.在“plugins”子文件夹“step”下建立文件夹“UrlContentValidatePlugin”,增加的配置文件截图如下:
3.修改“plugin.xml”配置内容如下
4.将创建的源代码加入“java build path”
2.2.2Kettle转换步骤插件功能完善
2.2.2.1Kettle转换步骤插件入口UrlContentValidatePluginMeta
Kettle转换步骤插件入口UrlContentValidatePluginMeta本身提供基础数据的配置,同时负责调用UrlContentValidatePluginDialog展现界面,负责调用UrlContentValidatePluginData保存中间处理数据,负责调用UrlContentValidatePlugin在运行的过程中遍历行级数据。
2.2.2.1.1 入口调用UrlContentValidatePluginDialog
<!--[if !supportLists]-->1. <!--[endif]-->每一个开发的转换kettle都会为之添加一个代理,让我们看看代理的代码
从上面的代码我们看到代理会通过StepMetaInterface实现类中的getDialogClassName()找到SWT界面类名称UrlContentValidatePluginDialog,然后反射SWT界面类中的固定方法public StepDialogInterface getDialog(Shell shell, StepMetaInterface meta,TransMeta transMeta, String name)
<!--[if !supportLists]-->2. <!--[endif]-->接着看看org.pentaho.di.trans.stepBaseStepMeta中的getDialogClassName()
<!--[if !supportLists]-->3. <!--[endif]-->本例中符合包命名格式,直接在在UrlContentValidatePluginMeta中添加如下内容
2.2.2.1.2 入口调用UrlContentValidatePluginData
重写UrlContentValidatePluginMeta中getStepData()
2.2.2.1.3 入口调用UrlContentValidatePlugin
重写UrlContentValidatePluginMeta中getStep(StepMeta stepMeta,StepDataInterface stepDataInterface, int copyNr,TransMeta transMeta, Trans trans)
2.2.2.2Kettle转换步骤插件界面UrlContentValidatePluginDialog
2.2.2.2.1 界面开发
开发界面主要是在UrlContentValidatePluginDialog里面open()方法中填充代码,简单截图如下:
2.2.2.2.2 界面数据传入到UrlContentValidatePluginMeta
在点击SWT界面的“确定”按钮事件监听中添加以下代码处理
UrlContentValidatePluginDialog中定义的input如下:
private UrlContentValidatePluginMeta input;
2.2.2.3Kettle转换步骤插件基础数据保存和解析
2.2.2.3.1 Kettle转换步骤插件基础数据XML格式保存和解析
<!--[if !supportLists]-->1. <!--[endif]-->基础数据保存到XML,重写UrlContentValidatePluginMeta中getXML()
<!--[if !supportLists]-->2. <!--[endif]-->XML中解析基础数据,重写UrlContentValidatePluginMeta中loadXML(Node stepnode, List<DatabaseMeta> databases,Map<String, Counter> counters)
<!--[if !supportLists]-->3. <!--[endif]-->基础数据存储为XML数据截取图片如下
2.2.2.3.2 Kettle转换步骤插件基础数据资源库格式保存和解析
<!--[if !supportLists]-->1. <!--[endif]-->基础数据保存到资源库,重写UrlContentValidatePluginMeta中saveRep(Repository rep, ObjectId id_transformation,ObjectId id_step)
<!--[if !supportLists]-->2. <!--[endif]-->资源库中解析基础数据,重写UrlContentValidatePluginMeta中readRep(Repository rep, ObjectId id_step,List<DatabaseMeta> databases, Map<String, Counter> counters)
<!--[if !supportLists]-->3. <!--[endif]-->基础数据保存到资源库截取图片如下
2.2.2.4Kettle转换步骤插件供给下转换步骤的元数据
1.重写UrlContentValidatePluginMeta中getFields(RowMetaInterface inputRowMeta, String name, RowMetaInterface[] info, StepMeta nextStep, VariableSpace space)
2.下一转换步骤获取元数据截图如下:
2.2.2.5Kettle转换步骤插件运行过程中遍历行级数据
重写UrlContentValidatePlugin中的processRow(StepMetaInterface smi, StepDataInterface sdi)
2.3 Kettle转换步骤插件部署
1.将文件夹“plugins”下“steps”下配置信息文件夹“UrlContentValidatePlugin”拷贝出来
2.打包插件jar
3.将打包的“kettle-urlContentValidate-plugin.jar”拷贝到1中的文件夹下,并修改“plugin.xml”依赖的jar,截图如下:
<!--[if !supportLists]-->4. <!--[endif]-->将文件夹“UrlContentValidatePlugin”拷贝的kettle工具文件夹“kettle根目录\plugins\steps\”下面
<!--[if !supportLists]-->5. <!--[endif]-->启动kettle更目录Spoon.bat,简单创建kettle并测试