Установите EndDate на GetDate (), когда запись удаляется в ODS - PullRequest
2 голосов
/ 19 марта 2020

У меня есть следующий поток данных:

enter image description here

, где я объединяю:

ODS Left Join:

SELECT bn.EmployeeId
      ,bn.CountryId
      ,bn.OdsCreateDate FROM ODS.BridgeNationality bn
WHERE bn.EmployeeId=15366

Правое объединение DWH

SELECT bn.EmployeeId
      ,bn.CountryId
      ,bn.InsertDate
      ,bn.BI_EndDate FROM DWH_Amaris.dwh.BridgeNationality bn
WHERE bn.EmployeeId=15366

Тип объединения слиянием: полное внешнее enter image description here

В Преобразовании с условным разбиением в условии Удалить I put:

!ISNULL(EmployeeIdDWH) && ISNULL(CountryIdODS)

И в команде OLE DB после ветви удаления:

Я обновляю EndDate записи, которая больше не существует в ODS:

UPDATE [DWH].[BridgeNationality]
   SET [BI_EndDate] = GETDATE()
 WHERE [EmployeeId] = ?
AND CountryId=?

Как, например, у меня в DWH:

EmployeeId CoutryId  InsertedDate EndDate 
15366      US        2020-03-18   9999-12-31         
15366      FR        2020-03-18   9999-12-31 

и в ODS:

EmployeeId CoutryId   
15366      US                 

Мы можем видеть, что национальность FR была удалена в ODS поэтому мне нужно обновить EndDate записи, имеющей FR в DWH, до GETDATE(), как показано ниже:

    EmployeeId CoutryId  InsertedDate EndDate 
    15366      US        2020-03-18   9999-12-31         
    15366      FR        2020-03-18   2020-03-19

Проблема заключается в том, что каждый раз, когда я выполняю пакет, он постоянно обновляет запись, имеющую национальность FR в DWH однако это должно быть сделано один раз.

1 Ответ

2 голосов
/ 19 марта 2020

Вы должны добавить, что запись имеет EndDate = "9999-12-31" в вашем состоянии, как показано ниже:

!ISNULL(EmployeeIdDWH) && ISNULL(CountryIdODS) && BI_EndDate == (DT_DATE)"9999-12-31" 

В противном случае обновление будет бесконечным, как в вашем случае.

...