Kettle 在應用中遇到的一些問題和解決方法

PDI發表於2008-07-19

本文主要總結了 Kettle 在中文環境應用中遇到的一些問題, 問題列表還會不斷增加. 這些問題都是 kettle fans 提供的,歡迎參與討論.

問題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)

[@more@]


原因:
從錯誤資訊可以看出,欄位 "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 路徑都設定到這個引數下。

2. 刪除libext 目錄下某些不需要的 jar,如各種資料庫的jdbc driver
3. 使用 launcher 見

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/14366449/viewspace-1007516/,如需轉載,請註明出處,否則將追究法律責任。

相關文章