Я новичок в разработке процесса ETL. В настоящее время у меня есть две базы данных, одна из которых является живой базой данных, где приложение использует ее для каждодневных транзакций. Другое хранилище данных.
У меня есть таблица в оперативной базе данных, в которую регулярно вставляются новые данные. Цель состоит в том, чтобы каждую ночь процесс ETL передавал данные в оперативной базе данных в хранилище данных, а затем удалял данные в оперативной базе данных.
Из-за недостатка знаний, решение, которое я получил, заключается в реализации чего-то, что называется скользящим столом. По сути, у живой базы данных есть две таблицы с одинаковой структурой. Я называю их tblLive1 и tblLive2 . У меня также есть синоним вызова tblLive . Все вставки сделаны по синониму. Синоним будет указывать на одну из таблиц.
Когда я запускаю процесс ETL, у меня есть хранимая процедура, которая удаляет и создает новый синоним, указывающий на tblLive2 . Это позволяет процессу ETL преобразовывать данные из tblLive1 без влияния на приложение. Предполагается, что процессу ETL требуется час, и я не хочу, чтобы процесс ETL блокировал таблицу, не позволяя приложению вставить в нее новые данные.
Это решение теоретически должно работать, но не элегантно.
Я уверен, что эта проблема является распространенной, есть ли другие решения?