2011-06-30 42 views
1

我正在研究管理每週數據饋送到第三方OLAP服務的最佳做法。分析數據庫將使用完整的數據轉儲進行初始化。隨後的每週Feed將提供新的和更新的行。數據來源於SQL Server 2005數據庫。檢測數據饋送的更改行的最佳做法是什麼?

檢測新行和更新行的首選方法是什麼?

  1. 觸發器在插入和更新一個修改的日期字段和抓住那些比最後進料提取更大;或

  2. 源表上的timestamp列,並抓取時間戳大於上次提要提取的行;或

  3. 一些優秀的想法,我都沒有想到的......

回答

2

嗯,這取決於你如何定義更改的行。

數字2的作品,但對行的任何更改都會更改時間戳,即使更新沒有實際更改任何內容(例如將值從1更新爲1)。聽起來很傻,誰會那樣做?但使用動態代碼時很容易。

數目1可被修改,以確保有插入和刪除的表之間的differnce在觸發並固定選項的問題2.

然而,假設有三個不同的飼料分別包含不同的列,其可能在相關的表格中,如果其中一個實際發生變化,您只想發送。現在,觸發器對您的提要不夠具體。我們使用更改數據跟蹤來識別自上次發送日期(我們將其存儲爲所有SSIS封裝的一部分)後哪些行發生了更改,然後計算特定列的rowhash數據以查看我們感興趣的數據是否實際發生了更改。我也看到人們使用歷史表發送了什麼,然後將這些值(如果您只對表中的一個或兩個字段感興趣)與更改數據跟蹤表中實際更改的值進行比較。當你有這樣一個需求時,你最終會有一個相當複雜的系統來支持它(我只是給你一個粗略的想法)。

+0

感謝您的意見。我相信我們的系統將需要尋找特定列中的更改。當你說「我們使用更改數據跟蹤來識別」更改的行會像這樣工作?每個供稿商店都有RowId | HashOfRelevantColumnData。然後使用時間戳標識更改的行,然後查看RowId | HashOfRelevantColumnData表以確定我是否真的想包含該行?再次感謝。 –

+0

這應該工作 – HLGEM

1

正如說HLGEM,時間戳不是一個好主意。觸發器是一個不錯的選擇,但這裏還有一個問題 - 你打算如何存儲更改?只需將所有記錄克隆到歷史記錄表中?答案取決於你有多大的存儲空間。如果是的話,或者如果你只需要限制在歷史記錄中(比如只有1年的歷史記錄),那麼你可以這麼做。但是,如果您的存儲空間有限,或者希望將所有更改存儲在一個表中,我建議使用我更喜歡的方法:使用OUTPUT子句並將僅更改列值作爲XML存儲在一個表中。我在我的博客中描述了這種技術:part_1part_2

+0

感謝您的意見。我現在要讀你的帖子。 –

相關問題