kettle是一个常用的ETL转换工具,具有良好的兼容性,利用它可以将我们不同类型的数据库中的数据以流的形式进行抽取和转换。这个软件我个人看来上手还是比较快的,我目前接触了将近一个月,基本掌握了它的一些用法。我们要使用的话,在网上找到资源包后下载解压到本地,找到如下目录,运行Spoon.bat即可启动。
另外需要注意的是,我们找到的资源包有的可能已经包含了一些基本数据库的驱动包,根据业务如果需要连接其他类型的数据库,找到需要的数据库驱动包,放在lib目录下重启即可。
我目前是将生成的文件保存在一个文件夹里,一个作业可以形成一个kjb文件,一个转换可以形成一个ktr文件,数据库连接则是kdb文件。运行Spoon.bat后,如果有现成的ETL文件,就可以在右上角这里点击配置,这个步骤相对比较简单,不在此赘述。
一个作业可以由多个转换组成,转换由多个步骤组成,下图所示为一个作业示例:
数据库连接需要注意的地方也不多,按照我们平时连接数据库的操作即可,此处需要注意,如果没有指定类型的数据库驱动包,会连接不上数据库,可以点测试按钮测试是否能够连通。
1.表输入
指定步骤名称,选择数据库连接,编写sql,点击预览,即可看到查询数据。表输入一般存在转换的第一个步骤,不可以传递任何参数。
2.插入/更新
指定步骤名称,选择数据库和数据库表,根据我们设定好的条件自动对流里的数据进行插入或者更新,插入是将根据条件查询不到的数据进行插入,此处如果条件字段允许为null,在设置比较符时选择 =~ null,否则可能会报错,更新操作则是将根据条件查询的数据进行更新,更新字段后面的更新一列,如果设置值为Y,则表示允许更新,N为不允许更新,按需操作。如果勾选了不执行任何更新,则这个步骤只会插入,不会更新。数据量大时会影响效率,不建议使用。
3.表输出
指定步骤名称,选择数据库和数据库表,指定数据库字段与流字段的对应关系,此步骤实现的是插入操作。
4.连接线
按住shift键,鼠标选择一个步骤拉到下一个步骤,即可将两个步骤串联起来,步骤之间会产生一条连接线。
下图所示的连接线类型为复制,会将流数据同时发送给指定的多个步骤:
下图所示的连接线类型为分发,目标步骤会轮流接收记录:
5.数据库连接
指定步骤名称,选择数据库连接,编写sql,数据库连接一般存在转换的中间某个步骤,可以将流中的字段作为参数使用,在参数列表按照参数使用顺序设置字段名称和类型即可。
6.过滤记录
指定步骤名称,在条件栏设置条件,多个条件时选择右边的加号,条件之间的连接符可以根据业务需求选择,当符合条件时,则会进入发送true数据的步骤,不符合则是发送false数据的步骤。
转换内效果如下:
7.字段选择
指定步骤名称,在选择和修改栏设置需要保留的字段,或者在移除栏选择需要移除的字段,即可当转换到达该步骤时筛选掉一部分字段。当一个转换内步骤比较复杂,则流里则会产生大量冗余字段,此时可采用字段选择,筛掉一部分数据,使数据更加简洁。
8.复制记录到结果/从结果获取记录
常见于将一个转换产生的数据传递到下一个转换,先使用‘字段选择’指定需要传递的数据,再添加‘复制结果到记录’,在下个连接的转换中,使用‘从结果获取记录’,选择字段名,即可获取前一个转换的数据。此处注意只适用于两个相邻的转换,即两个转换之间有顺序关系,下一个转换需要使用上一个转换的数据作为参数。
9.增加常量
设置字段名称、类型和值,给流中添加固定值字段。
10.合并记录
合并的记录字段值需要一致,指定旧数据源与新数据源,设置标志字段可以看到这条数据是否在旧数据源中存在
11.去除重复记录/唯一行(哈希值)
有时我们需要去除流里面的重复数据,这两种方式都可以实现,根据指定字段去重,需要注意的时,去除重复记录需要根据指定字段排好序,唯一行则不需要。
12.流查询
lookup step 设置从哪个步骤查询数据
这个一般会关联两个步骤,在关键字框设置查询条件,接收字段为需要查询的字段。