kettle 使用中的一些常见问题

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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. 使用java.ext.dirs 参数,将lib,libext,等jar 路径都设置到这个参数下。/showthread.php?t=57843&page=2

2. 删除libext 目录下某些不需要的jar,如各种数据库的jdbc driver

3. 使用launcher 见

/browse/PDI-559

问题6: 关于资源文件kettle.property。

资源文件里的变量值如果有汉字,应该使用unicode 字符方式表示,即\uxxxx 的形式

变量值里如果有"\" 符号,要转义为"\\"

文本文件输入

从文本文件中获得数据,常见的文本文件包括csv 、txt、文件等。用户要在该步骤指定文件名、文件内容、错误处理方式、过滤器、字段等项目。

参数说明:

l 指定文件名的三种方式

1. 指定一个具体的文件名。

2. 指定一个正则表达式,来匹配一个目录下的文件。

3. 将其它步骤的运行结果作为文件名。

l 文件内容设置

分隔符:指定字段之间的分隔符号

文本限定符:指定一个字符串左右的限定符号,有限定符的字符串里可以使用分隔符。有限定符的字符串内部如果要使用限定符,要将限定符加倍。

转义符:指定文本中的转义符号,用来将其后的字符转义。

页眉:指定页眉的行数,页眉行不作为数据行处理。

页脚:指定页脚的行数,页脚行不作为数据行处理。

回卷:说明一个数据行是否被回卷为多行。

l 错误处理设置

忽略错误:是否忽略解析过程中产生的错误。

跳过错误行:是否跳过发生错误的行。如果不跳过,那么发生错误的字段值会被置为空。

记录错误数的输出字段:指定一个输出字段用来记录解析错误的字段的个数。

记录错误描述的输出字段:指定一个输出字段用来记录发生错误的所有字段的名字。

记录错误字段名的输出字段:指定一个输出字段用来记录错误的描述信息。

警告文件目录:当发生警告时,警告将保存在这个指定的目录下。

错误文件目录:当发生警告时,警告将保存在这个指定的目录下。

失败行数文件目录:当读取行失败时,读取失败的行号将保存在这个指定的目录下。

l 过滤器

过滤器:用来过滤输入行,符合过滤器条件的输入行将被忽略掉。

过滤字符串:用来去匹配输入数据的字符串(不支持正则表达式)

过滤开始位置:指定字符串里开始匹配的位置,负数或0表示从第一个字符开始匹配。

停止处理:当遇到了匹配的字符串时,是否停止处理

l 字段

设定字段名称和数据类型

使用kettle设计一些ETL任务时一些常见问题

2009-07-27 10:55

摘要:本文主要介绍使用kettle设计一些ETL任务时一些常见问题,这些问题大部分都不在官方FAQ上,你可以在kettle的论坛上找到一些问题的答案

1. Join

我得到A 数据流(不管是基于文件或数据库),A包含field1 , field2 , field3 字段,然后我还有一个B数据流,B包含field4 , field5 , field6 , 我现在想把它们‘加’ 起来, 应该怎么样做.

这是新手最容易犯错的一个地方,A数据流跟B数据流能够Join,肯定是它们包含join key ,join key 可以是一个字段也可以是多个字段。如果两个数据流没有join key ,那么它们就是在做笛卡尔积,一般很少会这样。比如你现在需要列出一个员工的姓名和他所在部门的姓名,如果这是在同一个数据库,大家都知道会在一个sql 里面加上where 限定条件,但是如果员工表和部门表在两个不同的数据流里面,尤其是数据源的来源是多个数据库的情况,我们一般是要使用Database Join 操作,然后用两个database table input 来表示输入流,一个输入是部门表的姓名,另一个是员工表的姓名,然后我们认为这两个表就可以”Join” 了,我们需要的输出的确是这两个字段,但是这两个字段的输出并不代表只需要这两个字段的输入,它们之间肯定是需要一个约束关系存在的。另外,无论是在做Join , Merge , Update , Delete 这些常规操作的时候,都是先需要做一个compare 操作的,这个compare 操作都是针对compare key 的,无论两个表结构是不是一样的,比如employee 表和department 表,它们比较的依据就是employee 的外键department_id , 没有这个compare key 这两个表是不可能连接的起来的.. 对于两个表可能还有人知道是直接sql 来做连接,如果是多个输入数据源,然后是三个表,有人就开始迷茫了,A表一个字段,B 表一个字段,C表一个字段,然后就连Join操作都没有,直接database table output , 然后开始报错,报完错就到处找高手问,他们的数据库原理老师已经

相关文档
最新文档