用kettle做etl也有段时间了,遇到很多问题,总结了一下。
【关于版本的问题】
kettle常用的版本有4.1和4.4,对于4.1版本:
1.该版本的兼容性有点差,在某些机器上运行会启动失败,或者是启动完后增加资源库时报错直接退出。
2.对于etl的sql,比如oracle,不支持/*------*/的注释方式,会将其识别为错误的sql,仅支持--的注释方式。而4.4不存在这个问题。
3.运行不稳定,执行复杂etl过程时容易出现异常退出。
【关于etl过程的问题】
无论4.1或者4.4,有时会出现一些莫名其妙的报错信息,如在oracle下面会报出:
ORA-01013: user requested cancel of current operation
这貌似是oracle爆出来的,好像和sql本身并没有关系,将sql直接到数据库中跑,也没有问题,百思不得其解,调整oracle参数、替换jdbc驱动等都未解决。后来在kettle的官方论坛上找到了一段提示
http://forums.pentaho.com/showthread.php?76733-Strange-SQL-error-kills-DB-input-step
Kettle will stop any SQL processing whenever there is an error, in any step of the transformation. Maybe it helps to increase the logging level and look for other steps that might be throwing an error. If preview works fine it is likely that the error is caused by a step further down in the transformation. Maybe the cause is a specific row, like maybe a row with null values where they are not expected.
,大意是这类错误一般都是由etlsql造成的,如果将执行的日志级别调高一些会看出来具体的原因。所以,将日志级别调整的非常详细会看出具体是什么错误,最后发现还是etl的问题,比如输入表A的数据往B表中输出,结果在B表中没有找到对应的列而报错,如果日志信息不详细,则有时会提示如ORA-01013的错误。
【关于优化】
kettle使用java实现,所以,有时etl过程比较长,所以有时需要调整jvm内存大小,在Spoon.bat中增加Xmx和Xms以及PermSize的大小。