#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 файл. Я знаю, что это своего рода «грязное» решение, но оно помогло мне.