Перечислите все файлы в контейнере и скопируйте каждый файл в foreach - PullRequest
0 голосов
/ 08 октября 2019

Требуется загрузить все файлы .csv в контейнере BLOB-объектов Azure в базу данных SQL.

Попытка использовать подстановочный знак *.* в имени файла в наборе данных, который использует связанную службу, которая подключается к BLOB-объекту и выводитitemName в операции Get Meta Data.

При выполнении в режиме отладки список имен файлов не возвращается в окне вывода. При ссылке на параметр с помощью выражения указывается, что типом является String, а не collection.

Ответы [ 3 ]

1 голос
/ 08 октября 2019

Для такого рода задач я использую действие Получить метаданные и обрабатываю результаты с помощью действия Для каждого . Внутри действия «Для каждого» у вас может быть простое действие «Копировать» для копирования файлов CSV в таблицы SQL, или, если работа более сложная, вы можете использовать Поток данных.

Некоторые полезные советы:

  1. В действии «Получить метаданные» на вкладке «Набор данных»> «Список полей» выберите параметр «Дочерние элементы»: enter image description here
  2. Я рекомендую добавить «Фильтр»действие после получения метаданных, чтобы убедиться, что вы обрабатываете только файлы и, возможно, даже ожидаемые расширения. Это делается на вкладке «Настройки» следующим образом: enter image description here
  3. В разделе «Для каждого» на вкладке «Настройки» задайте элементы на основе выходных данных действия «Фильтр»: enter image description here
  4. Внутри For Each, на уровне активности вы ссылаетесь на экземпляр с помощью "@item (). Name": enter image description here

Вот как выглядит один из моих производственных конвейеров, реализующих этот шаблон: enter image description here

1 голос
/ 08 октября 2019

При необходимости вы можете получить представление о LookUp Activity .

Операция Lookup может получить набор данных из любого из источников данных, поддерживаемых фабрикой данных Azure. Используйте его в следующем сценарии:

Динамически определять, с какими объектами работать в последующем действии, вместо жесткого кодирования имени объекта. Некоторые примеры объектов - это файлы и таблицы.

Например, мой контейнер содержит 2 файла CSV в контейнере test:

enter image description here

enter image description here

Настройка набора данных для хранения больших двоичных объектов:

enter image description here

Настройка операции поиска:

enter image description here

Выход:

enter image description here

0 голосов
/ 09 октября 2019

Вы на самом деле используете *.*? Это может быть слишком расплывчато для интерпретации системы. Может быть, вы можете попробовать что-то более описательное, например, ???20190101.json, или что-то, что соответствует шаблонам ваших наборов данных.

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

Кроме того, проверьте ссылку ниже.

https://azure.microsoft.com/en-us/updates/data-factory-supports-wildcard-file-filter-for-copy-activity/

...