2010-08-12 72 views
0

我有一個OLTP數據庫,目前正在創建一個數據倉庫。 DW(DimStudents)中有一個維度表,其中包含學生數據,例如地址詳細信息,電子郵件,通知設置。檢查更新後的尺寸數據

在OLTP數據庫中,此數據分佈在多個表中(因爲它是第三種標準形式的標準OLTP數據庫)。

目前有10,390條記錄,但這個數字有望增長。

我想使用Type 2 ETL,因此如果OLTP數據庫中的記錄已更改,則會向DW添加新記錄。

什麼是掃描DW中10,000條記錄然後將結果與OLTP中包含的幾個表中的結果進行比較的最佳方法?

我正在考慮使用OLTP數據的臨時表創建一個「快照」,然後逐行比較DW中的Dimension表中的數據。

我正在使用SQL Server 2005.這似乎不是最有效的方式。有替代品嗎?

回答

1
  • 將LastUpdated引入到源系統(OLTP)表中。這樣,您有較少的提取使用:

    WHERE LASTUPDATED> = some_time_here

你似乎是使用SQL服務器,所以你也可以嘗試rowversion類型(8字節DB-範圍唯一計數器)

  • 將數據導入DW時,使用ETL工具(SSIS,Pentaho,Talend)。他們都有一個組件(塊,轉換)來處理SCD2(緩慢更改維度類型2)。對於SSIS示例see here。轉換完全按照您所要做的 - 您所要做的就是指定要監視哪些列以及在檢測到更改時要執行的操作。
+0

謝謝,非常有幫助。 – Paul 2010-08-25 15:58:04

0

這聽起來像你正在接近這種倒退。執行ETL的典型方式(提取,測試,負載):

  1. 從OLTP數據庫中「提取」數據
  2. 比較(「測試」)對三維數據的提取數據,以確定是否有更改或其他需要執行的驗證
  3. 將數據(「加載」)插入到維度表中。

實際上,在步驟1中,您將通過針對OLTP數據庫中多個表的查詢創建物理記錄,然後將結果記錄與維度數據進行比較以確定是否進行了修改。這是做事的標準方式。另外,10000行對於音量來說相當微不足道。任何RDBMS和ETL過程都應該能夠在最多不超過幾秒的時間內處理這個過程。我知道SQL Server具有DTS,但我不確定名稱是否在更新版本中發生了更改。這是做這種事的最佳工具。

+0

好吧,我正在做的是拍攝我的OLTP數據(提取)的快照,然後將其與OLAP數據庫中的數據進行比較。 我的問題確實是比較數據的最佳方式是什麼?檢查新值很簡單,但檢查更新後的值比較困難,因爲我沒有在任何OLTP表上更新日期標誌。 什麼是通過記錄集,檢查一個表中的值是否與另一個表中的值不同的最佳方法?不幸的是,基礎設施不允許我使用SSIS sop,我需要通過存儲過程來完成。 – Paul 2010-08-12 16:02:12

0

您的OLTP數據庫是否有審計線索?

如果是這樣,那麼您可以查詢自上次ETL以來被觸摸的記錄的審計線索。

+0

不幸的是,它沒有。除非有簡單的方法來檢查更改的記錄,否則我認爲創建審覈試用可能更容易,儘管這意味着對OLTP數據庫進行了重大更改。 – Paul 2010-08-13 10:20:29