欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
開(kāi)源ETL工具kettle系列之增量更新設計技巧

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

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

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

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

 


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

                                                                            圖2

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


                                                                                    圖3

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

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
使用Kettle實(shí)現數據實(shí)時(shí)增量同步
kettle
Kettle實(shí)戰100篇 第2篇 調用RESTful接口導入JSON結果入庫
ETL 抽取方案
數據倉庫之ETL漫談
數據攝?。◣缀酰┦且粋€(gè)已解決的問(wèn)題
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久