次のステージング テーブルを見てください。同じポリシーに対して複数の行があります。このテーブルへのデータは、外部ソースから受け取ったフラット ファイルから読み込まれます。
列の値は、1 つの行と次の行の間で変化する可能性があります。ColA を参照してください。最初の行に入力される列が限られている場合があります。次の行にさらに列が入力されます。列 ColB と ColC を参照してください。これらは最初は null で、2 行目と 3 行目に入力されます。
`CREATE TABLE #Stg
(
PolicyNum VARCHAR(10) ,
ColA VARCHAR(10) ,
ColB VARCHAR(10) ,
ColC VARCHAR(10) ,
TimeStampKey VARCHAR(100)
)
INSERT #Stg
( PolicyNum, ColA, ColB, ColC, TimeStampKey )
VALUES ( 'MDT1000', 'SomeVal_A1', NULL, NULL, '2013041113033140MDT1000ZA' )
,
( 'MDT1000', 'SomeVal_A2', 'SomeVal_B', NULL, '2013041113051756MDT1000ZA' )
,
( 'MDT1000', 'SomeVal_A3', 'SomeVal_B', 'SomeVal_C', '2013041113115418MDT1000ZA' )`
このステージング テーブルから、履歴を維持しながら宛先テーブルにデータをロードする必要があります。宛先テーブルは、基本的にタイプ 2 の緩やかに変化するディメンションです。つまり、最初の行が存在しないためステージングからロードし、2 行目で更新し、3 行目で再度更新します。
以下は、宛先スキーマの例です。
CREATE TABLE #Dst
(
PolicyKey INT IDENTITY(1,1) PRIMARY KEY
, PolicyNum VARCHAR(10)
, ColA VARCHAR(10)
, ColB VARCHAR(10)
, ColC VARCHAR(10)
, IsActive BIT
, RowStartDate DATETIME
, RowEndDate DATETIME
)
通常、増分ロードと scd ディメンションを処理するためにマージ ステートメントまたは SSIS パッケージを作成しますが、元のレコードと変更レコードが同じファイルにあるため、標準的な方法は機能しません。
これにアプローチする方法に光を当てることができれば幸いです。行ごとの操作を避けようとしています。
ありがとう、サム。