Kettle手冊(cè)(五)- 實(shí)例-增量同步數(shù)據(jù)

綜合前面的幾個(gè)例子双揪,我們這里來(lái)是實(shí)現(xiàn)下增量數(shù)據(jù)的同步。
這里只是分享一種方法运吓,實(shí)際工作中羽德,還會(huì)有其他更好的方案迅办。
增量同步的整體思路一般就是:首先拿到這張表的增量數(shù)據(jù),怎么拿增量呢姨夹,源表需要有一個(gè)時(shí)間字段矾策,代表該條記錄的最新更新時(shí)間(及只要該條記錄變化贾虽,該時(shí)間字段就會(huì)更新),當(dāng)然有時(shí)間字段最好了菇肃,沒(méi)有的話(huà)取募,可能需要做全表對(duì)比之類(lèi)的操作玩敏;正常情況下旺聚,業(yè)務(wù)系統(tǒng)的表中都是有主鍵的,我們拿到增量數(shù)據(jù)之后陈哑,需要判斷該記錄的新插入的惊窖,還是更新的記錄厘贼,如果是更新記錄嘴秸,我們需要先將數(shù)據(jù)加載到中間表,然后凭疮,根據(jù)主鍵將目標(biāo)表中已存在的數(shù)據(jù)刪除执解,最后再將本次的增量數(shù)據(jù)插入到目標(biāo)表纲酗。

1.配置表的設(shè)計(jì)(元數(shù)據(jù)表)

首先我們需要一張配置表觅赊,來(lái)保存我們要增量同步的表的基本信息

--元數(shù)據(jù)表
create table tm_etl_table(
    table_name varchar(50), --表名
    is_run int , --調(diào)度狀態(tài)
    update_time timestamp,--表數(shù)據(jù)更新時(shí)間
    etl_insert_time timestamp --記錄更新時(shí)間
);

我們初始化一條記錄吮螺,我們就以這張ods_tm_book表


Kettle-handbook-05-01.png

一些基礎(chǔ)表準(zhǔn)備

-- 源表
create table tm_book(id int,book_name varchar(10),latest_time timestamp);

-- 源表數(shù)據(jù)初始化
insert into tm_book(id,book_name,latest_time)
select x,x||'_name',clock_timestamp() from generate_series(1,10) x;

-- 目標(biāo)表和中間表
create table ods_tm_book(id int,book_name varchar(10),latest_time timestamp,etl_insert_time timestamp);
create table staging_tm_book(id int,book_name varchar(10),latest_time timestamp);

源表中的數(shù)據(jù)


Kettle-handbook-05-02.png

2.同步數(shù)據(jù)的流程開(kāi)發(fā)

整體流程是這樣的坯约,注意下闹丐,這個(gè)只是為了簡(jiǎn)單演示了這個(gè)增量的例子被因,實(shí)際應(yīng)用的話(huà)得修改卿拴,這是有漏洞的堕花。


Kettle-handbook-05-03.png

2.1更新元數(shù)據(jù)表的狀態(tài)并獲取表更新時(shí)間

就是我們第一個(gè)狀態(tài)缘挽,我們更新tm_etl_table表壕曼,更新is_run=0等浊,表示我們開(kāi)始同步數(shù)據(jù)了,update_time轧飞,初始化為 ‘1970-01-01’过咬,表示我們要拉取所有的數(shù)據(jù)


Kettle-handbook-05-04.png

Kettle-handbook-05-05.png

這里,我們將該表的更新時(shí)間作為變量忍捡,我們會(huì)在后面的轉(zhuǎn)換中使用


Kettle-handbook-05-06.png
Kettle-handbook-05-06.png

2.2 加載數(shù)據(jù)到中間表

我們這里具篇,直接表對(duì)表凌埂,將數(shù)據(jù)插入到staging


Kettle-handbook-05-07.png

其中埃疫,表輸入中栓霜,我們需要根據(jù)前面的更新時(shí)間變量,獲取增量數(shù)據(jù)销凑,注意斗幼,需要勾選上“替換SQL語(yǔ)句中的變量”


Kettle-handbook-05-08.png

這里蜕窿,我們直接就表輸出到中間表桐经,每次都需將清空表數(shù)據(jù)
Kettle-handbook-05-09.png

2.3 加載數(shù)據(jù)到目標(biāo)表

Kettle-handbook-05-10.png

這里次询,主要有3段腳本(為了方便屯吊,就這樣吧)盒卸,根據(jù)主鍵ID,清空目標(biāo)表數(shù)據(jù)蔽介,然后虹蓄,將數(shù)據(jù)插入到目標(biāo)表薇组,最后坐儿,更新tm_etl_table表中的記錄狀態(tài)


Kettle-handbook-05-11.png

好了炭菌,用Kettle實(shí)現(xiàn)一個(gè)增量的邏輯大概就是這樣了黑低,

3.小結(jié)

這里整理幾個(gè)問(wèn)題

3.1 中間表

這里的話(huà)投储,使用了中間表,Kettle中是有一個(gè)控件的,應(yīng)該叫那個(gè)“插入/更新”勋眯,可以根據(jù)主鍵將數(shù)據(jù)更新掉客蹋,這個(gè)控件之前使用時(shí)讶坯,發(fā)現(xiàn)很慢辆琅,就一直沒(méi)用,后面的話(huà)这刷,可能會(huì)寫(xiě)個(gè)例子婉烟,簡(jiǎn)單測(cè)試看看。使用中間表暇屋,緩存下數(shù)據(jù)似袁,也是不錯(cuò)的方法。

3.2 增量流程

目前公司中咐刨,增量抽取昙衅,是這樣的,首先各個(gè)業(yè)務(wù)系統(tǒng)的數(shù)據(jù)導(dǎo)出到文本文件定鸟,然后批量將文件加載到數(shù)據(jù)倉(cāng)庫(kù)中(這里使用循環(huán)加載的)而涉。因?yàn)槊刻斓臄?shù)據(jù)量比較大,如果知己到表的話(huà)仔粥,會(huì)很慢婴谱,使用文件华糖,一些數(shù)據(jù)庫(kù)都有批量加載的命令话告,很快很方便佛呻,比如:PostgreSQL中的copy命令绑莺,Greenplum中的外部表,還有Mysql中的load data等等。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末漱受,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌篮愉,老刑警劉巖设褐,帶你破解...
    沈念sama閱讀 211,123評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件外冀,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡固灵,警方通過(guò)查閱死者的電腦和手機(jī)丛忆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事贱鄙〔っ耄” “怎么了禁灼?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,723評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵穿铆,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我蜈彼,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,357評(píng)論 1 283
  • 正文 為了忘掉前任晌块,我火速辦了婚禮钝尸,結(jié)果婚禮上剩愧,老公的妹妹穿的比我還像新娘芒帕。我一直安慰自己家浇,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,412評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般框喳。 火紅的嫁衣襯著肌膚如雪污桦。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,760評(píng)論 1 289
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼扶认。 笑死叠纹,一個(gè)胖子當(dāng)著我的面吹牛递沪,可吹牛的內(nèi)容都是我干的井誉。 我是一名探鬼主播,決...
    沈念sama閱讀 38,904評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼屁使,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼在岂!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起蛮寂,我...
    開(kāi)封第一講書(shū)人閱讀 37,672評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤蔽午,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后酬蹋,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體及老,經(jīng)...
    沈念sama閱讀 44,118評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,456評(píng)論 2 325
  • 正文 我和宋清朗相戀三年范抓,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了骄恶。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,599評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡匕垫,死狀恐怖叠蝇,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情年缎,我是刑警寧澤,帶...
    沈念sama閱讀 34,264評(píng)論 4 328
  • 正文 年R本政府宣布铃慷,位于F島的核電站单芜,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏犁柜。R本人自食惡果不足惜洲鸠,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,857評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧扒腕,春花似錦绢淀、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,731評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至蹋盆,卻和暖如春费薄,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背栖雾。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,956評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工楞抡, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人析藕。 一個(gè)月前我還...
    沈念sama閱讀 46,286評(píng)論 2 360
  • 正文 我出身青樓召廷,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親账胧。 傳聞我的和親對(duì)象是個(gè)殘疾皇子竞慢,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,465評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容