使用kettle遇到的一些问题

kettle

kettle是一款开源的数据etl工具,用于做数据抽取和整合。其功能是很强大的。若要连接某个数据库,要先在kettle的lib目录下放入对应的jar包。

简单的数据表聚合输出

简单的kettle操作

右键目录树,软件会卡死

原因是kettel和当前的jdk版本有冲突,同时,右上角无connect,无法连接资源库也是因为这个原因。我用的kettel8.2对应jdk9.0.4异常,更换为1.8.0是正常的。

方法:下载jdk1.8.0,更改系统的环境变量JAVA_HOME和PATH,重启电脑并重启kettle。

修改环境变量

中文输出乱码

kettle的字符集默认是GBK,在进行数据库操作时,修改为utf8。建议每次新建数据库连接时都这样设置一下,防止不必要的麻烦。

右键数据库连接,编辑

右键编辑

在数据库连接中选择高级,下方输入set names utf8;

执行SQL语句

在数据库连接中选择,选项,characterEncoding选择utf8

image-20211029194109426

创建并连接资源库后,右上角不显示

还是中文乱码问题,资源库名字中带有中文。

找到用户目录:C:\Users\hasee\.kettle\repositories.xml将乱码修改为英文即可。

Kettle转换中,数据库连接和数据库查询的区别

先看两张测试数据表:

student表:

student表

teacher表:

teacher表

数据库查询(student作为表输入)

kettle效果:

数据库查询-student输入

sql命令查询效果(student左外连接teacher):

sql查询-student左外连teacher

有同学是不是觉得这里一模一样啊,别急,接着往下看:

数据库查询(teacher表作为输入):

kettle效果:

数据库查询-teacher输入

sql查询效果(teacher左外连接student):

teacher左外连接student

可以看出,kettle的表输入接数据库查询并不是单纯的左外连接,而是以表输入为主要对象,查询出第一个与之匹配的数据即返回,并将数据字段合并再主要对象后面。最终数据记录数与表输入项一致。

数据库连接(student表作为表输入)

连接详情:

image-20211104213925883

kettle效果:

数据库连接(student输入)

数据库连接(teacher表作为表输入)

连接详情:

连接sql

kettle效果:

数据库连接-teacher表输入

这里可以看出来,效果完全一样。

有同学猜到了,这就是典型的内连接:

sql查询语句:

sql内连接查询

数据库外连接(teacher表作为表输入)

那么我想使用数据库外连接应该怎样操作呢?细心的同学注意到在数据库连接步骤,有一个Outer join?选项。勾选它试试:

kettle效果:

外连接-teacher表输入

这样他的效果和左外连接就一模一样了。

总结:

kettle中的数据库查询,是指将输入表的每一项到数据库中作匹配,只返回第一个匹配到的结果。未匹配到返回空值。最后返回的数据记录和表输入记录数目一致

而数据库连接默认是对应sql中的内连接。勾选Outer join?之后是进行的左外连接。至于全连接,个人还在尝试。虽然可以通过kettle中的记录集连接来完成,但是该步骤的排序和连接操作是在kettle内完成的,效率极其低下。

评论