欢迎光临散文网 会员登陆 & 注册

Kettle学习笔记(一):环境和转换

2022-12-03 10:37 作者:月光神杨新羽  | 我要投稿

一、Kettle环境

上次说了kettle的服务器部署,接下来就说说使用过程中遇到的问题。

之前搭建环境中提到了搭建环境要求,在后期使用中,发现JDK的版本也是很重要的。官方给出的开发环境如下,使用的是JDK11。

Kettle官方给出的开发环境

二、Kettle的设计模式

Kettle共有两类设计模式,转换(Transformation)和作业(Job)。转换用于控制数据处理和流转,作业则用于转换集成和流程控制。

在使用Kettle图形化编辑界面前,需要先对软件进行启动。在Linux运行spoon.sh启动,在windows上则运行Spoon.bat进行启动。

下面就先对转换(Transformation)的基本用法进行介绍。

转换的左侧菜单栏分成两类,分别是主对象树和核心对象。主对象树是当前作业中使用到的相关组件。核心对象则是作业中拥有的全部全部组件。


1)关于DB连接,这里提几个点。

第一、以Mysql为例,连接方式共有三种,这里支持三种方式JDBC、ODBC、JNDI,一般都是用JDBC的方式进行连接,这里不再详细赘述。后面有时间再单独说这三种连结方式的区别。


第二、  数据库连接创建好后可以右键点击共享,点击共享后后面的转换都可以直接进行选择。


第三、  需要在连接选项中增加zeroDateTimeBehavior=convertToNull,这是防止时间异常导致处理报错。


 2)转换中拥有大量核心对象,包括输入、输出、流处理、转换、应用、流程、脚本等。由于对象太多就不一一赘述,下面将结合例子来说下一些常用的核心对象。

转换的输入中支持大量方式,常见的输入方式,包括json、cvs、excel、数据库连接等都支持。输出中支持表输出、插入/更新、excel、json等。

首次,使用的场景是表数据的同步,由于有大量历史数据需要同步。选择表输入+表输出。需提前在目标库中建好相应的表,建表时,一定要处理好所有字段必填项和索引。这种情况,也可以通过navicat等工具转储成sql在目标库中执行。开始我以为直接数据库写入要比Kettle效率高很多,但是通过个人对比测试,百万级的数据,数据库直接写入SQL和Kettle工具同步效率相差并不明显(几个小时的任务,直接写入SQL快2小时,自动化情况下效率不明显)。

      

表输入中,编辑数据库连接,然后获取SQL查询语句,展示SQL时,一定要显示每一个字段,这样会更清晰。在最后一行,记录数量限制,测试阶段可以根据需要拿到的数据量调整,但是一旦正式使用,一定要填写0,否则只会读取有限数据。另外,可以通过预览查看获取的数据。


表输出中,编辑数据库连接,然后选择目标表。关于提交记录数量,默认100,在我的环境中,我测试过1000和10000,结果是1000的效率较高,所以每次提交1000条。其他功能都无需设置。

 


这样,一个表输入+一个表输出,就完成了一个基本流程。我有两个大表同步都是通过这样的方式完成的,一个数据数量200万,一个数据数量600万。


其次,使用的场景是在历史数据处理完成后的新数据同步和历史数据更新。这里选择表输入+表输入+插入/更新组件。这里使用的逻辑是获取目标数据表中最新一条数据的时间戳。然后通过此时间戳在源数据表查询此时间后新增和修改的数据,然后再插入/更新到目标数据。以下来详细讲解步骤。

第一个表输入,获取目标表最新时间戳。这里需要提醒的是,一定要保证数据库中有数据,不然获取记录为空,会导致流程失败。

第二个表输入。编辑选择数据库连接,然后获取SQL查询语句,在最后的位置拼写SQL查询更新日期。勾选下方替换SQL语句里的变量,然后从步骤插入数据,选择前一步的输入。两个组件间需要按shift画线连接。

第三个插入/更新。编辑选择数据库连接,点击浏览选择目标表。用来查询的关键字选择ID进行对比,这里ID是表的唯一主键。然后在更新字段中获取全部字段,对ID选择不更新,其他字段都进行更新。若不执行更新,可以勾选提交记录数量下的选框。

这样,一个表更新的转换就完成了,对于新增数据会直接进行插入,对于修改数据,会进行更新。如果表没有主键和更新日期,目前还没有想到有什么好的应对办法。


环境和转换基本上就是这样了,下一次笔记说说作业和定时。

Kettle学习笔记(一):环境和转换的评论 (共 条)

分享到微博请遵守国家法律