1. 程式人生 > >KETTLE4個工作中有用的複雜例項--1、資料定時自動(自動抽取)同步作業

KETTLE4個工作中有用的複雜例項--1、資料定時自動(自動抽取)同步作業

 

今天嘔心瀝血花了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;
View Code

 

3)T_CLASS同步成功

 

 

   如上圖,T_CLASS同步步驟成功後,寫入該成功步驟,提示成功。

 

 

 5、T_STUDENT_KETTLE表的資料同步工作,如同T_CLASS表一樣,存在3個轉換步驟

 

 

 

 

 5、執行轉換,雙擊start,設定作業定時排程,設定完成後,執行轉換

 

 

 

 

 

6、執行結果,執行成功和執行失敗有不同的結果展示,可以根據此結果進行錯誤排除

 

 注意:因某些限制,最新原始碼和後續通用配置實現資料抽取 已放置在筆者公眾號上,請關注微信公眾號: 大喇叭學資料庫, 回覆關鍵字:【例項】,獲取kettle安裝程式和執行例項(表結構和kjb、ktr檔案)。


 

 

 

 

 

------------恢復內容結束--------