概念:
Kettle是一款國(guó)外開(kāi)源的ETL工具十饥,純java編寫(xiě)励背,可以在Windows瑟枫、Linux斗搞、Unix上運(yùn)行,數(shù)據(jù)抽取高效穩(wěn)定慷妙。
Kettle家族目前包括4個(gè)產(chǎn)品:Spoon僻焚、Pan、CHEF景殷、Kitchen溅呢。
SPOON?允許你通過(guò)圖形界面來(lái)設(shè)計(jì)ETL轉(zhuǎn)換過(guò)程(Transformation)。
PAN?允許你批量運(yùn)行由Spoon設(shè)計(jì)的ETL轉(zhuǎn)換 (例如使用一個(gè)時(shí)間調(diào)度器)猿挚。Pan是一個(gè)后臺(tái)執(zhí)行的程序咐旧,沒(méi)有圖形界面。
CHEF?允許你創(chuàng)建任務(wù)(Job)绩蜻。 任務(wù)通過(guò)允許每個(gè)轉(zhuǎn)換铣墨,任務(wù),腳本等等办绝,更有利于自動(dòng)化更新數(shù)據(jù)倉(cāng)庫(kù)的復(fù)雜工作伊约。任務(wù)通過(guò)允許每個(gè)轉(zhuǎn)換,任務(wù)孕蝉,腳本等等屡律。任務(wù)將會(huì)被檢查,看看是否正確地運(yùn)行了降淮。
KITCHEN?允許你批量使用由Chef設(shè)計(jì)的任務(wù) (例如使用一個(gè)時(shí)間調(diào)度器)超埋。KITCHEN也是一個(gè)后臺(tái)運(yùn)行的程序。
我們主要講解spoon佳鳖。
一霍殴、配置倉(cāng)庫(kù)管理
? ? 點(diǎn)擊右上角配置數(shù)據(jù)存儲(chǔ)位置
點(diǎn)擊Repository Manager…
數(shù)據(jù)庫(kù)存儲(chǔ)則是將所創(chuàng)建的文件保存到數(shù)據(jù)庫(kù),這樣可以保證數(shù)據(jù)的安全性系吩。(長(zhǎng)時(shí)間的傳輸可能出現(xiàn)數(shù)據(jù)庫(kù)連接超時(shí))来庭。
文件存儲(chǔ)則是將文件保存到本地磁盤(pán),兩種可視情況而定穿挨。
二月弛、轉(zhuǎn)換的使用
配置BD連接肴盏,必須先把數(shù)據(jù)庫(kù)連接的jar包放在kettle安裝目錄下的lib包。如:mysql-connector-java-5.1.38.jar
如下:配置了一個(gè)oracle和一個(gè)mysql的數(shù)據(jù)庫(kù)
新建一個(gè)轉(zhuǎn)換: 文件 —> 新建 —> 轉(zhuǎn)換
簡(jiǎn)單的數(shù)據(jù)轉(zhuǎn)換最常用的就是CSV文件輸入和表輸入兩種了帽衙,其他的可以在作業(yè)中用到叁鉴。
輸出有以上幾種,下面我們示范一個(gè)從數(shù)據(jù)庫(kù)讀取數(shù)據(jù)佛寿,輸出一個(gè)csv文件幌墓。
寫(xiě)完后點(diǎn)擊預(yù)覽查看是否正確
下面看文本文件輸出
點(diǎn)擊執(zhí)行,生成csv文本
三冀泻、作業(yè)
比如說(shuō)我們要同時(shí)同步五張表的數(shù)據(jù)則可以新建一個(gè)作業(yè)常侣,多線(xiàn)程去同步五張表的數(shù)據(jù)
四、定時(shí)執(zhí)行任務(wù)
我們將作業(yè)保存在數(shù)據(jù)庫(kù)中弹渔,windows下一般用任務(wù)調(diào)度來(lái)執(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ù)庫(kù)數(shù)據(jù):
六博杖、性能優(yōu)化
Oracle:
????defaultRowPrefetch = 20000 (可以根據(jù)內(nèi)存情況定)
????????預(yù)取條數(shù)默認(rèn)值,oracle默認(rèn)為10椿胯,可以增加該值來(lái)減少數(shù)據(jù)庫(kù)請(qǐng)求以提高查詢(xún)效率
Mysql:
defaultFetchSize:設(shè)置一次讀取多少條數(shù)據(jù),不設(shè)置讀大表可能會(huì)出現(xiàn)OOM問(wèn)題
rewriteBatchedStatements:批量插入剃根,可以提高插入數(shù)據(jù)的性能
useServerPrepStmts:如果服務(wù)器支持哩盲,是否使用服務(wù)器端預(yù)處理語(yǔ)句? 默認(rèn)值為“真”(如果數(shù)據(jù)類(lèi)型不一? ? ? ?致狈醉,可能會(huì)出現(xiàn)丟失精度問(wèn)題)
useCursorFetch:使用FetchSize必須啟用
useCompression:與服務(wù)器進(jìn)行通信時(shí)采用zlib壓縮(真/假)廉油? 默認(rèn)值為“假”。
更多參數(shù)配置可以見(jiàn):mysql配置
提交數(shù)量可以根據(jù)內(nèi)存情況盡量給大苗傅,最大5W條抒线。
根據(jù)電腦內(nèi)存修改spoon.bat
???????? PENTAHO_DI_JAVA_OPTIONS="-Xms8192m""-Xmx8192m" "-XX:MaxPermSize=4096m"