Фабрика данных Azure — скопируйте неизвестное количество файлов в соответствующие таблицы

#azure-data-factory #azure-data-factory-2 #azure-data-factory-pipeline

Вопрос:

Я пытаюсь скопировать неизвестное количество файлов в таблицы БД. Допустим, у меня есть два файла с именами 1 и 2, и я хочу скопировать их в таблицы с именами A и B.

1 — А
2 — Б

Я сделал это, создав таблицу сопоставления

 |SourceFileName|TargetTableName|
|1             |A              |
|2             |B              |
 

Я могу выполнить эту задачу, когда присутствуют оба файла, но иногда там будет только один файл. В этом случае мой цикл ForEach завершается неудачно, и я хочу, чтобы он все равно прошел и перешел к следующей задаче.

Теперь у меня есть метаданные, которые передают дочерние элементы в цикл ForEach, и внутри этого цикла у меня есть поиск на основе таблицы сопоставления и действие копирования на основе этого поиска @activity («поиск»). output.value[0].Целевое имя

Ответ №1:

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

Это приведет к циклическому выполнению Foreach действия в зависимости от количества входных файлов (1 или более) на Get Metadata выходе.

Таблица сопоставления (таблица поиска):

введите описание изображения здесь

Вывод действия Получить метаданные:

введите описание изображения здесь

  • В цикле Foreach —>> Lookup действие параметризуйте запрос, чтобы получить имя таблицы на основе исходного имени файла.
     @concat('SELECT top 1 [TableName] FROM [dbo].[MappingTable] where Filename = ''', string(item().name), '''')
     

введите описание изображения здесь

Вывод активности поиска:

введите описание изображения здесь

  • В Copy data действии передайте текущий элемент файла Foreach в качестве источника.

введите описание изображения здесь

  • В приемнике операций копирования данных динамически передайте имя таблицы с выходным содержимым операции поиска.
     @activity('Lookup1').output.firstRow.TableName
     

введите описание изображения здесь

  • Содержимое цикла Foreach зацикливается на количестве файлов, выводимых с помощью метаданных Get.

введите описание изображения здесь

  • Когда более одного входного файла:

введите описание изображения здесь

Комментарии:

1. Это именно то, что я искал. Большое спасибо.

2. Рад, что у тебя все получилось! спасибо вам за обновленную информацию.