1、kettle插件是什么

kettle本身有足够多的转换或者job步骤,但是依然不能覆盖所有的业务场景,所以Kettle 自定义插件在有些独特的业务场景可以大显身手。

Kettle的插件架构使得我们可以不用修改Kettle本身代码,通过一些独立的代码就可以扩展Kettle的功能。这些独立的代码称为插件。Kettle可动态加载并运行这些插件。

2、kettle插件类型

  1. 转换步骤插件:在Kettle转换中使用的步骤,用来处理数据行。
  2. 作业项插件:在Kettle作业中使用的作业项,用来实现某个任务。
  3. 分区方法插件:利用输入字段的值指定自己的分区规则。
  4. 数据库类型插件:用来扩展不同的数据库类型。

3、kettle插件架构

Kettle内部的对象与外部插件没有任何区别,因为他们使用的API都一样的,只是运行时的加载方式不同。在这一点是我觉得是值得推崇的地方,里里外外,遵循统一的原则。从Kettle 4开始,Kettle内部有一个插件注册系统,负责加载各种内部和外部的插件。

插件有以下两个标识属性:

  1. 插件类型:由PluginTypeInterface接口定义,例如StepPluginType、 JobEntryPluginType、PartionerPluginType与RepositoryPluginType。
  2. 插件ID: 这是一个字符串,用来唯一标识一个插件。在大多数情况下,插件只使用一个单一的字符串,如TableInput是“表输入”步骤的ID, MYSQL是MySQL数据库类型的ID。使用相同的ID可以达到将旧的插件用新的插件替代的目的。

当Kettle环境初始化以后,插件注册系统首先会加载所有的内部对象,Kettle读取下面的配置文件来加载内部对象,这些配置文件位于Kettle的.jar文件中。

  1. Kettle-steps.xml: 内部转换步骤。

  2. Kettle-job-entries.xml:内部作业项。

  3. Kettle-partition-plugins.xml:内部分区类型。

  4. Kettle-database-types.xml:内部数据库类型。

  5. Kettle-repositories.xml:内部资源库类型。

插件注册系统加载了所有的内部对象后,开始搜索可用的外部插件。通过浏览Plugins目录下各个子目录下的.jar文件来完成。它搜索特定的Kettle annotations来判断一个类是否是插件。

因为在内部对象加载后才加载插件,所以插件会替代相同ID的已加载的内部对象。例如,创建了插件,插件的ID是TableInput,就可以替换Kettle标准的“表输入”步骤。这个功能可以用插件替换Kettle内置的步骤。可以通过子类继承的方式,直接扩展已有步骤的某些功能。

kettle从入门到精通 第四十九课 ETL之kettle 自定义插件01的更多相关文章

  1. python第四十九课——对象序列化与反序列化

    person.py class Person: def __init__(self,*args,**kwargs): print('我是Person类的构造...') # self.name=name ...

  2. GPU 编程入门到精通(四)之 GPU 程序优化

    博主因为工作其中的须要,開始学习 GPU 上面的编程,主要涉及到的是基于 GPU 的深度学习方面的知识,鉴于之前没有接触过 GPU 编程.因此在这里特地学习一下 GPU 上面的编程.有志同道合的小伙伴 ...

  3. NeHe OpenGL教程 第四十五课:顶点缓存

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  4. NeHe OpenGL教程 第四十八课:轨迹球

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  5. NeHe OpenGL教程 第四十六课:全屏反走样

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  6. centos shell编程6一些工作中实践脚本 nagios监控脚本 自定义zabbix脚本 mysql备份脚本 zabbix错误日志 直接送给bc做计算 gzip innobackupex/Xtrabackup 第四十节课

    centos   shell编程6一些工作中实践脚本   nagios监控脚本 自定义zabbix脚本 mysql备份脚本 zabbix错误日志  直接送给bc做计算  gzip  innobacku ...

  7. NeHe OpenGL教程 第四十二课:多重视口

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  8. Gradle 1.12用户指南翻译——第四十九章. Build Dashboard 插件

    本文由CSDN博客貌似掉线翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ...

  9. SQL注入之Sqli-labs系列第四十七关,第四十八关,第四十九关(ORDER BY注入)

    0x1 源码区别点 将id变为字符型:$sql = "SELECT * FROM users ORDER BY '$id'"; 0x2实例测试 (1)and rand相结合的方式 ...

  10. “全栈2019”Java第四十九章:重载与重写对比详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

随机推荐

  1. 力扣81(java&python)-搜索旋转排序数组 II(中等)

    题目: 已知存在一个按非降序排列的整数数组 nums ,数组中的值不必互不相同. 在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行了 ...

  2. Serverless 架构下的 AI 应用开发:入门、实战与性能优化

    简介: 本章通过对 Serverless 架构概念的探索,对 Serverless 架构的优势与价值.挑战与困境进行分析,以及 Serverless 架构应用场景的分享,为读者介绍 Serverles ...

  3. 如何将一棵LSM-Tree塞进NVM

    ​简介: 随着非易失内存产品的商业化推广,我们对于其在云原生数据库中大规模推广的潜力越来越有兴趣.X-Engine是阿里云数据库产品事业部PolarDB新型存储引擎团队研发的一个LSM-tree存储引 ...

  4. [HTML] 访问 a 链接不带 referer 的方式

    html5 新属性 referrerpolicy: referrerpolicy no-referrer no-referrer-when-downgrade origin origin-when-c ...

  5. EPAI手绘建模APP常用工具栏_1

    1.常用工具栏 图 1 常用工具栏 (1) 撤销 (2) 重做 (3) 删除 (4) 复制 ① 选中场景中的模型后,复制按钮变成可用状态,否则变成禁用状态.可以选择多个模型一起复制. (5) 变换 图 ...

  6. Servlet注解的使用,简化配置 以及,使用模板方法设计模式优化oa项目

    Servlet注解的使用,简化配置 以及,使用模板方法设计模式优化oa项目 每博一文案 有句谚语说:"一怒之下踢石头,只有痛着脚趾头." 比一件糟糕的事情更可拍的,是你用糟糕的态度 ...

  7. 一款基于Vue3实现的漂亮且功能强大的在线海报设计器

    大家好,我是 Java陈序员. 我们在工作中经常需要设计各种各样的图片,海报.产品图.文章图片.视频/公众号等. 我们可以选择使用 PS 来设计图片,但是有时候想快速完成任务,有没有一款工具支持快速生 ...

  8. win10的开机启动文件夹

    1.在C:\Users(用户)\Administrator(当前用户名)\AppData\Roaming\Microsoft\Windows\Start Menu\Programs(「开始」菜单)\P ...

  9. Ubuntu安装完VMware tools还是不能和主机之间拖拽文件

    Ubuntu安装完VMware tools还是不能和主机之间拖拽文件 1.确保已安装了VMware Tools 2.禁用 Wayland sudo gedit /etc/gdm3/custom.con ...

  10. iceoryx源码阅读(六)——共享内存创建

    目录 1 共享内存的组织 2 共享内存创建 2.1 IceOryxRouDiMemoryManager::createAndAnnounceMemory 2.2 RouDiMemoryManager: ...