#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. Рад, что у тебя все получилось! спасибо вам за обновленную информацию.