分享

ETL工具Kettle初学者踩坑总结

本帖最后由 Oner 于 2017-1-7 15:42 编辑
问题导读:
1.  如何连接资源库?
2.  如何连接数据库?
3.  如何解决数据库连接更新不及时问题?
4.  如何解决Unable to read file错误?
5.  如何解决tinyint类型数据丢失问题?



这周工作主要负责一部分数据同步和清洗,涉及到的ETL工具是Kettle,由于之前没有接触过这个工具,使用过程中遇到了各种问题,还好身边有仓库的同事帮忙,最后总结下所遇到的一些问题(Kettle版本5.4)。

1.  如何连接资源库

工具》资源库》连接资源库
20170107141630.jpg

操作完上面的步骤后,会出现下面图片的界面
20170107142010.jpg

如果之前建立过资源库,会展示出目前所有的资源库,选中一个想要的,点击确定就可以了。如果没有,可以点击“+”来添加一个新的资源库。点击之后出现下图的界面。
20170107142351.jpg

选择第二个,“Kettle file  repository”,然后确定,会出现下图界面。
20170107142645.jpg

图中圈中的为必填的,填好之后点击确定,这样就成功添加了一个新的资源库。
20170107142812.jpg

点击确定即可连接成功。

2. 如何连接数据库

在连接数据库之前,首先需要保证当前在一个transform(转换)页面,然后点击左侧选项栏中的“主对象树”,然后右键点击“DB连接”,选择“新建”。
20170107143721.jpg

之后会出现下图界面。
20170107144300.jpg

上图说明数据库连接成功。当然了,可以设置一些其他的连接属性,如zeroDateTimeBehavior=round&characterEncoding=utf8。
20170107145748.jpg


3. 如何解决数据库连接更新不及时问题

有时候我们数据库中的表的字段进行了更新(增加或删除字段),但是在使用“表输入”控件的“获取SQL语句”功能是会发现的到的字段还是原来的字段,这是由于缓存造成的,需要进行缓存清理。
20170107150323.jpg

4.  如何解决Unable to read file错误

有时候我们在文件夹中将Job或Transform移动到其他目录之后,执行时会出现Unable to read file错误。如下图
20170107151036.jpg

这是由于当前Job或Transform所在的目录跟配置中不一致造成的。例如我这个示例中,当前trans.ktr文件所在的路径在D:\SVN\etl_repo\smzdm\recommend\mt目录下,
20170107151301.jpg

而我的trans.ktr配置中的目录在D:\SVN\etl_repo\smzdm\recommend。
20170107151626.jpg

而运行该transform时会在D:\SVN\etl_repo\smzdm\recommend目录(配置属性中的目录)下寻找这个trans.ktr文件,这就导致找不到文件的错误。需要将配置文件中的目录跟实际文件所在目录保持一致。更改步骤如下图:
20170107151549.jpg

然后就进入到了当前Transform的配置页面。修改配置中的目录即可。


5. 如何解决tinyint类型数据丢失问题

在Kettle使用JDBC连接MySQL时,对于表中数据类型为tinyint的字段,读取时有可能会将其转为bool类型,这有可能造成数据丢失。例如,有一个叫status名字的tinyint类型字段,取值有三种:0、1、2。kettle读取之后很可能将0转为false,1、2都转为true。输出时,将false转为0,true转为1,这样就会造成元数据中status为2的数据被错误的赋值为1。

解决这个问题时,可以在读取元数据时将status转为int或char。比如SELECT CAST(status as signed) as status FROM <table_name>或SELECT CAST(status as char) as status FROM <table_name>



没找到任何评论,期待你打破沉寂

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条