2

SCD タイプ 2 テーブルで削除を処理する最善の方法を見つけようとしているモデラーとして。

原則として、SCD タイプ 2 テーブルは、START_DT や END_DT などの ETL 日付を使用して変更を追跡します。

  1. START_DT は、レコードが有効になる日付になります。
  2. END_DT は、別のフォームに変更された日付、または記録の現在のバージョンを示す Null/High Date になります。
  3. どの時点でも、キーの組み合わせには、Null または High Date のいずれかの END_DT を持つ最新バージョン レコードが存在します。

レコードがソースから削除された場合、以下から最適なオプションは何ですか?

  1. SRC_DELETE_IND のような追加の列があり、デフォルトで「N」に設定され、レコードがソースから削除された場合は「Y」に設定されます。
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
  1. 1 と同じですが、Delete Came のときに新しい重複行を挿入します。
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
  1. SRC_DELETE_IND の有効期限/終了日の代わりに、レコード
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   

しかし、ここでは Open レコードが残っていません。

ソースにレコードが再表示され、誤った削除として示される場合、複雑さが増します。オプション 1 の 10 日に、データは次のようになります。

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 のベスト プラクティスに従っています。

4

1 に答える 1