KETTLE4個工作中有用的復雜實例--1、數據定時自動(自動抽取)同步作業
歡迎關注筆者的公眾號: java大師, 每日推送java、kettle運維等領域干貨文章,關注即免費無套路附送 100G 海量學習、面試資源喲!!個人網站: http://www.javaman.cn/kettle/kettle-in-action
今天嘔心瀝血花了8個小時給大家帶來kettle工作中最常見的四種復雜實例,90%的項目用到這4種實例都可以解決。
4種實例種還有2種通用kettle工具,使用這兩種通用工具實例,可以直接修改相應的配置文件,完成數據的同步。
下面就一一給大家帶來這4種實例,完全原創且可以拿來直接使用,廢話不說,下面直接給大家帶來具體實例:
KETTLE4個工作中有用的復雜實例--1、數據定時自動(自動抽取)同步作業
一、表數據自動同步
1、為了給大家更直觀的展示,【大喇叭玩轉數據庫】首先在數據庫創建4張表,表結構如下:
- t_student_kettle 學生數據源表;
- t_student_kettle_target 學生目標數據表;
- t_class 班級數據源表;
- t_class_target 班級 班級目標數據表;
- t_tbrz 同步日志表
--1、學生數據源表 -- Create table create table T_STUDENT_KETTLE ( id INTEGER, name VARCHAR2(2000), sex VARCHAR2(2000), age INTEGER, cjsj DATE, zhgxsj DATE default sysdate ) tablespace MYSPACE pctfree 10 initrans 1 maxtrans 255 storage ( initial 64K next 1M minextents 1 maxextents unlimited );--學生目標數據表
-- Create table
create table T_STUDENT_KETTLE_TARGET
(
id INTEGER,
name VARCHAR2(2000),
sex VARCHAR2(2000),
age INTEGER,
cjsj DATE,
zhgxsj DATE default sysdate
)
tablespace MYSPACE
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 64K
next 1M
minextents 1
maxextents unlimited
);--班級數據源表
-- Create table
create table T_CLASS
(
id NUMBER,
class VARCHAR2(100),
cjsj DATE,
zhgxsj DATE
)
tablespace MYSPACE
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 64K
next 1M
minextents 1
maxextents unlimited
);--班級目標數據表
-- Create table
create table T_CLASS_TARGET
(
id NUMBER,
class VARCHAR2(100),
cjsj DATE,
zhgxsj DATE
)
tablespace MYSPACE
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 64K
next 1M
minextents 1
maxextents unlimited
);
-- 同步日志表
-- Create table
create table T_TBRZ
(
id NUMBER, --id
tbcgsj DATE, --同步成功時間(結束時間)
tbkssj DATE, --同步開始時間
bm VARCHAR2(100), --同步表名
tbjg CHAR(1) --同步結果:1-成功;2-未成功
)
tablespace MYSPACE
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 64K
next 1M
minextents 1
maxextents unlimited
);
--創建同步日志表的序列
create sequence SEQ_T_TBRZ
minvalue 1
maxvalue 999999999
start with 81
increment by 1
cache 20;
2、配置數據庫連接地址,一般項目上會通過配置jndi數據源直接連接數據庫,不在配置jdbc數據源了,有點類似於java的配置
3、設置數據庫連接,通過JNDI方式
4、作業整體流程
需要用到1個作業和6個轉換來操作2張表,一個表是3個轉換來完成,幾張表總共的轉換就是N*3個轉換。
下圖為整個作業的流程:
由上面流程圖可以看到,start分了兩個分支,一個是class表,一個是student表,下面我們來一一點開每個轉換看下。
1)T_CLASS數據變量設置
如上圖,T_CLASS數據變量設置,該步驟是獲取上次同步的成功時間,做為下次同步的開始時間,並設置到環境變量中,供后續的數據流調用
2)T_CLASS數據變量設置
如上圖,T_CLASS數據更新步驟,該步驟是獲取上次同步的成功時間之后的數據,插入更新到表中。
3)T_CLASS保存同步日志
如上圖,T_CLASS保存同步日志,該步驟是保存本次同步的同步成功時間,插入到同步日志表中,為下次同步的開始時間做准備,具體sql如下

1 INSERT INTO T_TBRZ 2 (ID, KSSJ, TBCGSJ, BM, TBJG) 3 VALUES 4 (seq_t_tbrz.NEXTVAL, 5 TO_DATE(SUBSTR('${V_SCTBCGSJ}', 0, 19), 'YYYY-MM-DD HH24:MI:SS'), 6 SYSDATE, 7 'T_CLASS', 8 '同步成功', 9 '1'); 10 DELETE FROM T_TBRZ 11 WHERE TBJG = '1' 12 AND BM = 'T_CLASS' 13 AND ID IN (SELECT ID 14 FROM (SELECT ID, ROWNUM RN 15 FROM (SELECT ID 16 FROM T_TBRZ 17 WHERE TBJG = '1' 18 AND BM = 'T_CLASS' 19 ORDER BY ID DESC)) 20 WHERE RN > 2); 21 COMMIT;
3)T_CLASS同步成功
如上圖,T_CLASS同步步驟成功后,寫入該成功步驟,提示成功。
5、T_STUDENT_KETTLE表的數據同步工作,如同T_CLASS表一樣,存在3個轉換步驟
5、運行轉換,雙擊start,設置作業定時調度,設置完成后,運行轉換
6、運行結果,運行成功和運行失敗有不同的結果展示,可以根據此結果進行錯誤排除
注意:因某些限制,最新源代碼和后續通用配置實現數據抽取 已放置在筆者公眾號上,請關注微信公眾號: 【JAVA大師】, 回復關鍵字:【KETTLE】,獲取kettle安裝程序和運行實例(表結構和kjb、ktr文件)。
同時筆者原創了一套視頻教程:現免費發放100套,先到先得。獲得方法:掃描下方二維碼,關注獲得