初学者kettle使用的总结

本人初学者,对于kettle了解的非常少,就最近遇到的问题进行一个小的增量式总结,如有错误请批评指正!

1)双击一个转换中可以设置"杂项"中选中“使用唯一连接”,表示该转换和数据库是一个session,有多个分支的话,执行失败数据就会回滚

2)在一个job中可以有多个转换,但不是同一个session

3)"BD连接"中可以共享数据库配置

4)将相同的ktr复制2份,想一份数据库连接使用固定的,另外一份使用${...}的,要先创建一个带$的数据库连接,把之前本地共享的数据库关闭共享,不然在修改任意一份ktr之后另外一份的数据库连接也会被修改。(没搞懂是怎么回事)

5)遇到“只有一个输入记录期待设置变量并且至少已经收到2个变量.”的问题,这个问题是我在表输入的时候给sq一次l传入了多个值(相当于多条记录的id值),然后在更新完表之后又设置了“设置变量”,这时候由于一次查出多条记录,“设置变量”里不知道到底去取这些记录的哪条里的信息,所以会报这个错。最后只好取消采用“设置变量”的传值的方式,采用“表输入”替代,虽然有点麻烦,但是还没有想到其他的解决办法。

6)在写kettle脚本的时候遇到最多的问题就是类型转换问题,如:

"java.sql.Timestamp cannot be cast to java.lang.Long“,这是日期字段不为空没问题,但是有值就会报这个转换问题;

或者Unexpected conversion error while converting value [N_YSFJFJ Integer(9)] to an Integerjava.math.BigDecimal cannot be cast to java.lang.Long

 这类的问题让人头疼不已。后来发现这类问题都是在要“更新/插入”之前使用了多个”表输入“来传值,貌似在传值的时候都将字段对应的值默认转为integer类型的,所以要解决这类转换问题,要么在“更新/插入”的前一个步骤添加js控件来强制转换所有可能出现问题的字段,要么在”表输入“中的sql语句中使用case when 或者convert。

7)今天遇到一个问题是:一个转换对一个表进行插入操作,第一次查询然后插入数据,但是有些字段需要特殊处理下,也就是要先插入主要的信息,然后针对这个记录根据刚才生成的id进行更新操作,在开发环境上测试没问题,换到另外一个环境上测试就报“Entry to update with following key could not be found: [24c78b11d04147f7bf4a3f8599c14b29]”,意思是找不到对应的id,但是到库中查询,这条记录是有的!后来勾选“更新”中的“忽略查询失败”,就不提示这个问题,但是数据没有更新到数据库中。后来大神排查下说是kettle中一个转换中的事务没有提交,导致没有先插入,后更新。这样当然找不到对应的id了,另外2个数据库对事务的配置也可能不同,所以导致出现这种问题。解决方案:1,使转换为“唯一连接”;2,“更新/插入”选择“提交记录数量”为1,这样每一条就提交一次事务,但这严重影响效率。

你可能感兴趣的:(菜鸟每天进步一点点)