#azure #azure-data-factory
#azure #azure-data-factory
Вопрос:
Я использую фабрику данных Azure для копирования данных из исходной папки (Azure Blob), внутри которой находится несколько папок (и каждая из этих папок имеет год в качестве названия, а внутри папок находятся электронные таблицы Excel с данными) в таблицу SQL Server. Я хочу выполнить итерацию по папкам, выбрать имя папки и вставить имя в столбец в таблице, чтобы для каждого считывания данных внутри файлов в папке имя папки, в которой находятся эти данные, было в таблице, вот так:
Data 1 |Data 2 |Year
------------------------
A |abc |2020
B |def |2020
C |ghi |2021
D |jkl |2022
E |lmn |2023
Мой конвейер выглядит так:
У меня есть операция получения метаданных под названием Get Metadata1, указывающая на папки, и после этого выполняется предварительный просмотр папок с двумя действиями: одно действие «Установить переменную», устанавливающее переменную с именем FolderYear с @item().name в качестве значения (для выбора имени папки) и действие копирования, которое создает дополнительный столбец в наборе данных с именем Year, используя переменную.
Я пытаюсь сопоставить столбец дополнительного года со столбцом в таблице, но при отладке конвейера появляется следующая ошибка:
{ "errorCode": "2200", "message": "Mixed properties are used to reference 'source' columns/fields in copy activity mapping. Please only choose one of the three properties 'name', 'path' and 'ordinal'. The problematic mapping setting is 'name': 'Year', 'path': '','ordinal': ''. ", "failureType": "UserError", "target": "Copy data1", "details": [] }
Возможно ли вставить имя папки, которое я в настоящее время повторяю, в столбец базы данных?
Комментарии:
1. Нет необходимости использовать действие «Установить переменную».
Ответ №1:
Я провел тот же тест и успешно скопировал данные (включая имя папки) в таблицу SQL.
У меня есть две папки в контейнере, и каждая папка содержит один файл cvs для тестирования.
Предыдущие настройки такие же, как и у вас.
Внутри действия ForEach я использую Дополнительные столбцы, чтобы добавить имя папки к источнику данных.
После копирования в таблицу SQL результаты отображаются следующим образом:
Обновить:
Моя файловая структура выглядит следующим образом: Вы можете использовать выражение @concat('FolderA/FolderB/',item().name)
:
Комментарии:
1. Хорошо, я попытался поступить так же, как вы, но в моем случае набор данных с файлами находится внутри другой папки, например, так: FolderA / FolderB /[вставить год здесь] / [вставить файлы здесь]. Вы ссылались на папку, используя @item().name в качестве подстановочного пути. Есть ли способ вставить регулярное выражение, которое ссылается на папку внутри папки?
2. Да, пожалуйста, посмотрите мою обновленную часть ответа и поправьте меня, если я неправильно понял вас в ответе.
3. Я решил проблему. В именах файлов, с которыми я пытаюсь работать, указан год, поэтому я переместил их все вместе в одну папку, а затем использовал функцию split (), чтобы получить год из их имен. Спасибо за помощь!