[英]Handling Deletes in SCD Type 2
作為試圖找出處理 SCD 類型 2 表中刪除的最佳方法的建模者。
根據原則,SCD 類型 2 表將使用 ETL 日期(如 START_DT 和 END_DT)跟蹤更改。
現在,如果從 Source 中刪除了一條記錄,那么下面的最佳選擇是什么,
Ex: Record came on 1st Oct
PK_ID START_DT END_DT VALUE SRC_DELETE_IND
1 2021-10-01 Null ABC N
Record had an update on 2nd Oct
PK_ID START_DT END_DT VALUE SRC_DELETE_IND
1 2021-10-01 2021-10-02 ABC N
1 2021-10-02 Null XYZ N
Record got deleted on 3rd Oct
PK_ID START_DT END_DT VALUE SRC_DELETE_IND
1 2021-10-01 2021-10-02 ABC N
1 2021-10-02 Null XYZ Y
Record got deleted on 3rd Oct
PK_ID START_DT END_DT VALUE SRC_DELETE_IND
1 2021-10-01 2021-10-02 ABC N
1 2021-10-02 2021-10-03 XYZ N
1 2021-10-03 Null XYZ Y
Record got deleted on 3rd Oct
PK_ID START_DT END_DT VALUE
1 2021-10-01 2021-10-02 ABC
1 2021-10-02 2021-10-03 XYZ
但在這里我們現在沒有一個開放記錄了。
如果記錄重新出現在源中並聲明為不正確的刪除,則會增加復雜性。 讓我們說 10 日對於選項 1,數據看起來像,
PK_ID START_DT END_DT VALUE SRC_DELETE_IND
1 2021-10-01 2021-10-02 ABC N
1 2021-10-02 Null XYZ N --Reversed
對於選項 2
PK_ID START_DT END_DT VALUE SRC_DELETE_IND
1 2021-10-01 2021-10-02 ABC N
1 2021-10-02 2021-10-03 XYZ N
1 2021-10-03 Null XYZ N -- Reversed but now row is duplicate
對於選項 3
PK_ID START_DT END_DT VALUE
1 2021-10-01 2021-10-02 ABC
1 2021-10-02 2021-10-03 XYZ
1 2021-10-10 Null XYZ --considered as New since no open record existed. Creates ETL gap
哪個選項更有意義,並且符合 DWH 最佳實踐。
我會采用更簡單的方法,為已刪除的記錄設置默認的 END_DATE ,例如 1000-12-31 :
PK_ID START_DT END_DT VALUE
1 2021-10-01 2021-10-02 ABC
1 2021-10-02 1000-12-31 XYZ --> this row is deleted
此外,避免使用 NULL 值。 NULL 值表示缺少值,這與零值不同。 SQL NULL 是一種狀態,而不是值。 這種用法與大多數編程語言完全不同,在大多數編程語言中,引用的空值意味着它不指向任何對象。
我建議您使用 END_DT 的默認日期,例如 9999-12-31,因此在插入一行時,您的維度將如下所示:
PK_ID START_DT END_DT VALUE
1 2021-10-01 9999-12-31 ABC
代替 :
PK_ID START_DT END_DT VALUE
1 2021-10-01 NULL ABC
我建議您為維度添加代理鍵。 維度表設計為一列作為唯一的主鍵。 此主鍵不能是操作系統的自然鍵,因為隨着時間的推移跟蹤更改時,該自然鍵將有多個維度行。 此外,一個維度的自然鍵可能由多個源系統創建,並且這些自然鍵可能不兼容或管理不善。 DW/BI系統需要聲明對所有維度的主鍵的控制權; 您應該為每個維度創建匿名整數主鍵,而不是使用顯式自然鍵或帶有附加日期的自然鍵。 這些維度代理鍵是簡單的整數,按順序分配,從值 1 開始,每次需要一個新鍵時。 日期維度免於代理鍵規則; 這個高度可預測和穩定的維度可以使用更有意義的主鍵。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.