Не удается скопировать файл из SFTP на фабрике данных Azure при использовании подстановочного знака (*) в имени файла

#azure #ftp #sftp #azure-data-factory

#azure #ftp #sftp #azure-data-factory

Вопрос:

Я не могу скопировать CSV-файлы из SFTP-соединения в хранилище больших двоичных объектов при использовании подстановочного знака (*) в имени файла.

Более конкретно, я ежедневно получаю CSV-файлы в SFTP, и они имеют формат: «DDMMYYYYYXXXXXX.csv», где «xxxxxx» — это временная метка. Более конкретно, мой csv-файл за 13 марта: «13032019083647.csv», а за 14 марта: «14032019083556.csv». Очевидно, что временная метка отличается для каждого дня, поэтому я хочу скопировать файл независимо от того, какие строки существуют между датой и расширением файла.

В подполе «Файл» «Путь к файлу» вкладки «Подключение» моего подмножества я ввожу в качестве входных данных: «13032019 *.csv», как указано на значке справки рядом с полем:

Имя файла или фильтр файлов

Когда я делаю это, мой отладочный запуск завершается неудачей с:

{«Код ошибки»: «2200», «сообщение»: «ErrorCode=UserErrorInvalidCopyBehaviorBlobNameNotAllowedWithPreserveOrFlattenHierarchy,’Type=Microsoft.DataTransfer.Common.Общий.Исключение HybridDeliveryException, сообщение = Не удается сохранить иерархию копирования при копировании из папки в один файл., Источник = Microsoft.dataTransfer.Клиентская библиотека}

Я получаю аналогичную ошибку независимо от того, какой тип копирования я выбираю. Я также пытался поэкспериментировать с параметром FileFilter (хотя ADF предупреждает, что того же поведения можно добиться с помощью параметра fileName), но в итоге все равно получаю ту же ошибку.

Для дальнейшего разъяснения я прилагаю сегмент кода, который ADF создает для этой конфигурации:

Сегмент кода с ошибочным именем файла

Я должен также упомянуть, что при использовании полного имени файла в соответствующем поле, а именно значения: «13032019083647.csv», копирование работает нормально.

Любая помощь была бы высоко оценена!

Ответ №1:

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

1. Действие с метаданными: Используйте набор данных в этом действии, чтобы указать конкретное местоположение файлов и передать дочерние элементы в качестве параметра.

2. Действие фильтра: Используйте фильтр для фильтрации файлов на основе ваших потребностей.

3. Для каждого действия: В Для каждого действия получите элементы из предыдущего действия и добавьте действие копирования внутри для каждого. При копировании исходным набором данных должен быть @item().name.

Я надеюсь, что это решит вашу проблему.

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

1. Интересно, что при использовании фильтрации по подстановочным знакам azure data factory автоматически предполагает, что выполняется чтение в папке (а не в файле), даже если существует только 1 файл, удовлетворяющий условию… Таким образом, это причина сбоя с данной ошибкой. @Yunvraj Я попробую ваш подход и дам вам знать, работает ли он должным образом.

2. @loannis. Работает это или нет. сообщите нам, если вы пробовали какую-либо другую логику для достижения этого.

3. опубликовал мой ответ

Ответ №2:

У меня сработало следующее: я сохранил то же регулярное выражение для входного файла, но я определил как «Поведение копирования: объединение файлов». Поскольку, как упоминалось, существует только 1 файл, удовлетворяющий условию регулярного выражения, в качестве выходных данных был создан только 1 файл. Я знаю, что это своего рода «грязное» решение, но оно помогло мне.