Таблицы фактов хранилища данных — СЛИЯНИЕ ИЛИ УДАЛЕНИЕ и ВСТАВКА

#merge #data-warehouse #fact-table

#слияние #хранилище данных #таблица фактов

Вопрос:

Я создаю конкретную таблицу фактов для EDW на основе Kimball.

При загрузке таблицы фактов я столкнулся с реализацией разных подходов.

Ниже приведены предпринятые шаги:

Исходные данные

  • Данные о прогулах учащихся.
  • Учащиеся иногда отсутствуют, и эти прогулы снова захватывают учащегося.
  • Может случиться так, что причина отсутствия может измениться через несколько дней.
  • Также может случиться, что запись будет полностью удалена через несколько дней.
  • Исходная система не имеет функций управления изменениями для указания измененных / удаленных записей.

Поиск данных

  • При поиске данных используются только данные за текущий год.
  • И никакие другие данные не хранятся на этапе.

Суррогаты поиска

  • Поиск выполняется для замены естественных ключей суррогатными ключами соответствующих измерений.

Загрузка данных в таблицу фактов

  • Итак, теперь существует чистый согласованный набор данных, который необходимо загрузить в итоговую таблицу фактов

Вариант первый — Свежая партия

 DELETE FROM FactLearnerAbsenteeism WHERE SchoolYear = @CurrentYear

INSERT INTO FactLearnerAbsenteeism SELECT * FROM #Conform
 

Второй вариант — слияние

 MERGE dbo.FactLearnerAbsenteeism as DST

USING #Conform as SRC

*UPDATE CHANGES*

*INSERT NEW RECORDS*
 

Меня беспокоит следующий вопрос: как я могу обеспечить удаление записей, которые больше не существуют в этом году (удаленные записи). Я предпочитаю использовать слияние, но использование опции УДАЛЕНИЯ в MERGE может удалить записи за предыдущие годы, поскольку они не будут существовать в наборе данных #Conform.

Должен ли я использовать скорее источник ВСЕХ данных? Должен ли я сохранять данные за предыдущие годы на СТАДИИ и использовать только данные за текущие годы?

Комментарии:

1. Первое, что вам нужно сделать, это уволить того, кто разработал вашу исходную систему! Просто из интереса, я предполагаю, что в исходной системе есть база данных для хранения данных: что это за база данных (oracle, SQL Server и т.д.)? Для вашей непосредственной проблемы: (1) Я бы не стал удалять записи фактов, вместо этого я бы просто пометил их как удаленные (т. Е. Мягкое удаление) (2) Только мягкое удаление, если дата записи факта относится к прошлому году и не отображается в вашей исходной / промежуточной таблице

2. LOL @NickW … да, я уже много лет пытаюсь подключить этих JAVA-разработчиков к надлежащим функциям управления изменениями и внедряю мягкое удаление в их базе данных SQL приложений. Но что разработчик SQL знает правильно: (