在google code上開了一個java版的ETL小工具project:jmyetl

iihero發表於2009-03-08

以前,曾經利用各資料庫底層C-API作wrapping,實現了若干異構資料庫間資料匯入匯出的功能,但是程式碼複雜,不便開源。

 

下午,用java寫了一個簡單的資料抽取程式,實現MySQL資料庫到Sybase ASE的資料移植。將它開源,放到:http://code.google.com/p/jmyetl/ 上邊了。本來取名做myetl,結果已經有人在sf.net上申請了,後來在其前加上一個j。以示java版本。

有興趣的可以試用一下。

 

目前,可以是某使用者的全庫資料匯入,也可以選擇性的匯入若干張表。

因為剛實現一個初步框子,所以定為0.9.0版。

 

打算以後有空再寫些別的庫間ETL,最後再重構,組合。

 

使用方法:

當前目錄下邊有一個xml配置檔案etl_config.xml,其格式如下:

 

直接執行myEtl.bat即可實現匯入。如果去掉<table>那一塊的註釋,則全庫匯入。

注意字符集選項,如果沒有這個配置,很容易出現亂碼。

 

 

目前的限制條件是:

不要使用資料庫超級使用者來配置連線,因為目前程式裡邊沒有對系統表進行過濾。

 

後期計劃:

Sybase ASE --> Sybase ASE

Sybase ASA --> Sybase ASE

Sybase ASE --> Sybase ASA

 

Oracle --> Sybase ASE

DB2 --> Sybase ASE

SQL Server --> Sybase ASE

 

逆向匯入,以後有時間再做。

 

已有功能:

1. 能保持表結構幾乎一致,型別相容

2. 日誌檔案etl.log裡會記錄匯入的詳細過程以及中間可能出現的出錯資訊

3. 目標表,會建立與源表一樣的主鍵結構

4. 目標表會建立與源表一致的identity資訊

5. 通過字符集一致性配置,會保持源表中的字符集到目標表,不致亂碼。

 

待改進功能:(下述功能,是細緻一些的功能,適用目的不同,如果只是簡單的抽取資料,則不需要)

1. 新增與源表一致的foreign key constraints (這個稍微有點複雜,會增加匯入時間)

2. 新增與源表一致的index功能,即附加建立的索引也在目標表上體現出來

 

其實,以前用C++ wrapper實現的原理與java版本比較接近,相比JDBC而言,它能操縱更多底層的API,獲取更豐富的資訊,只是程式碼量可能比較大。

 

相關文章