作业、转换和步骤是Kettle是解决方案的三种基本构成块。三个之间的关系是,作业是ETL解决方案的代理,而转换是基础的构建部分。独立的转换能够被连接在一起形成一个具有逻辑顺序可被执行的作业,就像一个业务流程。而转换也是由几个步骤组成的。
转换transformation
转换(transformation)是ETL解决方案中最主要的部分,它一般用于处理抽取、转化、加载各阶段对各种数据行对操作,一个转换包括一个或者多个步骤(step),例如读取文件、过滤输入行、数据清洗或将数据加载到数据库。
转换里的步骤通过跳(hop)来连接,即是步骤之间带箭头的连线,跳定义了一个步骤之间的数据通路,允许数据从一个步骤向另一个步骤流动。我们可以把跳理解成步骤之间称为行级(row set)的数据行缓存。
我们另一个需要注意的是,这些跳表示的是row set的流动方向,而非执行顺序,理论上转化内的各个步骤是并行执行的,如果我们需要明确定义执行顺序,我们需要在作业(job)中进行调度。
作业job
因为转化是以并行方式执行的,我们需要一个可以串行执行的控件对转化进行调度以控制流程的执行顺序。
一个作业包括一个或者多个按照某种顺序来执行的作业项。作业执行顺序由作业项之间的跳(job hop)和每个作业项的执行结果来决定。作业的跳是作业项之间的连线,它定义来作业的执行路径。作业里每一个作业项的不同运行结果决定来作业的不同执行路径。当连线表示为带锁的黑色线段,表示无论作业项执行是否成功,下一个作业都会执行。当连线为绿色带钩的图标,表示只有作业项执行成功,下一个作业项才会执行。
作业项之间通过跳传递的是一个结果对象(result object),这个结果对象里也包含数据行,但是它们不是以流的方式来传递的,所以需要等一
个作业执行完以后才会传给下一个作业项。
安装与启动
spoon是kettle的一个图形化界面,可以在多个系统上运行。
Windows系统上点击Spoon.bat文件运行,MacOS和linux上可以执行它的shell脚本spoon.sh运行。
Mac上,我们可以在根目录下打开.bash_profile设置一个快捷的打开命令。
安装Java环境:
http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
链接数据库时如果报错说mysql的驱动没有安装:
Driver class ‘org.gjt.mm.mysql.Driver‘ could not be found, make sure the ‘MySQL‘ driver (jar file) is installed.
需要点击以下链接下载驱动:
https://dev.mysql.com/downloads/file/?id=468318
然后将对应的mysql驱动包(mysql-connector-java-5.1.15-bin)放到下kettle的目录下:
\pdi-ce-5.2.0.0-209\data-integration\lib
或者
\pdi-ce-5.2.0.0-209\data-integration\libswt\win64
一个转换或者一个作业都可以单独保存为一个kettle脚本文件,分别以ktr和kjb为扩展名。
执行Kettle有四种方式:
Spoon:集成开发环境。提供一个图形用户界面,用于创建/编辑转换,当然也可以用于执行调试转换和作业脚本,它还可以对任务和性能进行监测。
Kitchen:作业的命令行运行程序,可以通过shell脚本的方式来调用执行。
Pan:转换的命令行运行程序,也可以通过shell脚本的方式来调用执行。
Carte:轻量级的HTTP服务器,在后台运行。也可以用于分布式和协调跨机器执行作业,也就是Kettle集群。
控件简单使用
数据库连接
首先,点击左上角按钮,新建一个转换脚本文件。然后在核心对象中点选输入控件--表输入。
双击控件,进入控件内部,编辑数据库链接。
填写链接信息,测试链接成功。
编写表输入控件
返回控件,在内部编辑表连接的sql,也可以点击获取SQL查询语句,然后进行编辑。然后可以预览,确定查询是否有效,当确认查询有效后,点击确定即可。
然后可以预览,确定查询是否有效,当确认查询有效后,点击确定即可。
字段选择
点击转换-->字段选择,设置一个字段选择节点,然后点击元数据-->获取改变的字段,可以自动识别到上一节点表到字段,我们可以通过改名成字段修改传入下一节点的字段名,注意,如果有中文内容,encoding一定要设置,优先选择utf-8。
点击输出-->表输出,可以设置表输出节点。在目标表一览填写要输出到的目标表名称,也可以通过又变的浏览按钮选择输出表名称。注意这里有一个捷径,如果你想新建一张表,可以在目标表填写新建表名称,然后点击又下角的sql按钮并执行即可创建一个新的数据表
然后点击指定数据库字段和获取字段即可获取对应的字段,也可以点击输入字段映射进行处理,最后点击确定即可。
运行任务
这三个节点确立完毕后,点击页面上的运行按钮,即可运行该任务。
然后坐等运行结束即可。
数据同步
常用同步方法:时间戳、比较、触发器、日志
我们本次使用的同步方法是比较,根据一个flag字段执行相应的插入/更新/删除操作。
-
首先新建两个表输入,分别作为旧的数据源和新的数据源。之后点击连接-->合并记录设置一个合并记录节点。
这个记录会比对新数据源和旧数据源之间的变化,并将比对结果返回给一个标志字段。
注意:新旧数据源获取的字段时的顺序必须一致!
-
创建一个数据同步的节点,点击输出-->数据同步。
这样就会把数据同步到旧数据源。