概念:
Kettle是一款國外開源的ETL工具,純java編寫,可以在Windows、Linux、Unix上運(yùn)行,數(shù)據(jù)抽取高效穩(wěn)定。
Kettle家族目前包括4個(gè)產(chǎn)品:Spoon、Pan、CHEF、Kitchen。
SPOON?允許你通過圖形界面來設(shè)計(jì)ETL轉(zhuǎn)換過程(Transformation)。
PAN?允許你批量運(yùn)行由Spoon設(shè)計(jì)的ETL轉(zhuǎn)換 (例如使用一個(gè)時(shí)間調(diào)度器)。Pan是一個(gè)后臺執(zhí)行的程序,沒有圖形界面。
CHEF?允許你創(chuàng)建任務(wù)(Job)。 任務(wù)通過允許每個(gè)轉(zhuǎn)換,任務(wù),腳本等等,更有利于自動(dòng)化更新數(shù)據(jù)倉庫的復(fù)雜工作。任務(wù)通過允許每個(gè)轉(zhuǎn)換,任務(wù),腳本等等。任務(wù)將會(huì)被檢查,看看是否正確地運(yùn)行了。
KITCHEN?允許你批量使用由Chef設(shè)計(jì)的任務(wù) (例如使用一個(gè)時(shí)間調(diào)度器)。KITCHEN也是一個(gè)后臺運(yùn)行的程序。
我們主要講解spoon。
一、配置倉庫管理
? ? 點(diǎn)擊右上角配置數(shù)據(jù)存儲位置

點(diǎn)擊Repository Manager…

數(shù)據(jù)庫存儲則是將所創(chuàng)建的文件保存到數(shù)據(jù)庫,這樣可以保證數(shù)據(jù)的安全性。(長時(shí)間的傳輸可能出現(xiàn)數(shù)據(jù)庫連接超時(shí))。
文件存儲則是將文件保存到本地磁盤,兩種可視情況而定。
二、轉(zhuǎn)換的使用
配置BD連接,必須先把數(shù)據(jù)庫連接的jar包放在kettle安裝目錄下的lib包。如:mysql-connector-java-5.1.38.jar
如下:配置了一個(gè)oracle和一個(gè)mysql的數(shù)據(jù)庫


新建一個(gè)轉(zhuǎn)換: 文件 —> 新建 —> 轉(zhuǎn)換

簡單的數(shù)據(jù)轉(zhuǎn)換最常用的就是CSV文件輸入和表輸入兩種了,其他的可以在作業(yè)中用到。

輸出有以上幾種,下面我們示范一個(gè)從數(shù)據(jù)庫讀取數(shù)據(jù),輸出一個(gè)csv文件。

寫完后點(diǎn)擊預(yù)覽查看是否正確

下面看文本文件輸出



點(diǎn)擊執(zhí)行,生成csv文本

三、作業(yè)
比如說我們要同時(shí)同步五張表的數(shù)據(jù)則可以新建一個(gè)作業(yè),多線程去同步五張表的數(shù)據(jù)

四、定時(shí)執(zhí)行任務(wù)
我們將作業(yè)保存在數(shù)據(jù)庫中,windows下一般用任務(wù)調(diào)度來執(zhí)行,linux可以用crotable實(shí)現(xiàn)
新建一個(gè)bat文件

然后將這個(gè)bat文件添加到windows定時(shí)任務(wù)中就可以了
五、java代碼
kettle也支持java代碼及js腳本等


假設(shè)有表person,有字段id,name,code,若code為空,則取name,若不為空加上999,然后更新原表數(shù)據(jù)。

表輸入如下:

Java代碼如下:

更新如下:

執(zhí)行成功后查看數(shù)據(jù)庫數(shù)據(jù):

六、性能優(yōu)化
Oracle:
????defaultRowPrefetch = 20000 (可以根據(jù)內(nèi)存情況定)
????????預(yù)取條數(shù)默認(rèn)值,oracle默認(rèn)為10,可以增加該值來減少數(shù)據(jù)庫請求以提高查詢效率

Mysql:

defaultFetchSize:設(shè)置一次讀取多少條數(shù)據(jù),不設(shè)置讀大表可能會(huì)出現(xiàn)OOM問題
rewriteBatchedStatements:批量插入,可以提高插入數(shù)據(jù)的性能
useServerPrepStmts:如果服務(wù)器支持,是否使用服務(wù)器端預(yù)處理語句? 默認(rèn)值為“真”(如果數(shù)據(jù)類型不一? ? ? ?致,可能會(huì)出現(xiàn)丟失精度問題)
useCursorFetch:使用FetchSize必須啟用
useCompression:與服務(wù)器進(jìn)行通信時(shí)采用zlib壓縮(真/假)? 默認(rèn)值為“假”。
更多參數(shù)配置可以見:mysql配置

提交數(shù)量可以根據(jù)內(nèi)存情況盡量給大,最大5W條。
根據(jù)電腦內(nèi)存修改spoon.bat
???????? PENTAHO_DI_JAVA_OPTIONS="-Xms8192m""-Xmx8192m" "-XX:MaxPermSize=4096m"