У меня есть процесс ETL, который для цели этого вопроса полностью выполняется в T-SQL.
На этапе извлечения текущий процесс выглядит следующим образом:
- «исходная» таблица
- Вставка всех данных из таблицы ODS в нашу «исходную» таблицу
Однако я хочу реализовать возможность «инкрементной» загрузки, которая бы состояла изтолько вставка новых данных и обновление измененных данных.Таким образом, этот процесс будет выглядеть примерно так:
- Установить бит "archive" в таблице "source" (все данные теперь заархивированы, т.е. не изменены)
- Обновить существующие данные из ODS на "source "(установите обновленный бит архива строк в 0)
- Вставьте новые данные из ODS в" source "(с битом архива 0)
Мне известно об операторе MERGE
в SQL Server 2008+.Тем не менее, меня беспокоит то, как я могу правильно регистрировать, какие строки действительно изменились.Если я просто сделаю MERGE
, я считаю, что каждая найденная строка будет помечена как измененная, даже если сами данные не изменились.
Существуют ли какие-либо приемы, позволяющие это сделать, помимо указания каждого столбца вобновить предикат?Или есть лучший способ добиться того, что я пытаюсь сделать?Я хотел бы избежать решения, которое включает SSIS, если это вообще возможно по независящим от меня причинам.