Как сохранить ссылочную целостность при инициализации таблиц Key FACT \ DIM - PullRequest
0 голосов
/ 18 марта 2019

Там, где я работаю, мы инициализируем ("INIT" => усечение и загрузка) таблицу Fact \ Dimension в тех редких случаях, когда возникает необходимость.

Такой «INIT» требует, чтобы все объекты, ссылающиеся на инициализированный объект, были впоследствии инициализированы для сохранения RI (ссылочной целостности).

Пример - мы обнаружили ошибку в атрибуте rich (~ 25) SCD Dim_Employees, которая будет изменять даты вступления в силу каждой записи. Для этого требуется, чтобы все ссылающиеся объекты пересчитали свои внешние ключи.

Есть ли у вас такая же ситуация, и если да, то как вы справляетесь с ней?

1 Ответ

0 голосов
/ 19 марта 2019

Мы перераспределяли наши данные несколько раз, когда мы переходили с SCD2 / SCD1 на SCD6 или обнаружили ошибки в одном из потоков данных, как вы упомянули.

Нетрудно переназначить ваши данные, вам просто нужно сделать их перед тем, как обрезать свои данные на шаге INIT, чтобы клонировать их (или клонировать в окне перемещения во времени), а затем присоединить таблицу фактов к старому измерению на старый ключ измерения, а затем присоедините к вам новое измерение через внешний ключ и время старого измерения, теперь вы знаете старый ключ для сопоставления нового ключа. Теперь это становится источником вашего обновления, и если вы сделаете это, одна из операций со всеми другими ETL-операциями будет приостановлена, вы сохраните целостность данных.

Если вы не можете приостановить активные процессы ETL, вы сделаете многоэтапное обновление, в котором у вас есть новая таблица деления и старая живая, и вы выполните обычное сопоставление с обоими, и исправите свои чтения, чтобы объединить результаты, а затем один раз ваши новые факты корректно отображаются в новом измерении, разверните и заполните все старые факты ключами ND, и тогда у вас не будет пробелов ND, затем вы можете остановить объединение OD / ND, а затем остановить отображение и сброс OD колонка OD ...

...