使用kettle遇到的问题

参考文章:

http://blog.sina.com.cn/s/blog_888269b20100tw8q.html
https://www.phpsong.com/1074.html
http://www.ttlsa.com/mysql/research-and-measurement-of-timeout-mysql/
https://blog.csdn.net/gladmustang/article/details/41407851


以前写的 kettle 应用中的问题总结, 出处: http://pdi.itpub.net/post/37422/466911
 
 
本文主要总结了 Kettle 3.x 在应用中遇到的一些问题
 
问题1:
从excel 中抽取数据,插入到oracle 9 数据库中,报下面的错误.
2008/06/25 13:30:57 - 插入更新数据表.0 - Insert row: ![field1=1.3965E8, field2=1,798, field3=2002/05/27 00:00:00.000]
2008/06/25 13:30:57 - oracl - ERROR : java.sql.SQLException: ORA-01722: 无效数字
2008/06/25 13:30:57 - oracl - ERROR : at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:125)


原因:
从错误信息可以看出,字段 "field2" 对应的数据是 1,798,该字段在数据库中是 Number 类型,Oracle 不能将 1,798 格式的字符串转换为数字。
解决方法:
在 【Excel输入步骤】-【字段】 标签下对应的字段设置为正确的类型。将 "field2" 设置为 "Number" 类型(默认是 String 类型)。
 
 
问题2: 由 sqlserver 向 mysql 迁移数据, 迁移以后的数据是乱码原因: 这是由于mysql 的默认编码是 utf-8, 而中文环境下客户端的默认编码一般都是 gbk 或 gb18030, 由于客户端和服务器编码不一样导致保存到 mysql 的数据是乱码
解决方法: 在新建连接窗口中有一个选项(option) 标签, 在这个标签下可以设置数据库的一些连接参数. 在这里我们要设置 mysql 的客户端编码参数, 参数名characterEncoding, 参数值gbk.
 
 
问题3: 在 SQLServer 表输入步骤中使用以问号作为参数的 sql 语句 (参数的值从以前的步骤中获得),向 mysql 数据库导入数据 (使用 mysql 表输出步骤).
在执行的时候报告错误 Unable to get queryfields for SQL: AND e.LOCAL_TIME>? 00909 PRS INC Invalid character.
原因: 从错误语句看,是参数没有被替换掉, 因为发送给 mysql 服务器的是这样的语句 "AND e.LOCAL_TIME>?". 参数没有被替换掉是因为从以前步骤中读取的参数值是 null.
解决方法: 增加对 null 值的判断, 可以有两种方法, 如果这个值是从数据库获取的,一般的数据库都提供了处理null值的函数,如 mysql 的ISNULL 函数. 如果这个值是从其他步骤获得的,可以通过 Javascript 步骤进行判断并转换.
 


问题4: 使用 PDI 3.x 版本连接 DB2 数据库时会报下面的错误
Error connecting to database: (using class com.ibm.db2.jcc.DB2Driver)
encoding not supported!!
原因: PDI 自带的DB2 JDBC Driver 的版本比较低,无法连接 GBK 编码的 DB2 数据库。
解决方法: 将 DB2 数据库的编码改为 utf-8 编码。或者找高版本的 DB2 JDBC Driver 来代替 PDI 自带的DB2 JDBC Driver。
 


问题5: win2000 下运行,命令行太长导致spoon 或 kitchen 无法运行:
原因: spoon 运行时加载了太多的 jar,win2000 下对命令行的长度有限制
解决方法:1. 使用 java.ext.dirs 参数,将lib,libext,等 jar 路径都设置到这个参数下。
http://forums.pentaho.org/showthread.php?t=57843&page=2
2. 删除libext 目录下某些不需要的 jar,如各种数据库的jdbc driver
3. 使用 launcher 见
http://jira.pentaho.com/browse/PDI-559
 
问题6: 运行 mysql 转换,一个转换正常,多个转换放到 job 里,则抛出下面的异常:
 
[kettle@kettle-etl-server root]$ /usr/local/kettle/KettleStudio/pan.sh     -rep K_RESOURCE_PRODUCT -user admin -pass admin -trans TB_COMPANY
INFO  11-01 16:17:35,608 - Pan - Start of run.
INFO  11-01 16:18:30,201 - Using "/tmp/vfs_cache" as temporary files store.
INFO  11-01 16:18:32,902 - RepositoriesMeta - Reading repositories XML file: /usr/local/kettle/.kettle/repositories.xml
INFO  11-01 16:18:47,003 - TB_COMPANY - Dispatching started for transformation [TB_COMPANY]
INFO  11-01 16:18:49,232 - TB_COMPANY - This transformation can be replayed with replay date: 2010/01/11 16:18:49
INFO  11-01 16:18:49,910 - 琛ㄨ緭鍑篢B_COMPANY.0 - Connected to database [K_SHARE_DATA4] (commit=1000)
ERROR 11-01 16:23:54,307 - 琛ㄨ緭鍏B_COMPANY_PIXOS_EXT.0 - Unexpected error :
ERROR 11-01 16:23:54,309 - 琛ㄨ緭鍏B_COMPANY_PIXOS_EXT.0 - org.pentaho.di.core.exception.KettleDatabaseException:
Couldn't get row from result set
Communications link failure due to underlying exception:
 
** BEGIN NESTED EXCEPTION **
 
java.io.EOFException
 
STACKTRACE:
 
java.io.EOFException
        at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:1934)
        at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2433)
        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2909)
        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:798)
        at com.mysql.jdbc.MysqlIO.nextRow(MysqlIO.java:1316)
        at com.mysql.jdbc.RowDataDynamic.nextRecord(RowDataDynamic.java:370)
        at com.mysql.jdbc.RowDataDynamic.next(RowDataDynamic.java:360)
        at com.mysql.jdbc.ResultSet.next(ResultSet.java:5970)
        at org.pentaho.di.core.database.Database.getRow(Database.java:2808)
        at org.pentaho.di.core.database.Database.getRow(Database.java:2793)
        at org.pentaho.di.trans.steps.tableinput.TableInput.processRow(TableInput.java:137)
        at org.pentaho.di.trans.step.BaseStep.runStepThread(BaseStep.java:2889)
        at org.pentaho.di.trans.steps.tableinput.TableInput.run(TableInput.java:345)
 
 
** END NESTED EXCEPTION **
 
 
 
Last packet sent to the server was 303644 ms ago.
 
        at org.pentaho.di.core.database.Database.getRow(Database.java:2878)
        at org.pentaho.di.core.database.Database.getRow(Database.java:2793)
        at org.pentaho.di.trans.steps.tableinput.TableInput.processRow(TableInput.java:137)
        at org.pentaho.di.trans.step.BaseStep.runStepThread(BaseStep.java:2889)
        at org.pentaho.di.trans.steps.tableinput.TableInput.run(TableInput.java:345)
Caused by: com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception:
 
** BEGIN NESTED EXCEPTION **
原因:
见 http://forums.pentaho.org/showthread.php?t=62807
解决方法:
1. 把net_write_timeout设大一些,
2. 如果第一种方法没有没有效果,则在 mysql 连接面板上,不选 user result stream cursor 选项。
 
问题7 Oracle 乱码问题 ,编码 AMERICAN_AMERICA.WE8DEC。用kettle从这个库里抽取出数据,并输出到同一个库里,结果出现了乱码
解决方法 ,设置 jdbc 连接参数的客户端编码(类似 mysql 的乱码处理),或使用 odbc连接,或者 设置客户端编码。
注:对US7ASCII  和 ZHS16GBK 编码的 oracle 数据库,出现乱码,可以增加一个 执行sql 步骤,增加如下语句
set nls_lang= 'AMERICAN_AMERICA.US7ASCII' 

set nls_lang=SIMPLIFIED CHINESE_CHINA.ZHS16GBK 
 
问题8 数据源 sybase 乱码,预览时也是乱码,sybase 编码 iso-88591。
在sybase 连接串的 option 里设置 charset=eucgb
或者在 js 里转换字符编码 new String (old.getBytes("8859_1"), "gb2312");
 
问题9 sqlserver 2005 express 的连接稍麻烦
需要设置 instance,另外启动 TCP/IP 服务(默认不启动)
见截图


 
Microsoft SQL Server 2005->配置工具->SQL Server配置工具,在窗口中启动SQL Server Browser服务、启用TCP/IP协议,重启SQL Server (SQLEXPRESS)服务,即可连接数据库。


 


 转载地址:http://www.pentahochina.com/biforum/topic-29-1.html

猜你喜欢

转载自blog.csdn.net/dongdong2980/article/details/79880190