`
hanyi366
  • 浏览: 289322 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

kettle插件开发(基础篇)

    博客分类:
  • ETL
 
阅读更多

在我们做ETL工作的时候,在某些项目中往往会遇到一些特别的流程任务,kettle原有的流程处理节点已经不能满足我们的要求,这时候我们就需要定制流程处理节点了。定制流程节点主要是针对数据的管理、数据的验证和某些特别文件数据的提取。大家通过查看kettle源代码,就可以知道怎样去创建你自己的kettle插件了。



这篇文章主要告诉大家在kettle 4.0版本上怎样开发一个transformation类型的简单插件,这个插件可以接受任何记录流,然后在流后面再添加一个带值的字段,用户能够定义字段的名称,插件非常简单。O(∩_∩)O~ 我将尽可能简洁的介绍开发插件需要掌握的一些接口规范。



准备工作:

1、下载pdi-ce-4.0.0-stable.zip,供桌面测试用。

2、下载eclipse,任何版本都可以,装好SVN插件,后面下载kettle源代码之用。

3、  下载标准插件源代码模板工程。



建立插件工程:

1、  将下载的“标准插件源代码模板工程”导入到您的工作空间

2、  导入后工程会有一些错误,那是因为依赖的包没有导入。这时,你需要解压pdi-ce-4.0.0-stable.zip,进入解压目录将lib目录下面kettle打头的所有jar包以及libswt/win32下面的swt.jar包(这个大家依赖操作系统导入)加入工程环境变量里面。

3、  重新编译一下工程,应该就没有错误了。



kettle转换步骤工作组件:

       这里有四个类构成了这个kettle 步骤/节点,每一个类都有其特定的目的及所扮演的角色。

TemplateStep:  步骤类实现了StepInteface接口,在转换运行时,它的实例将是数据实际处理的位置。每一个执行线程都表示一个此类的实例。



TemplateStepData:  数据类用来存储数据,当插件执行时,对于每个执行的线程都是唯一的。执行时里面存储的东西主要包括数据库连接、文件句柄、缓存等等其他东西。



TemplateStepMeta: 元数据类实现了StepMetaInterface接口。它的职责是保存和序列化特定步骤实例的配置,在我们这个例子中,它负责保存用户设置的步骤名称和输出字段的名称。



TemplateStepDialog:对话框类实现了该步骤与用户交互的界面,它显示一对话框,通过对话框用户可以自己的喜好设定步骤的操作。对话框类与元数据类关系非常紧密,O(∩_∩)O~ 想想为什么吧? (元数据类可以追踪用户的设置)



除了上面的代码,还有一个plugin.xml,它设置好了插件的元数据,定义了步骤在kettle图形工作台中的显示效果。为了更好的让大家理解,我将利用这个步骤设计一个转换流程并执行它。对于插件的开发,我们将从plugin.xml配置文件开始讲起,然后讲讲元数据和对话框类,最后再讲讲步骤类和数据类。



书写你自己的plugin.xml:

       下面plugin.xml是我们这个插件里面的内容,它的功能是告诉kettle插件的元数据类,插件的名称及描叙,还有需要加载的jar包。想要了解细节,可以查看文章:plug-in loading

<?xml version="1.0" encoding="UTF-8"?>
<plugin
   id="TemplatePlugin"
   iconfile="icon.png"
   description="Template Plugin"
   tooltip="Only there for demonstration purposes"
   category="Demonstration"
   classname="plugin.template.TemplateStepMeta">   <libraries>
      <library name="templatestep.jar"/>
   </libraries>
</plugin>
ID:在kettle插件中必须全局唯一,因为被kettle序列化了,所以不要随便改变

Iconfile: kettle中插件显示的图片,必须是png图片

Description:插件描叙,显示在树形菜单里面。

Tooltip:树形菜单中,鼠标滑过的时候显示的提示信息

Category:插件显示的父目录

Classname:元数据类

Library:指明了插件需要加载所依赖的jar包







一、元数据类:

         下面显示了元数据的几个关键的方法,注意元数据类里面用私有成员变量outputField 存储了下一个步骤的输出字段。

// keep track of the step settings
public String getOutputField()
public void setOutputField(…)
public void setDefault()

// serialize the step settings to and from xml
public String getXML()
public void loadXML(…)

// serialize the step settings to and from a kettle repository
public void readRep(…)
public void saveRep(…)

// provide information about how the step affects the field structure of processed rows
public void getFields(…)

// perform extended validation checks for the step
public void check(…)

// provide instances of the step, data and dialog classes to Kettle
public StepInterface getStep(…)
public StepDataInterface getStepData()
public StepDialogInterface getDialog(…)

TemplateStepMeta元数据类其实还有很多方面,不过大多被他的父类BaseStepMeta给默认实现了,这些默认的实现足以使我们的元数据类工作良好。想要了解更多,大家可以查查关于StepMetaInteface和BaseStepMeta的kettle官方文档。



二、对话框类:

         TemeplateStepDialog为步骤实现了对话框的设置,kettle的用户界面部件是使用的eclipse的swt框架,如果要开发比较复杂的对话框,你还必须熟悉大部分swt代码。 Swt文档大家可以从eclipse上的帮助菜单点击在线获取。在开发过程中,一个对话框对象拥有一个元数据对象,它记录了应该从哪里读取配置?应该把设置好的配置保存在哪里? 它仅仅设置了输出字段的名称在我们这个模板步骤里面。一个继承自BaseStepDialog特定的对话框类必须提供open(…)方法,这个方法必须返回这个步骤的名称(发生改变时)或NULL(对话框被取消时)





三、步骤类:

         步骤类是实际的处理和转换工作的地方。因为大部分样本代码已经由父类BaseStep提供了,大多数插件仅仅关注下面几个特定的方法就行。

// initialization and teardown
public boolean init(…)
public void dispose(..)

// processing rows
public void run()
public boolean processRow(..)

Init()方法在转换执行前被kettle调用,转换必须在所有步骤初始化成功时才真正执行。我们这个模板步骤没有做任何事情,这里仅仅是拿出来让大家了解了解。

dispose()方法是在步骤执行完之后执行(非转换执行完哈),它完成资源的关闭,像文件句柄、缓存等等。

run()方法在实际处理记录集的时候调用。里面其实是个调用processRow()方法处理记录的小循环,当此步骤再没有数据处理或转换被停止时退出循环。

processRow()方法在处理单条记录的时候被调用。这个方法通常通过调用getRow()来获取需要处理的单条记录。 这个方法如果有需要将会被阻塞,例如当此步骤希望放慢脚步处理数据时。processRow()随后的流程将执行转换工作并调用putRow()方法将处理过的记录放到它的下游步骤。

注意:你的步骤可能会变记录的结构,为了安全起见,一定要多熟悉包org.pentaho.di.core.row,特别是类RowMetaInterface和RowDataUtil。

  基类BaseStep对处理的记录提供了第一次访问的标识,在某些代码只执行一次的时候可能非常有用,例如某个费时的查找,其实这就是缓存。



四、数据类:

         大多数步骤都需要临时的缓冲或者临时的数据。数据类就是这些数据合适的存放位置。每一个执行线程将得到其拥有的数据类实例,所以它能在独立的空间里面运行。TemplateStepData继承自BaseStepData,作为一个经验法则,不要将non-constant字段放置BaseStepData类里面,如果你必须,请将它最好放置TemplateStepData数据类里面.



我们的步骤仅仅使用了一个数据对象来存储记录集输出的结构,没有用到其他的存储介质,例如文件等等。

 

分享到:
评论

相关推荐

    kettle插件开发(原创)

    ### Kettle插件开发 #### 一、Kettle简介与组件 Kettle,又称为PDI(Pentaho Data Integration),是一款开源的数据集成工具,它主要用于数据抽取、转换和加载(ETL)。Kettle最初由一家名为Pentaho的公司开发,并...

    Kettle插件开发官方示例

    官方提供的Kettle插件开发示例,如"pdi-sdk-plugins-8.1.0.0-R"这个压缩包,涵盖了五种类型的插件示例,这为我们深入了解Kettle插件开发提供了宝贵的学习资源。下面将详细介绍这些类型以及它们在Kettle中的作用: 1...

    kettle rabbitmq 插件开发

    标题 "kettle rabbitmq 插件开发" 涉及的是如何在 Pentaho Kettle(也称为 Spoon)中创建和使用 RabbitMQ 插件。Kettle 是一个开源的数据集成工具,它允许用户进行数据抽取、转换和加载(ETL)操作。RabbitMQ 是一个...

    kettle 插件 开发示例

    以上就是关于Kettle插件开发的一些基础知识,通过学习和实践,你可以构建出符合自己业务需求的定制化插件,提升数据处理的效率和灵活性。在实际开发过程中,"kettle-trigger-plugin"可能是一个具体的触发器插件示例...

    kettle官网插件开发demo

    平时使用kettle进行推送数据比较方便,可视化操作,不需要写代码,但是有些时候提供的插件不满足我们的需求,我们需要进行自定义插件的开发来满足我们的需求,所以官方提供了开发插件的demo例子,方便我们进行二次...

    kettle插件的制作

    4. **插件开发流程** - 定义接口实现类,并完成接口中所需的方法。 - 创建UI对话框,让用户配置插件参数。 - 编写逻辑代码,处理数据转换。 - 打包插件为JAR文件,放入Kettle的`plugins/steps`目录下。 - 在...

    kettle二次开发

    本篇将详细介绍如何搭建 Kettle 的开发环境以及如何进行二次开发。 #### 二、环境准备 **1. 下载 Kettle 工具包** 首先,从 Kettle 官方网站下载 PDI CE (Community Edition) 的免安装包。例如,本文使用的版本为...

    PantahoKettle插件开发.pdf

    开发Kettle插件能够满足特定的数据处理需求,增强Kettle的功能,使其能够处理更复杂的数据集成场景。这包括与新的数据源集成、实现特定的数据转换算法或者优化特定的工作流程控制。 总结,Pentaho Kettle通过其直观...

    Kettle连接Clickhouse自定义插件2.0

    本篇文章将详细讲解如何在Kettle 9.1.0中创建一个自定义插件来连接Clickhouse 21.4.5.46数据库,以及使用clickhouse JDBC驱动(com.clickhouse 0.3.2-patch3)进行操作。 首先,理解Kettle与Clickhouse的结合是基于...

    Pantaho Kettle转换步骤插件开发

    2 Kettle转换步骤插件开发 2.1 Kettle转换步骤插件开发概述 2.1.1 Kettle转换步骤插件至少需要实现四个接口 2.1.2 Kettle转换步骤插件各个类命名推荐规则 2.2 Kettle转换步骤插件开发例子 2.2.1 Kettle转换步骤...

    pentaho kettle中文开发手册

    《eteenterprisejava.pdf》可能涉及与Java企业级应用相关的知识,虽然不是直接关于Pentaho Kettle,但理解Java基础对于掌握Pentaho Kettle的自定义插件开发非常重要。因为Kettle是用Java编写并支持Java插件扩展,...

    kettle插件开发

    kettle插件开发必备,可以当作入门级材料。

    Kettle 连接SAP插件ITN ERP Connector

    在数据整合和分析的场景中,Kettle连接SAP插件显得尤为重要,因为它可以方便地从SAP系统中提取数据,进行清洗、转换,然后加载到其他系统或数据仓库中。 ITN ERP Connector是专为Kettle设计的SAP连接组件,它的主要...

    kettle插件

    Kettle是一款强大的ETL(Extract, Transform, Load)工具,由Pentaho公司开发,它提供了图形化的界面,使得数据的抽取、转换和加载过程变得简单易行。在Kettle中,"step"是数据流中的基本单元,代表了数据处理的一个...

    神通数据库的Kettle数据库插件

    插件基于Kettle 8.1.0.0-365版本开发,这意味着它与该版本的Kettle接口兼容,能够无缝集成到Kettle的工作环境中。开发人员可以参考此插件的源代码,理解如何实现Kettle与神通数据库之间的通信,以及如何定义新的...

    Kettle转换步骤插件开发简介

    ### Kettle转换步骤插件开发知识点详解 #### 1. Kettle介绍 Kettle是一款开源的数据集成工具,原名PDI(Pentaho Data Integration),它由Pentaho公司维护和支持。Kettle最初是由一位荷兰程序员开发的,后来在2006...

    Kettle自定义Step插件源代码

    插件功能:用户输入需要替换的字符和替换后的字符以及需要替换的列号,插件进行自动替换。原文地址:https://blog.csdn.net/xhy1999/article/details/108375836

    Kettle二次开发主要依赖的Jar包

    在进行Kettle插件开发时,这个库是必不可少的。 4. **其他可能的依赖**: 除了上述的三个核心库,Kettle还依赖其他的Jar包,如kettle-ui-swt.jar(提供Swing用户界面)、kettle-plugin-framework.jar(插件框架)等...

Global site tag (gtag.js) - Google Analytics