Как использовать сценарий предварительного копирования из операции копирования для удаления записей в приемнике на основе таблицы отслеживания изменений из источника? - PullRequest
0 голосов
/ 30 мая 2018

Я пытаюсь использовать отслеживание изменений для постепенного копирования данных с SQL Server в базу данных SQL Azure.Я следовал учебному руководству по Microsoft Azure, но столкнулся с некоторыми проблемами при реализации этого для большого количества таблиц.

В исходной части операции копирования я могу использовать запрос, который дает мне таблицу изменений всех записей, которые были обновлены, вставлены или удалены со времени последней версии отслеживания изменений.Эта таблица будет выглядеть примерно так:

PersonID   Age    Name   SYS_CHANGE_OPERATION
---------------------------------------------
1          12     John   U
2          15     James  U
3          NULL   NULL   D
4          25     Jane   I

с PersonID, являющимся первичным ключом для этой таблицы.

Проблема заключается в том, что операция копирования может только добавлять данные в базу данных SQL Azure, поэтому, когдазапись обновляется и выдает ошибку из-за дублирования первичного ключа.Я могу справиться с этой проблемой, разрешив операции копирования использовать хранимую процедуру, которая объединяет данные в таблицу базы данных SQL Azure, но проблема в том, что у меня большое количество таблиц.

Мне бы хотелось, чтобы сценарий предварительной копии удалял удаленные и обновленные записи в базе данных SQL Azure, но не могу понять, как это сделать.Нужно ли создавать отдельные хранимые процедуры и соответствующие типы таблиц для каждой таблицы, которую я хочу скопировать, или есть ли сценарий предварительного копирования для удаления записей на основе таблицы отслеживания изменений?

1 Ответ

0 голосов
/ 30 мая 2018

Вы должны использовать действие LookUp перед действием копирования.С помощью этого действия LookUp вы можете выполнить запрос к базе данных, чтобы получить удаленные и обновленные PersonID, желательно все в одном поле, через запятую (чтобы их было проще использовать в сценарии предварительного копирования).Более подробная информация здесь: https://docs.microsoft.com/en-us/azure/data-factory/control-flow-lookup-activity

Затем вы можете выполнить следующие действия в сценарии предварительной копии:

delete from TableName where PersonID in (@{activity('MyLookUp').output.firstRow.PersonIDs})

Таким образом, вы будете удалять все удаленные или обновленные строки перед вставкойновые.

Надеюсь, это помогло!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...