一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

開(kāi)源ETL工具kettle系列之增量更新設(shè)計(jì)技巧

 荷露叮咚 2009-01-05

開(kāi)源ETL工具kettle系列之增量更新設(shè)計(jì)技巧(1) 

ETL中增量更新是一個(gè)比較依賴(lài)與工具和設(shè)計(jì)方法的過(guò)程,Kettle中主要提供Insert / Update 步驟,Delete 步驟和Database Lookup 步驟來(lái)支持增量更新,增量更新的設(shè)計(jì)方法也是根據(jù)應(yīng)用場(chǎng)景來(lái)選取的,雖然本文討論的是Kettle的實(shí)現(xiàn)方式,但也許對(duì)其他工具也有一些幫助。本文不可能涵蓋所有的情況,歡迎大家討論。

應(yīng)用場(chǎng)景
增量更新按照數(shù)據(jù)種類(lèi)的不同大概可以分成:
1. 只增加,不更新,
2. 只更新,不增加
3. 即增加也更新
4. 有刪除,有增加,有更新
其中1 ,2, 3種大概都是相同的思路,使用的步驟可能略有不同,通用的方法是在原數(shù)據(jù)庫(kù)增加一個(gè)時(shí)間戳,然后在轉(zhuǎn)換之后的對(duì)應(yīng)表保留這個(gè)時(shí)間戳,然后每次抽取數(shù)據(jù)的時(shí)候,先讀取這個(gè)目標(biāo)數(shù)據(jù)庫(kù)表的時(shí)間戳的最大值,把這個(gè)值當(dāng)作參數(shù)傳給原數(shù)據(jù)庫(kù)的相應(yīng)表,根據(jù)這個(gè)時(shí)間戳來(lái)做限定條件來(lái)抽取數(shù)據(jù),抽取之后同樣要保留這個(gè)時(shí)間戳,并且原數(shù)據(jù)庫(kù)的時(shí)間戳一定是指定默認(rèn)值為sysdate當(dāng)前時(shí)間(以原數(shù)據(jù)庫(kù)的時(shí)間為標(biāo)準(zhǔn)),抽取之后的目標(biāo)數(shù)據(jù)庫(kù)的時(shí)間戳要保留原來(lái)的時(shí)間戳,而不是抽取時(shí)候的時(shí)間。
   對(duì)于第一種情況,可以使用Kettle的Insert / Update 步驟,只是可以勾選Don’t perform any update選項(xiàng),這個(gè)選項(xiàng)可以告訴Kettle你只會(huì)執(zhí)行Insert 步驟。
對(duì)于第二種情況可能比較用在數(shù)據(jù)出現(xiàn)錯(cuò)誤然后原數(shù)據(jù)庫(kù)有一些更新,相應(yīng)的目標(biāo)數(shù)據(jù)庫(kù)也要更新,這時(shí)可能不是更新所有的數(shù)據(jù),而是有一些限定條件的數(shù)據(jù),你可以使用Kettle的Update 步驟來(lái)只執(zhí)行更新。關(guān)于如何動(dòng)態(tài)的執(zhí)行限定條件,可以參考前一篇文章。
第三種情況是最為常見(jiàn)的一種情況,使用的同樣是 Kettle的Insert / Update 步驟,只是不要勾選Don’t perform any update 選項(xiàng)。
第四種情況有些復(fù)雜,后面專(zhuān)門(mén)討論。

對(duì)于第1,2,3種情況,可以參考下面的例子。
這個(gè)例子假設(shè)原數(shù)據(jù)庫(kù)表為customers , 含有一個(gè)id , firstname , lastname , age 字段,主鍵為id , 然后還加上一個(gè)默認(rèn)值為sysdate的時(shí)間戳字段。轉(zhuǎn)換之后的結(jié)果類(lèi)似:id , firstname , lastname , age , updatedate . 整個(gè)設(shè)計(jì)流程大概如下:

 
                                                                        圖1
其中第一個(gè)步驟的sql 大概如下模式:
Select max(updatedate) from target_customer ;
你會(huì)注意到第二個(gè)步驟和第一個(gè)步驟的連接是黃色的線,這是因?yàn)榈诙€(gè)table input 步驟把前面一個(gè)步驟的輸出當(dāng)作一個(gè)參數(shù)來(lái)用,所有Kettle用黃色的線來(lái)表示,第二個(gè)table input 的sql 模式大概如下:
Select field1 , field2 , field3 from customers where updatedate > ?
后面的一個(gè)問(wèn)號(hào)就是表示它需要接受一個(gè)參數(shù),你在這個(gè)table input 下面需要指定replace variable in script 選項(xiàng)和execute for each row 為選中狀態(tài),這樣,Kettle就會(huì)循環(huán)執(zhí)行這個(gè)sql , 執(zhí)行的次數(shù)為前面參數(shù)步驟傳入的數(shù)據(jù)集的大小。
 
                                                                            圖2

關(guān)于第三個(gè)步驟執(zhí)行insert / update 步驟需要特別解釋一下,
 
                                                                                    圖3

Kettle執(zhí)行這個(gè)步驟是需要兩個(gè)數(shù)據(jù)流對(duì)比,其中一個(gè)是目標(biāo)數(shù)據(jù)庫(kù),你在Target table 里面指定的,它放在The keys to look up the values(s) 左邊的Table field 里面的,另外一個(gè)數(shù)據(jù)流就是你在前一個(gè)步驟傳進(jìn)來(lái)的,它放在The keys to look up the value(s) 的右邊,Kettle首先用你傳進(jìn)來(lái)的key 在數(shù)據(jù)庫(kù)中查詢(xún)這些記錄,如果沒(méi)有找到,它就插入一條記錄,所有的值都跟你原來(lái)的值相同,如果根據(jù)這個(gè)key找到了這條記錄,kettle會(huì)比較這兩條記錄,根據(jù)你指定update field 來(lái)比較,如果數(shù)據(jù)完全一樣,kettle就什么都不做,如果記錄不完全一樣,kettle就執(zhí)行一個(gè)update 步驟。所以首先你要確保你指定的key字段能夠唯一確定一條記錄,這個(gè)時(shí)候會(huì)有兩種情況:
1.維表
2.事實(shí)表
維表大都是通過(guò)一個(gè)主鍵字段來(lái)判斷兩條記錄是否匹配,可能我們的原數(shù)據(jù)庫(kù)的主鍵記錄不一定對(duì)應(yīng)目標(biāo)數(shù)據(jù)庫(kù)中相應(yīng)的表的主鍵,這個(gè)時(shí)候原數(shù)據(jù)庫(kù)的主鍵就變成了業(yè)務(wù)主鍵,你需要根據(jù)某種條件判斷這個(gè)業(yè)務(wù)主鍵是否相等,想象一下如果是多個(gè)數(shù)據(jù)源的話(huà),業(yè)務(wù)主鍵可能會(huì)有重復(fù),這個(gè)時(shí)候你需要比較的是根據(jù)你自定義生成的新的實(shí)際的主鍵,這種主鍵可能是根據(jù)某種類(lèi)似與sequence 的生成方式生成的,
事實(shí)表在經(jīng)過(guò)轉(zhuǎn)換之后,進(jìn)目標(biāo)數(shù)據(jù)庫(kù)之前往往都是通過(guò)多個(gè)外鍵約束來(lái)確定唯一一條記錄的,這個(gè)時(shí)候比較兩條記錄是否相等都是通過(guò)所有的維表的外鍵決定的,你在比較了記錄相等或不等之后,還要自己判斷是否需要添加一個(gè)新的主鍵給這個(gè)新記錄。
上面兩種情況都是針對(duì)特定的應(yīng)用的,如果你的轉(zhuǎn)換過(guò)程比較簡(jiǎn)單,只是一個(gè)原數(shù)據(jù)庫(kù)對(duì)應(yīng)一個(gè)目標(biāo)數(shù)據(jù)庫(kù),業(yè)務(wù)主鍵跟代理主鍵完全相同的時(shí)候完全可以不用考慮這么多。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多

    国产精品一级香蕉一区| 视频一区中文字幕日韩| 国产精品一区二区不卡中文| 日韩偷拍精品一区二区三区| 国产欧美一区二区另类精品| 精品亚洲一区二区三区w竹菊| 日本理论片午夜在线观看| 熟女一区二区三区国产| 久久本道综合色狠狠五月| 色好吊视频这里只有精| 微拍一区二区三区福利| 亚洲男人的天堂久久a| 欧美av人人妻av人人爽蜜桃| 中文字幕一区二区三区中文| 日本三区不卡高清更新二区| 成人免费高清在线一区二区| 好吊视频一区二区在线| 中文人妻精品一区二区三区四区 | 亚洲av一区二区三区精品| 国产精品涩涩成人一区二区三区| 欧美国产日韩在线综合| 国产不卡的视频在线观看| 国产成人亚洲精品青草天美| 激情五月天深爱丁香婷婷| 亚洲日本久久国产精品久久| 国产精品一区日韩欧美| 亚洲天堂一区在线播放| 人妻一区二区三区在线| 极品熟女一区二区三区| 亚洲一区精品二人人爽久久| 亚洲性日韩精品一区二区| 欧美日韩精品人妻二区三区| 自拍偷拍一区二区三区| 色婷婷国产精品视频一区二区保健| 中文字幕免费观看亚洲视频| 久久精品色妇熟妇丰满人妻91| 精品国产亚洲av成人一区| 亚洲中文字幕亲近伦片| 日韩女优视频国产一区| 黄色av尤物白丝在线播放网址| 欧美又大又黄刺激视频|