2016-11-17 4 views
0

Я работаю над проектом хранилища данных, который будет включать интеграцию данных из нескольких исходных систем. Я настроил пакет SSIS, который заполняет измерение клиента и использует медленно изменяющийся инструмент измерения, чтобы отслеживать обновления для клиента.Нужна помощь в понимании альтернатив scd в SSIS

У меня возникают проблемы. Возьмем такой пример:

Источник система А может иметь запись как это выглядит следующим образом:

Имя, Фамилия, Zipcode Джейн Доу, 14222

Источник система B может иметь запись для тот же самый клиент, который выглядит следующим образом:

Имя, Фамилия, Zipcode Джейн Доу, Неизвестный

Если я первый импортировать записи из системы А, у меня будет первое имя , фамилию и этническую принадлежность. Отлично. Теперь, если я импортирую запись клиента из системы B, я могу выполнить нечеткое сопоставление, чтобы узнать, что это тот же человек, и использовать медленно меняющийся инструмент измерения для обновления информации. Но в этом случае я потеряю zipcode, потому что «unknown» перезапишет действительные данные.

Мне интересно, не подходит ли я к этой проблеме неправильно. Инструмент SCD, похоже, не предлагает какого-либо способа выборочного обновления атрибутов на основе того, являются ли новые данные действительными или нет. Будет ли работа слиянием работать лучше? Я делаю какую-то фундаментальную ошибку дизайна, которую я не вижу?

Спасибо за любой совет!

ответ

0

По моему опыту встроенный инструмент SCD не достаточно гибкий, чтобы справиться с этим требованием.

Либо несколько операторов MERGE, либо ряд операторов UPDATE и INSERT, вероятно, предоставят вам максимальную гибкость с логикой и производительностью.

Есть, вероятно, модели там для MERGE заявления для SCD Type 2, но вот рисунок я использую:

Merge Target 
    Using Source 
    On Target.Key = Source.Key 

    When Matched And 
    Target.NonKeyAttribute <> Source.NonKeyAttribute 
    Or IsNull(Target.NonKeyNullableAttribute, '') <> IsNull(Source.NonKeyNullableAttribute, '') 
    Then Update Set SCDEndDate = GetDate(), IsCurrent = 0 

    When Not Matched By Target Then 
    Insert (Key, ... , SCDStartDate, IsCurrent) 
    Values (Source.Key, ..., GetDate(), 1) 

    When Not Matched By Source Then 
    Update Set SCDEndDate = GetDate(), IsCurrent = 0; 

Merge Target 
    Using Source 
    On Target.Key = Source.Key 

    -- These will be the changing rows that were expired in first statement. 
    When Not Matched By Target Then 
    Insert (Key, ... , SCDStartDate, IsCurrent) 
    Values (Source.Key, ... , GetDate(), 1); 
+0

Благодарим Вас за подтверждение ограничений встроенного SCD ​​инструмента. У меня была догадка, что это будет так, но мне нужно какое-то внешнее подтверждение, прежде чем я откажусь от своего нынешнего проекта. –

 Смежные вопросы

  • Нет связанных вопросов^_^