Kettle — 自定义插件

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模式的。

自定义插件开发与部署(Step Plugins)

首先官方提供了一个最小化的Sample Step Plugin(样板步骤插件),我们可以去指定地址下载该模板(https://sourceforge.net/projects/pentaho/files/)。选择完8.1的模板下载后,我们可以看到有四个插件模板,选择Kettle-sdk-step-plugin。

Kettle — 自定义插件_第1张图片

将进行打包编译是过不了的,需要将项目导入到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文件。编译完以后应该是如下所示:

Kettle — 自定义插件_第2张图片

我们将插件的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的插件的加载目录下。

Kettle — 自定义插件_第3张图片

下面讲一下这个最小化插件的功能:这个最小化插件的功能是将原来输入的字段的值替换成Hello World!。最后执行的结果应该是如下的:

Kettle — 自定义插件_第4张图片

最小化插件源码分析

下图是插件的源码。

Kettle — 自定义插件_第5张图片

1.pom.xm的项目的maven配置文件,需要修改的都在上面说了

2.接下来是resources中的messages是国际化资源文件,如果需要添加其他语言就可以在这里添加,如下所示(增加中文):

3.在resources中的resources中存在的是图标,可以使用@step注解指定

Kettle — 自定义插件_第6张图片

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

Kettle — 自定义插件_第7张图片

2.选择Projects,然后通过Add添加Kettle-sdk-step-plugin的依赖

Kettle — 自定义插件_第8张图片

上面的方式容易遇到错误: 找不到或无法加载主类 org.pentaho.di.ui.spoon.Spoon或者是XXXStepMeta类ClassNotFound。这里我们也可以导入自定义插件的Jar包进行调试。

Kettle — 自定义插件_第9张图片

3)最后在启动配置中添加要加载的插件配置

Kettle — 自定义插件_第10张图片

-DKETTLE_PLUGIN_CLASSES=value,value值就是XXXXStepMeta.java的类路径。然后Debug启动,看到下面提交说明插件已经被成功注册。

找回Kettle8放弃的控件

在Kettle8中发现少了很多控件,这么回事呢?通过查找Kettle-engine发现Kettle内部控件没有这些丢失的控件。

Kettle — 自定义插件_第11张图片

Kettle — 自定义插件_第12张图片

既然engine中没有,那我就去pdi-plugins下找,结果找到了对应的插件。也就是说在kettle的源码中其实存在该插件,经过对比发现,原来是@Step注解的categoryDescription有问题。原来的是这么写的。

Kettle — 自定义插件_第13张图片

需要按照类别进行合理的修改,比如Add XML本来就是属于Transform,那么就将类别进行如下修改,修改完成重新打包即可。

Kettle — 自定义插件_第14张图片

你可能感兴趣的:(Kettle)