Смешанные свойства в столбце «источник» / полях на фабрике данных Azure

#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
  

Мой конвейер выглядит так:
1

У меня есть операция получения метаданных под названием Get Metadata1, 2 указывающая на папки, и после этого выполняется предварительный просмотр папок 3 с двумя действиями: одно действие «Установить переменную», устанавливающее переменную с именем FolderYear 4 с @item().name в качестве значения (для выбора имени папки) и действие копирования, которое создает дополнительный столбец 5 в наборе данных с именем 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 (), чтобы получить год из их имен. Спасибо за помощь!