#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 знает правильно: (