kettle插件开发

一、开发环境
开发工具:eclipse-Oxygen
JDK:1.8
Kettle源码包版本:pentaho-kettle-7.1
地址:https://github.com/pentaho/pentaho-kettle/tree/7.1
Kettle版本:pdi-ce-7.1.0.0-12
地址:
https://ayera.dl.sourceforge.net/project/pentaho/Data Integration/7.1/pdi-ce-7.1.0.0-12.zip

二、配置与运行

创建项目
kettle插件开发_第1张图片

1.在项目根目录下创建core、dbdialog、engine、plugins、ui四个目录:
kettle插件开发_第2张图片

2.解压pentaho-kettle-7.1.rar源码
kettle插件开发_第3张图片

3.在源码解压目录找到对应目录,将java等相关文件复制到刚创建的四个目录下:
注意直接复制src下文件即可,不包含src目录本身

pentaho-kettle-7.1\core\src\ -> core

pentaho-kettle-7.1\dbdialog\src\ -> dbdialog

pentaho-kettle-7.1\engine\src\ -> engine

pentaho-kettle-7.1\plugins\ -> plugins

pentaho-kettle-7.1\ui\src\和pentaho-kettle-7.1\assembly\package-res\ui\ -> ui

再添加一个images目录,为了方便直接使用自带的svg图片:

pentaho-kettle-7.1\ui\ui\images –> ui\images

目录结构截图
kettle插件开发_第4张图片
kettle插件开发_第5张图片
kettle插件开发_第6张图片
1.解压pdi-ce-7.1.0.0-12.zip 项目安装源文件——》打开data-integration文件夹
kettle插件开发_第7张图片

2.复制上面4个目录到项目根目录下

同时进入项目中的lib目录下,删除kettle开头的三个jar包:

kettle插件开发_第8张图片
目录结构截图:

kettle插件开发_第9张图片
选中项目->Build Path -> Add Libraries -> User Libraries -> New ,新建library,,点击Add JARS添加当前目录下jar,添加lib以及libswt下的swt.jar, swt.jar根据自己当前的操作系统选择对应版本
kettle插件开发_第10张图片

1.将core、dbdialog、engine、ui四个目录,作为源码目录:
选中文件夹,右键,Build Path -> Use as Source Folder
kettle插件开发_第11张图片

最后形成项目结构:
kettle插件开发_第12张图片

启动org.pentaho.di.ui.spoon.Spoon.java能正确打开,则为正确。
kettle插件开发_第13张图片

三、模板插件搭建
kettle plugin 插件开发
https://blog.csdn.net/maenlai0086/article/details/86494085
先下载标准插件模板 地址
http://www.ahuoo.com/download/TemplateStepPlugin.rar

Eclipse中导入提供的模板插件工程
kettle插件开发_第14张图片
将插件项目中的src目录链接到上面的kettle源码运行工程中
选中上面的源码运行工程,项目右键——》Build Path ——》Link Source
kettle插件开发_第15张图片

然后在上面源码工程的plugins目录中新建steps目录,然后在steps目录下新建TemplateStep目录,然后将该标准模板工程下的distrib文件夹下的icon.png和plugin.xml文件拷入上面源码工程的刚才新建的TemplateStep文件夹下
kettle插件开发_第16张图片
TemplateStep .jar包不要拷,因为有时候 TemplateStep中的代码变了但是没有重新打包成TemplateStep .jar并且拷入kettle的 TemplateStep文件夹下,那么插件的改变依然不会出现,因为kettle会依旧采用以前的jar

重新启动sqoon 会发现在转换中出现了一demon下面有一个按钮,点击就可以进行插件开发了
kettle插件开发_第17张图片
比如我们在上面TemplateStep工程包下的 dialog类中找到open()方法加入一条 语句
System.out.println(“hello kettle!”);
kettle插件开发_第18张图片

然后重启sqoon ,再点击demon下的 按钮,在控制台会看见 hello kettle! (注意sqoon以debug方式启动)
kettle插件开发_第19张图片

至此kettle开发环境搭建成功。

四、插件的注册
Spoon在启动的时候会对所有插件进行注册,并保存在PluginRegistry类里面。平台通过查找PluginRegistry注册表获取插件信息。Kettle安装插件需要进行重启,卸载插件也只需简单的删除plugins目录结构下对应的文件即可。

插件注册时序图:
kettle插件开发_第20张图片

五、Kettle转换步骤扩展插件的开发
Kettle插件的开发遵循了MVC设计模式,其中 *Plugin.java类实现了Control功能,当转换运行时,负责按照预设的逻辑处理输入数据;*PluginDialog.java类实现了View功能,即对话框的实现;而 PluginData.java和PluginMeta.java用来存储用户在对话框的配置参数,实现了Model功能。
进行kettle插件开发,主要实现这四个类,建议类命名按照**Plugin.java、**PluginDialog.java、**PluginData.java、**PluginMeta.java的方式命名。分别实现Model、View、Control功能:
1.*PluginMeta 类存储了用户的配置信息;
2.PluginDialog就是编写对话框供用户输入参数,并且将参数保存到PluginMeta中;
3.*Plugin类,是转换操作的核心逻辑,其实主要的方法就是processRow, Kettle中数据按照流的形式传递,因此processRow方法会分批次对输入流进行处理。
(1)processRow返回true则表明数据处理没有结束,则Kettle会继续调用processRow处理输入数据;返回false则表明处理完成,记住在返回false之前要调用基类的setOutputDone()方法。

源码写好后,打成jar包,接下来还要编写plugin.xml配置文档

扩展插件配置说明plugin.xml(上面步骤复制的plugins.xml)结构及参数说明:
kettle插件开发_第21张图片

该配置文件的作用是提供给kettle读取插件的一些元信息,如修改:
description=“自定义数据校验”,插件在kettle的名称显示就会变为:自定义数据校验。
在这里插入图片描述
其他的一下参数说明:
ID:在kettle插件中必须全局唯一,因为被kettle序列化了,所以不要随便改变
Iconfile: kettle中插件显示的图片,必须是png图片
Description:插件描叙,显示在树形菜单里面。
Tooltip:树形菜单中,鼠标滑过的时候显示的提示信息
Category:插件显示的父目录
Classname:元数据类
Library:指明了插件需要加载所依赖的jar包

将打好的jar包、plugin.xml配置文件、图标等放置在单独的文件夹中,并将该文件夹Kettle目录下的plugins\steps中(如果没有steps目录则新建),重启Kettle就可看到自定义的插件

参考文章:
https://blog.csdn.net/u012477420/article/details/52554205


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扩展接口:
kettle插件开发_第22张图片

一般的业务逻辑代码放在processRow()方法下执行

六、四个接口的方法及参数说明
01 StepMetaInterface元数据接口
序号 方法 参数 返回值 说明
1 setDefault void 用于给元数据设置默认值
2 getFields RowMetaInterface inputRowMeta, String name, RowMetaInterface[] info, StepMeta nextStep, void 当下一个步骤点击获取字段时调用这个方法获取该组件的字段元数据
VariableSpace space, Repository repository, IMetaStore metaStore
3 getXML String 在保存成文件资源的时候调用该方法,该方法将组件元数据内容封装成XML文本返回
4 loadXML Node stepnode, List databases, IMetaStore metaStore void 在载入组件的时候会调用该方法从文件资源中解析该组件的元数据。
5 saveRep Repository rep, IMetaStore metaStore, ObjectId id_transformation, ObjectId id_step void 在保存成数据库资源的时候调用该方法,该方法将组件元数据内容存放到数据库中
6 readRep Repository rep, IMetaStore metaStore, ObjectId id_step, List databases void 在载入组件的时候会调用该方法从数据库资源中解析该组件的元数据。
7 check List remarks, TransMeta transMeta, StepMeta stepMeta, void 当点击验证的时候会调用该方法验证组件元数据配置是否正确
RowMetaInterface prev, String[] input, String[] output, RowMetaInterface info, VariableSpace space,
Repository repository, IMetaStore metaStore
8 clone Object 在复制组件时会调用该方法将元数据重新构建一份返回
9 getStep StepMeta stepMeta, StepDataInterface stepDataInterface, int copyNr, StepInterface 获取该组件实现StepInterface接口的类
TransMeta transMeta, Trans trans
10 getStepData StepDataInterface 获取该组件实现StepDataInterface接口的类
11 getParentStepMeta StepMeta 获取上一步骤的元数据
12 setParentStepMeta StepMeta parentStepMeta void 设置该组件的上一步骤元数据

02 StepDataInterface数据接口
序号 方法 参数 返回值 说明
1 setStatus StepExecutionStatus status void 设置组件状态
2 getStatus StepExecutionStatus 获取组件状态
3 isInitialising boolean 是否初始化
4 isRunning boolean 是否正在运行
5 isIdle boolean 是否空闲
6 isFinished boolean 是否已完成
7 isDisposed boolean 是否销毁

03 StepInterface组件运行接口
序号 方法 参数 返回值 说明
1 getTrans Trans 获取业务模型
2 processRow StepMetaInterface smi, StepDataInterface sdi boolean 组件运行时调用处理一行数据
3 init StepMetaInterface stepMetaInterface, StepDataInterface stepDataInterface boolean 组件运行初始化时调用
4 dispose StepMetaInterface sii, StepDataInterface sdi void 组件结束时调用
5 stopRunning StepMetaInterface stepMetaInterface, StepDataInterface stepDataInterfac void 停止组件运行时调用
6 isRunning boolean 判断组件是否正在运行
7 setRunning boolean running void 设置组件运行状态
8 isStopped boolean 判断组件是否停止
9 setStopped boolean stopped void 设置组件停止状态
10 isPaused boolean 判断是否暂停
11 stopAll void 停止
12 pauseRunning void 暂停
13 resumeRunning void 恢复
14 getStepname String 获取组件名称
15 getCopy int 获取复制数量
16 getStepID String 获取组件ID
17 getErrors long 获取错误数
18 setErrors long errors void 设置错误数
19 getLinesInput long 获取输入数量
20 getLinesOutput long 获取输出数量
21 getLinesRead long 获取读取数量
22 getLinesWritten long 获取写入数量
23 getLinesUpdated long 获取更新数量
24 setLinesRejected long linesRejected void 设置拒绝数量
25 getLinesRejected long 获取拒绝数量
26 putRow RowMetaInterface row, Object[] data void 将数据放入下一步骤
27 getRow Object[] 获取一行数据
28 getResultFiles Map 获得结果集
29 getStatus StepExecutionStatus 获得状态
30 getRuntime long 获得运行时长
31 setRepository Repository repository void 设置资源库
32 getRepository Repository 获取资源库

04 StepDialogInterface界面接口
序号 方法 参数 返回值 说明
1 open String 创建界面并显示

参考文档:

Kettle插件开发流程
https://blog.csdn.net/u012477420/article/details/52554205

https://blog.csdn.net/mar_ljh/article/details/89333215

http://doc.primeton.com/pages/viewpage.action?pageId=8620305

https://blog.csdn.net/yujin753/article/details/42527967?locationNum=14&fps=1

https://blog.csdn.net/bluebelfast/article/details/43192995

http://ahuoo.com/?p=418

https://blog.csdn.net/tj_java/article/details/78765158

https://blog.csdn.net/maenlai0086/article/details/86494085

源码运行项目下载:
https://pan.baidu.com/s/1nnlWOWsXz6JM5hGKrFa7FQ 提取码:l3a8

插件项目下载:
https://pan.baidu.com/s/1XHY6wrg_pLclQ3cZL4_1WA 提取码:2131

你可能感兴趣的:(kettle)