研究 Scriptella 相關心得
23:05
如果要查詢 Open Source ETL Written in Java, 可以查閱以下這個連結
http://www.manageability.org/blog/stuff/open-source-etl
我目前研究了幾個 ETL :
- CloverETL
- Talend(JasperETL)
- Scriptella
不過 CloverETL 與 Talend 都有一個問題, 就是採用 Eclipse 作為 GUI 開發的模式(而且不是要 license 就是要註冊, 感覺很麻煩), 如果沒有內建的 Components 就需要額外的開發, 因為這次我要解決的是大量的 cobol rowdata(用字串長度切割) 的文字檔案到 Database, 而不是一般的 csv 或是資料庫之間轉換, 加上 GUI 對我來說只是增加 definition 的複雜度, 不太適合我們移交給客戶簡單學習與我們操作介面的開發.
Scriptella 算是蠻新的 ETL 小工具, 我測試了相關的效能還覺得不錯, 以 10 萬筆 csv 的轉到資料庫中, 大約只需要 15 ~ 20 秒左右的時間, 不過當我研究裡面的 sources codes, 讀取 csv 檔案的方式可以透過 csv (by opencsv) 或是 text (by scriptella), text 擁有較快的速度. 因為是採用 java.util.regex 的查詢, 類似 (.*) 這樣的 pattern 進行切割, 而 opencsv Driver 則是設定 quote=", separator=; 類似的參數, 就會進行資料查詢切割.
不過吸引我的地方, 就是 xml 檔案格式非常的單純, 幾乎只要看了就知道要怎麼去設定, 另外, 他們的 SPI 更單純,
http://scriptella.javaforge.com/docs/api/scriptella/spi/package-summary.html
主要實做相關的 Interface 就可以了, 首先就是 Driver extends AbstractScriptellaDriver, 在 connect method 呼叫 extends AbstractConnection 的 Connection, 主要設定相關 Transaction 的模式. 其餘的就是看你要怎麼去實做 Callbacks 以及如何取用相關的 Parameters,
另一個困擾我的問題, 就是原本我期望在 xml 檔之中設定 <formats> 等 xml 來定義我的參數, 但是會和 etl.dtd 衝突, 有三個解決方法,
- 重新 compile scriptella 不去驗證 dtd,
- 重新定義 etl.dtd,
- 不要用 xml
我選擇 "不要用 xml" 來定義我的參數 ( column startpos, length, type and etc.. ) 我改用 JSON 的設定方式,
總結, 如果不需要圖形話介面的輕巧 ETL 工具, Scriptella 是個不錯的工具.