2017-02-10 123 views
-1

我有一張超過3000萬行的表,並且執行截斷和重新加載所用的時間太長。我可以使用SSIS不匹配輸出來執行增量加載,但是我正在努力獲取記錄已更新的Delta加載。該表沒有日期字段,因此無法檢查數據上次修改時間。Delta Load - 用於識別更新的ETL過程

只是想知道有沒有人遇到過類似的情況,你是怎麼解決它。我不想裝滿整個桌子,因爲它可能需要3個小時就在這張桌子上!

+0

我想補充,公司將不允許CDC,觸發對錶等:( – abs786123

回答

0

在匹配的輸出,執行另一查找它檢查以查看是否輸入行是不同的,與匹配的主鍵的行。如果不同,則進行更新,如果相同,則不做任何事情。

我知道有兩種方法可以檢查,看看是否行是相同的。

1)添加一個派生列到新的傳入行創建每一列的散列值。然後在本地表中創建相同的哈希列。在查找中比較哈希值。

2)在查找中,加入每個字段......即, A - > A,B - > B,C - > C等。然後重定向非匹配進行更新。如果你有blob列,這可能是不可能的。

1號可能是更有效,但難以成立。

+0

您好感謝漢克,這個過程可能需要一段時間,因爲它會中比較中的所有行源匹配出來的目的地不會它會花費很長時間,因爲它會遍歷所有存在的行數爲3000萬行,而這又會花費與截斷和加載相同的時間量嗎?不是嗎?還是我錯了?問題是有沒有辦法減少窗口看,比如昨天或前一天,因爲沒有日期的禮物 – abs786123

+0

是的,你是正確的......截斷和重新填充會更快......但如果你的源數據,例如,只保留了30天的數據,那麼您將不得不使用某種類型的增量/上推方法,以便在過去30天內保留表格中的歷史數據。 – Hank

+0

好吧,讓我們創造性... ...你h ave表中的任何字段都是以數字或字母順序創建的......就像主鍵一樣?或者甚至可能是非唯一的拆分鍵,批鍵,分區鍵? – Hank