Я пытаюсь получить доступ к некоторым данным, хранящимся в контейнере в хранилище BLOB-объектов, при копировании данных. В настройках источника я могу указать набор данных для исходного файла, теперь я хочу получить доступ к тому же файлу в настройках приемника в сценарии предварительного копирования, чтобы выполнить некоторые преобразования в нем.
https://i.sstatic.net/JpKmgMU2.png
https://i.sstatic.net/V0FxXaEt.png
На следующем изображении я хочу заполнить пространство в кавычках, какое значение имеет доступ к источнику в копируемых данных.
Сценарий предварительного копирования действия копирования предназначен только для базы данных набора данных приемника. Какие бы запросы вы ни выполняли, они будут подобны сценарию в целевой базе данных. Это означает, что сценарий предварительного копирования не будет иметь доступа к исходным данным действия копирования. Сценарий предварительного копирования предназначен для усечения или обновления определенных таблиц в целевой базе данных перед копированием в целевую таблицу.
Поскольку вам необходимо изменить исходные данные перед копированием в целевую таблицу, вы можете использовать Поток данных для выполнения преобразований. В источнике потока данных укажите свой исходный набор данных, и вы сможете использовать преобразования «Выбрать», «агрегировать», «производные столбцы» в соответствии с вашим SQL-запросом. В приемнике добавьте целевую таблицу SQL.
(ИЛИ)
Если ваши исходные данные содержат менее 5000 строк, вы можете попробовать описанный ниже подход, используя комбинацию действий поиска и копирования.
Используйте операцию поиска с исходным набором данных, и она предоставит данные в виде массива JSON.
После поиска используйте действие копирования, но для наборов данных источника и приемника укажите один и тот же набор данных целевой таблицы.
В источнике действия копирования используйте опцию запроса. Используйте openjson() с массивом JSON вывода активности поиска, как показано ниже в запросе.
declare @json nvarchar(max) = N'@{activity('Lookup1').output.value}';
SELECT * FROM
OPENJSON (@json)
WITH (
id int '$.id' ,
date varchar(32) '$.date',
name int '$.name'
);
Теперь вы можете изменить исходные данные с помощью SQL-запроса, как указано выше, который будет скопирован в целевую таблицу.
Это не что иное, как получение исходных данных из ADLS в виде массива JSON с использованием операций поиска. Затем используйте этот массив JSON с openjson()
, с помощью которого вы можете запросить его. Благодаря этому вы можете выполнять операции с этими данными, используя запросы SQL.
Второй сработал. Не могли бы вы поподробнее объяснить второй вариант?