初识Kettle

问题反馈

如有问题可通过微信公众号“假装正经的程序员”反馈

什么是ETL

ETL,即Extract-Transform-Load的缩写,数据抽取、转换、装载的过程。ETL的目的是将企业中分散、零乱、标准不统一的数据整合到一起,为企业的决策提供分析依据。它是BI(商业智能)项目重要的一个环节,可以让大数据开发人员在业务中以更加简单的方式进行数据清洗、数据迁移等功能,以轻松满足业务实现的需求。

什么是Kettle

Kettle是一款国外开源的ETL工具,纯java编写,依赖于Java虚拟机,可以在Window、Linux、Unix等平台上运行,它允许你管理来自不同来源的数据(无论是数据库还是接口),并通过图形化界面简化用户的操作。

Kettle提供两种脚本文件,Transformation和Job。

Transformation是用来处理数据的转换,其通过一个个组件相连,按步骤(Step)处理,步骤之间用节点连接线相连(Hop),最终形成一个转换流程。

Job是一个调度,通常通过调度转换来实现转换的自动执行。

Kettle现在已经更名为PDI,即Pentaho Data Integration-Pentaho。

Kettle的结构

Spoon

Spoon是构建ETL Transformation和Job的工具,用户在浏览器(或者其他桌面工具)上通过Spoon以图形化的界面进行流程和任务的设计。下图即为Spoon的界面,除了本地运行外,也可以通过Tomcat以war包的形式进行部署(即WebSpoon),通过web的形式进行界面的访问。

Data Integration Server

Data Integration Server是一个专用的ETL Server,它主要有如下几个功能:

  1. 通过Pentaho Data Integration引擎执行由Spoon创建的作业或者转换;
  2. 提供了一个集中的资源库,用来管理ETL的作业和转换,资源库包含所有内容和特征的历史版本,可以避免作业和转换的丢失;
  3. 管理用户、角色以及系统集成的安全性;
  4. 为Spoon设计出的作业和转换提供时序和监控服务;

Kettle的核心组件

  1. Spoon:通过图形接口,用于编辑作业和转换的桌面应用;
  2. Pan:一个独立的运行命令程序,用于执行由Spoon编辑的转换和作业;
  3. Kitchen:一个独立的运行命令程序,用于执行由Spoon编辑的作业;
  4. Carte:一个轻量级的Web容器,用于建立专用、远程的ETL Server;

Kettle的概念模型

Kettle的执行分为两个层次:Job和Transformation,从上图可以看出,Job调用Transformation,Transformation起始于Step和Hop。

Transformation

Transformation(转换)是由一系列Step(步骤)和Hop(跳转连线)构成的,其本质是数据流的处理,文件的扩展名是.ktr。

Step

Step(步骤)是转换的基础模块,比如表输入、表输出、列转行等这些都是一个步骤。一个转换由多个步骤构成,步骤可以单独开发,如上图的自定义行转列便是作者独立开发而来,具体如何开发可以参考后面的Kettle自定义插件相关文章。

RowSet

RowSet的实现类,负责步骤之间的相互通信,rowset对象既是前一个step的成员也是后一个step的成员,访问是线程安全的。

RowSet类中包含源step,目标step和由源向目标发送的一个rowMeta和一组data。其中data数据是以行为单位的队列(queArray)。一个RowSet作为此源step的outputrowsets的一部分。同时作为目标step的inputRowsets一部分。源Step每次向队列中写一行数据,目标step每次从队列中读取一行数据。

行元数据

步骤与步骤之间以行为单位进行处理,自然需要知道每行的结构,即行元数据。行元数据至少需要包括类型、名称,当然还可能包括字段长度、精度等常见内容。

行元数据不仅在执行的时候需要,而且在转换设置的时候同样需要。每个步骤的行元数据都会保存在.ktr文件或者数据库里面,所以可以根据步骤名称从TransMeta对象中获取行元数据。

行元数据的UML类图结构如下所示,主要有单元格元数据组成行元数据。在现有的版本中,支持的数据类型有String、Date、BigNumber、Boolean、SerializableType、Binary、Integer、Numberic。

Hop

Hop(跳)是步骤之间带箭头的连线,数据的通道,用于连接两个步骤,使得元数据从一个步骤传递到另一个步骤。在上图所示的转换中,它像似顺序执行发生的,但事实并非如此。节点连接决定了贯穿在步骤之间的数据流,步骤之间的顺序不是转换执行的顺序。当执行一个转换时,每个步骤都以自己的线程启动,并不断的接受和推送数据。

在一个转换中,一个步骤可以有多个连接,数据流可以从一个步骤流到多个步骤。在Spoon中,hop就像是箭,它允许数据从一个步骤流向另一个步骤,同时也决定了数据流的方向和所经步骤。如果一个步骤的数据输出到了多个步骤,那么这个数据既可以是复制的,也可以是分发的。

注意:

  1. 所有的步骤是同步开启和运行的,所以步骤的初始化的顺序是不可知的。因此我们不能在第一个步骤中设置一个变量,然后在接下来的步骤中使用它。
  2. 当创建新Hop时,要记住Hop再转换里面时不能循环的,因为在转换里面每个步骤都依赖前一个步骤获取字段值。

Job

一个Job(作业)代表ETL控制流中的一项逻辑任务。Job项会顺序执行,每个Job项会产生一个结果,并且能够作为别的分支上Job项的条件。

作业按照一定的顺序完成,因为转换以并行方式执行的,就需要一个可以串行执行的作业来处理一系列按照顺序完成的操作。一个作业包括一个或者多个作业项,这些作业项以某种顺序来执行。作业执行顺序由作业项之间的跳(job hop)和每个作业项的执行结构来决定。如同转换,作业里面也可以包括注释。

作业项

作业项是作业的基本构成部分。如同转换的步骤,作业项也可以使用图标的方式图形化展示。作业项的注意点。新步骤的名字应该是唯一的,但是作业项可以有影子拷贝。这样可以把一个作业项放在不同的位置。这些影子拷贝里的信息都是相同的,编辑一份拷贝,其他拷贝也会随之修改。在作业项之间可以传递一个结果对象(result object)。这个结果对象里包含了数据行,它们不是以流的方式来传递的。而是等一个作业项执行完了,再传递给下一个作业项。默认情况下,所有的作业项都是以串行方式执行的,只是在特殊情况下,以并行方式执行。

相关推荐

  1. Dockerfile

    2024-07-12 17:08:03       54 阅读
  2. MyBatis

    2024-07-12 17:08:03       64 阅读
  3. docker

    2024-07-12 17:08:03       46 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-12 17:08:03       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-12 17:08:03       71 阅读
  3. 在Django里面运行非项目文件

    2024-07-12 17:08:03       58 阅读
  4. Python语言-面向对象

    2024-07-12 17:08:03       69 阅读

热门阅读

  1. AIGC:AI创作短片-流程以及工具介绍(学习笔记)

    2024-07-12 17:08:03       23 阅读
  2. NLP简介

    NLP简介

    2024-07-12 17:08:03      20 阅读
  3. Linux 内核中的 Makefile 和 Kconfig:深入理解与实践

    2024-07-12 17:08:03       19 阅读
  4. 【Cesium开发实战】淹没分析功能的实现

    2024-07-12 17:08:03       19 阅读
  5. 人生低谷来撸C#--007 结构体

    2024-07-12 17:08:03       23 阅读
  6. 自然语言处理:项目推荐

    2024-07-12 17:08:03       23 阅读
  7. vue3+ts 使用WebSocket

    2024-07-12 17:08:03       24 阅读
  8. Chubby VS Zookeeper

    2024-07-12 17:08:03       23 阅读
  9. 需求实现:字数限制500字

    2024-07-12 17:08:03       20 阅读