kettle 使用中的一些常见问题
问题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. 使用 dirs 参数,将lib,libext,等 jar 路径都设置到这个参数下。
/showthread.php?t=57843&page=2
2. 删除libext 目录下某些不需要的 jar,如各种数据库的jdbc driver
3. 使用 launcher 见
jira.pentaho/browse/PDI-559
 
问题6: 关于资源文件 kettle.property。
资源文件里的变量值如果有汉字,应该使用 unicode 字符方式表示,即 \uxxxx 的形式
变量值里如果有 "\" 符号,要转义为 "\\"
文本文件输入
从文本文件中获得数据,常见的文本文件包括csv 、txt、文件等。用户要在该步骤指定文件名、文件内容、错误处理方式、过滤器、字段等项目。

参数说明:

l 指定文件名的三种方式

1. 指定一个具体的文件名。
2. 指定一个正则表达式,来匹配一个目录下的文件。
3. 将其它步骤的运行结果作为文件名。

l 文件内容设置
分隔符:指定字段之间的分隔符号
文本限定符:指定一个字符串左右的限定符号,有限定符的字符串里可以使用分隔符。有限定符的字符串内部如果要使用限定符,要将限定符加倍。
转义符:指定文本中的转义符号,用来将其后的字符转义。
页眉:指定页眉的行数,页眉行不作为数据行处理。
页脚:指定页脚的行数,页脚行不作为数据行处理。 session如何设置和读取
回卷:说明一个数据行是否被回卷为多行。

l 错误处理设置
忽略错误:是否忽略解析过程中产生的错误。
跳过错误行:是否跳过发生错误的行。如果不跳过,那么发生错误的字段值会被置为空。
记录错误数的输出字段:指定一个输出字段用来记录解析错误的字段的个数。
记录错误描述的输出字段:指定一个输出字段用来记录发生错误的所有字段的名字。
记录错误字段名的输出字段:指定一个输出字段用来记录错误的描述信息。
警告文件目录:当发生警告时,警告将保存在这个指定的目录下。
错误文件目录:当发生警告时,警告将保存在这个指定的目录下。
失败行数文件目录:当读取行失败时,读取失败的行号将保存在这个指定的目录下。

l 过滤器
过滤器:用来过滤输入行,符合过滤器条件的输入行将被忽略掉。
过滤字符串:用来去匹配输入数据的字符串(不支持正则表达式)
过滤开始位置:指定字符串里开始匹配的位置,负数或0表示从第一个字符开始匹配。
停止处理:当遇到了匹配的字符串时,是否停止处理

l 字段
设定字段名称和数据类型

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。