一、什么是ETL
ETL(Extract-Transform-Load的縮寫婆咸,即數(shù)據(jù)抽取竹捉、轉(zhuǎn)換、裝載的過程)尚骄,對于企業(yè)或行業(yè)應用來說块差,我們經(jīng)常會遇到各種數(shù)據(jù)的處理,轉(zhuǎn)換,遷移憨闰,所以了解并掌握一種etl工具的使用状蜗,這里介紹一個ETL工具Kettle,這個工具很強大鹉动,支持圖形化的GUI設計界面轧坎,然后可以以工作流的形式流轉(zhuǎn),在做一些簡單或復雜的數(shù)據(jù)抽取训裆、質(zhì)量檢測、數(shù)據(jù)清洗蜀铲、數(shù)據(jù)轉(zhuǎn)換边琉、數(shù)據(jù)過濾等方面有著比較穩(wěn)定的表現(xiàn)。
二记劝、Kettle概念
Kettle是一款國外開源的ETL工具变姨,純java編寫,可以在Window厌丑、Linux定欧、Unix上運行,綠色無需安裝怒竿,數(shù)據(jù)抽取高效穩(wěn)定砍鸠。
Kettle 中文名稱叫水壺,該項目的主程序員MATT 希望把各種數(shù)據(jù)放到一個壺里耕驰,然后以一種指定的格式流出爷辱。
Kettle這個ETL工具集,它允許你管理來自不同數(shù)據(jù)庫的數(shù)據(jù)朦肘,通過提供一個圖形化的用戶環(huán)境來描述你想做什么饭弓,而不是你想怎么做。
Kettle中有兩種腳本文件媒抠,transformation和job弟断,transformation完成針對數(shù)據(jù)的基礎轉(zhuǎn)換,job則完成整個工作流的控制趴生。
Kettle可以在http://kettle.pentaho.org/網(wǎng)站下載阀趴。
三、Kettle的使用
要實現(xiàn)實時的增量更新共有兩種方法:
1苍匆、通過觸發(fā)器舍咖。
在要抽取的表上建立需要的觸發(fā)器,一般要建立插入锉桑、修改排霉、刪除三個觸發(fā)器,每當源表中的數(shù)據(jù)發(fā)生變化,就被相應的觸發(fā)器將變化的數(shù)據(jù)寫入一個臨時 表攻柠,抽取線程從臨時表中抽取數(shù)據(jù)球订,臨時表中抽取過的數(shù)據(jù)被標記或刪除。觸發(fā)器方式的優(yōu)點是數(shù)據(jù)抽取的性能較高瑰钮,缺點是要求業(yè)務表建立觸發(fā)器冒滩,對業(yè)務系統(tǒng)有 一定的影響。
2.通過時間戳浪谴。
可以在兩邊數(shù)據(jù)庫的表里插入了一列(用來取數(shù)據(jù)變動時的時間)开睡,然后做個計劃任務,設置每隔多少時間跑一次kettle苟耻,就行了篇恒。要實現(xiàn)“實時”,就只能把時間間隔設小一點凶杖。
- 通過時間戳方式
利用kettle工具胁艰,通過時間戳完成某表實時的增量更新。
利用模塊完成即可智蝠,如下簡圖:
準備一個實驗環(huán)境:
準備基本完成如下效果:
select t.*, t.rowid from EMP_ETL t
編寫時間戳ktr轉(zhuǎn)換過程腾么,把原表中最大的hiredate作為變量,如下圖:
下面在“表輸入”環(huán)節(jié)中杈湾,使用傳遞過來的${MAXSJ}作為條件解虱,完成向目標表插入數(shù)據(jù),簡要流程如下:
執(zhí)行轉(zhuǎn)換漆撞,完成數(shù)據(jù)插入饭寺,簡圖如下:
最后利用kettle形成的整體數(shù)據(jù)流如下圖所示:
下一篇文章,我將重點介紹基于Oracle的雙活方案