Я создал конвейер в Azure ADF, который выполняет ETL для создания чистого файла «Final_Data_2023.csv» размером 15 ГБ в контейнере хранилища Azure, и этот чистый файл будет скопирован в таблицу SQL Server dbo.Final_Table.
Этот процесс происходит каждый месяц, и в следующем месяце мы снова подготовим чистый файл Final_Data_2023.csv. Мне нужно обрезать dbo.Final_Table и снова вставить в него новые данные. Но я обеспокоен тем, что мои новые данные имеют совершенно неверные значения, и для быстрого исправления мне нужно, чтобы мой старый Final_Data_2023.csv находился в таблице dbo.Final_Table. Поскольку я усекаю все данные из таблицы, вернуть их будет невозможно.
Как мне спроектировать свою архитектуру, чтобы я мог быстро получить или сохранить таблицу предыдущего месяца и отменить ее, если что-то пойдет не так?
Это не обязательно должен быть небольшой обходной путь.
Контейнер хранилища Azure в основном используется для хранения больших объемов данных. Таким образом, вы можете разработать конвейер для хранения всех данных резервного копирования в контейнере и копирования только последнего файла в таблицу SQL-сервера.
Подход:
Ниже приведены подробные шаги.
Сохраните имя файла с текущей датой в переменной, используя заданную переменную.
@concat(substring(utcnow(),0,10),'_filename.csv')
Добавьте действие копирования для копирования данных с сервера SQL в контейнер хранилища.
В действии копирования вы можете взять исходный набор данных, а в наборе данных приемника создать параметр для имени файла.
Добавьте параметр @dataset().fileName
в путь к файлу, как показано на изображении ниже.
В наборе данных Sink передайте значение переменной в параметр набора данных.
Таким образом, вы можете хранить данные резервной копии в контейнере Azure и копировать новый чистый файл в базу данных. Если необходимо откатиться к предыдущим версиям файла, мы можем скопировать эти данные из контейнера.
Вы можете переименовать
dbo.Final_Table
во что-то вродеdbo.Final_Table_bkp
, а затем воссоздать пустойdbo.Final_Table