Копирование данных с FTP-сервера с помощью Фабрики данных Azure или Synapse Analytics

ОБЛАСТЬ ПРИМЕНЕНИЯ: Фабрика данных Azure Azure Synapse Analytics

Совет

Попробуйте использовать фабрику данных в Microsoft Fabric, решение для аналитики с одним интерфейсом для предприятий. Microsoft Fabric охватывает все, от перемещения данных до обработки и анализа данных в режиме реального времени, бизнес-аналитики и отчетности. Узнайте, как бесплатно запустить новую пробную версию !

В этой статье описывается, как скопировать данные с FTP-сервера. Дополнительные сведения см. в вводных статьях о Фабрике данных Azure и Synapse Analytics.

Поддерживаемые возможности

Соединитель FTP поддерживает следующие возможности:

Поддерживаемые возможности IR
Действие копирования (источник/-) (1) (2)
Действие поиска (1) (2)
Действие получения метаданных в Фабрике данных Azure (1) (2)
Действие удаления (1) (2)

① Среда выполнения интеграции Azure ② Локальная среда выполнения интеграции

В частности, этот соединитель FTP поддерживает:

Соединитель FTP поддерживает FTP-сервер, работающий в пассивном режиме. Активный режим не поддерживается.

Необходимые компоненты

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

Если же хранилище данных представляет собой управляемую облачную службу данных, можно использовать Azure Integration Runtime. Если доступ предоставляется только по IP-адресам, утвержденным в правилах брандмауэра, вы можете добавить IP-адреса Azure Integration Runtime в список разрешений.

Вы также можете использовать функцию среды выполнения интеграции в управляемой виртуальной сети в Фабрике данных Azure для доступа к локальной сети без установки и настройки локальной среды выполнения интеграции.

Дополнительные сведения о вариантах и механизмах обеспечения сетевой безопасности, поддерживаемых Фабрикой данных, см. в статье Стратегии получения доступа к данным.

Начать

Чтобы выполнить действие копирования с конвейером, можно воспользоваться одним из приведенных ниже средств или пакетов SDK:

Создание связанной службы для FTP-сервера с помощью пользовательского интерфейса

Выполните следующие действия, чтобы создать связанную службу для FTP-сервера с помощью пользовательского интерфейса на портале Azure.

  1. Перейдите на вкладку "Управление" в рабочей области Фабрики данных Azure или Synapse и выберите "Связанные службы", после чего нажмите "Создать":

  2. Выполните поиск по запросу “FTP” и выберите соединитель FTP.

    Снимок экрана: соединитель FTP.

  3. Настройте сведения о службе, проверьте подключение и создайте связанную службу.

    Снимок экрана: конфигурация связанной службы для FTP-сервера.

Сведения о конфигурации соединителя

Следующие разделы содержат сведения о свойствах, которые используются для определения сущностей, характерных для FTP.

Свойства связанной службы

Для связанной службы FTP поддерживаются следующие свойства:

Свойство Описание: Обязательное поле
type Для свойства type необходимо задать значение FtpServer. Да
host Укажите имя или IP-адрес FTP-сервера. Да
port Укажите порт, прослушиваемый FTP-сервером.
Допустимые значения: целые числа; значение по умолчанию — 21.
No
enableSsl Укажите, какой канал следует использовать (FTP через SSL или TLS).
Допустимые значения: true (по умолчанию), false.
No
enableServerCertificateValidation Уточните, следует ли включать проверку сертификатов TLS и SSL на сервере при использовании FTP через канал SSL или TLS.
Допустимые значения: true (по умолчанию), false.
No
authenticationType Укажите тип проверки подлинности.
Допустимые значения: Базовый, Анонимный
Да
userName Укажите пользователя, имеющего доступ к FTP-серверу. No
password Укажите пароль для пользователя (userName). Пометьте это поле как SecureString, чтобы безопасно хранить его, или добавьте ссылку на секрет, хранящийся в Azure Key Vault. No
connectVia Среда выполнения интеграции, используемая для подключения к хранилищу данных. Дополнительные сведения см. в разделе Предварительные условия. Если не указано другое, по умолчанию используется интегрированная среда выполнения Azure. No

Примечание.

Соединитель FTP поддерживает доступ к FTP-серверу без шифрования или с явным шифрованием SSL/TLS. Он не поддерживает неявное шифрование SSL/TLS.

Пример 1. Использование анонимной проверки подлинности

{
    "name": "FTPLinkedService",
    "properties": {
        "type": "FtpServer",
        "typeProperties": {
            "host": "<ftp server>",
            "port": 21,
            "enableSsl": true,
            "enableServerCertificateValidation": true,
            "authenticationType": "Anonymous"
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

Пример 2. Использование базовой проверки подлинности

{
    "name": "FTPLinkedService",
    "properties": {
        "type": "FtpServer",
        "typeProperties": {
            "host": "<ftp server>",
            "port": 21,
            "enableSsl": true,
            "enableServerCertificateValidation": true,
            "authenticationType": "Basic",
            "userName": "<username>",
            "password": {
                "type": "SecureString",
                "value": "<password>"
            }
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

Свойства набора данных

Полный список разделов и свойств, доступных для определения наборов данных, см. в статье о наборах данных.

Фабрика данных Azure поддерживает следующие форматы файлов. Дополнительные сведения о параметрах с учетом форматирования см. в соответствующих статьях.

Ниже перечислены свойства, которые поддерживаются для FTP-сервера в locationнастройках набора данных на основе формата:

Свойство Описание: Обязательное поле
type Свойство типа в location для набора данных следует установить как FileServerLocation. Да
folderPath Путь к папке. Если вы хотите использовать подстановочный знак для фильтрации папки, пропустите этот параметр и укажите его в параметрах источника действия. No
fileName Имя файла в заданном пути к папке. Если вы хотите использовать подстановочный знак для фильтрации файлов, пропустите этот параметр и укажите его в параметрах источника действия. No

Пример:

{
    "name": "DelimitedTextDataset",
    "properties": {
        "type": "DelimitedText",
        "linkedServiceName": {
            "referenceName": "<FTP linked service name>",
            "type": "LinkedServiceReference"
        },
        "schema": [ < physical schema, optional, auto retrieved during authoring > ],
        "typeProperties": {
            "location": {
                "type": "FtpServerLocation",
                "folderPath": "root/folder/subfolder"
            },
            "columnDelimiter": ",",
            "quoteChar": "\"",
            "firstRowAsHeader": true,
            "compressionCodec": "gzip"
        }
    }
}

Свойства действия копирования

Полный список разделов и свойств, используемых для определения действий, см. в статье Конвейеры и действия в фабрике данных Azure. Этот раздел содержит список свойств, поддерживаемых источником FTP.

FTP в качестве источника

Фабрика данных Azure поддерживает следующие форматы файлов. Дополнительные сведения о параметрах с учетом форматирования см. в соответствующих статьях.

Ниже перечислены свойства, которые поддерживаются для FTP-сервера в storeSettingsисточнике копирования на основе формата:

Свойство Описание: Обязательное поле
type Для свойства типа в storeSettings необходимо задать значение SftpReadSettings. Да
Поиск файлов для копирования
ВАРИАНТ 1. Статический путь
Копирование будет производиться из указанного пути к папке или файлу, заданному в наборе данных. Если вы хотите скопировать все файлы из папки, дополнительно укажите wildcardFileName со значением *.
ВАРИАНТ 2. Подстановочный знак
- wildcardFolderPath
Путь к папке будет использовать подстановочные знаки для фильтрации исходных папок.
Допустимые подстановочные знаки: * (соответствует нулю или большему количеству знаков) и ? (соответствует нулю или одному знаку). Для экранирования используйте ^, если фактическое имя папки содержит подстановочный знак или escape-символ.
Дополнительные примеры приведены в разделе Примеры фильтров папок и файлов.
No
ВАРИАНТ 2. Подстановочный знак
— wildcardFileName
Имя файла с подстановочными знаками в заданном контейнере и folderPath/wildcardFolderPath для фильтрации исходных папок.
Допустимые подстановочные знаки: * (соответствует нулю или большему количеству знаков) и ? (соответствует нулю или одному знаку). Для экранирования используйте ^, если фактическое имя файла содержит подстановочный знак или escape-символ. Дополнительные примеры приведены в разделе Примеры фильтров папок и файлов.
Да
Вариант 3. Список файлов
- fileListPath
Указывает, что нужно скопировать заданный набор файлов. Укажите текстовый файл со списком файлов, которые необходимо скопировать, по одному файлу в строке (каждая строка должна содержать относительный путь к заданному в наборе данных пути).
При использовании этого варианта не указывайте имя файла в наборе данных. Ознакомьтесь с дополнительными примерами в разделе Примеры списков файлов.
No
Дополнительные параметры:
recursive Указывает, следует ли читать данные рекурсивно из вложенных папок или только из указанной папки. Обратите внимание, что если для свойства recursive задано значение true, а приемником является файловое хранилище, пустые папки и вложенные папки не создаются в приемнике.
Допустимые значения: true (по умолчанию) и false.
Это свойство не применяется при настройке fileListPath.
No
deleteFilesAfterCompletion Указывает, удаляются ли двоичные файлы из исходного хранилища после успешного перемещения в конечное хранилище. Файлы удаляются поочередно, поэтому в случае сбоя действия копирования вы увидите, что некоторые файлы уже скопированы в место назначения и удалены из источника, в то время как остальные находятся в исходном хранилище.
Это свойство допустимо только в сценарии копирования двоичных файлов. По умолчанию имеет значение false.
No
useBinaryTransfer Укажите, следует ли использовать режим передачи в двоичном формате. Задается значение true, если следует использовать двоичный формат (по умолчанию), и false, если следует использовать ASCII. No
enablePartitionDiscovery Для секционированных файлов укажите, следует ли анализировать секции из пути к файлу и добавлять их как дополнительные исходные столбцы.
Допустимые значения: false (по умолчанию) и true.
No
partitionRootPath Если обнаружение секций включено, укажите абсолютный корневой путь, чтобы считывать секционированные папки как столбцы данных.

Если параметр не задан (по умолчанию), происходит следующее.
— При использовании пути к файлу в наборе данных или списке файлов в источнике корневым путем секции считается путь, настроенный в наборе данных.
— При использовании фильтра папки с подстановочными знаками корневым путем секции считается часть пути до первого подстановочного знака.

Предположим, что вы настроили путь в наборе данных следующим образом: "root/folder/year=2020/month=08/day=27".
— Если указать корневой путь секции "root/folder/year=2020", действие копирования в дополнение к указанным в файлах столбцам создаст еще два столбца, month и day, со значениями "08" и "27" соответственно.
— Если корневой путь секции не указан, дополнительные столбцы создаваться не будут.
No
maxConcurrentConnections Верхний предел одновременных подключений, установленных для хранилища данных при выполнении действия. Указывайте значение только при необходимости ограничить количество одновременных подключений. No
disableChunking При копировании данных с FTP-сервера служба пытается сначала получить длину файла, а затем разделить этот файл на несколько частей и считывать их параллельно. Укажите, поддерживает ли ваш FTP-сервер получение длины файла или поиск для чтения с определенным смещением.
Допустимые значения: false (по умолчанию), true.
No

Пример:

"activities":[
    {
        "name": "CopyFromFTP",
        "type": "Copy",
        "inputs": [
            {
                "referenceName": "<Delimited text input dataset name>",
                "type": "DatasetReference"
            }
        ],
        "outputs": [
            {
                "referenceName": "<output dataset name>",
                "type": "DatasetReference"
            }
        ],
        "typeProperties": {
            "source": {
                "type": "DelimitedTextSource",
                "formatSettings":{
                    "type": "DelimitedTextReadSettings",
                    "skipLineCount": 10
                },
                "storeSettings":{
                    "type": "FtpReadSettings",
                    "recursive": true,
                    "wildcardFolderPath": "myfolder*A",
                    "wildcardFileName": "*.csv",
                    "disableChunking": false
                }
            },
            "sink": {
                "type": "<sink type>"
            }
        }
    }
]

Примеры фильтров папок и файлов

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

folderPath fileName recursive Структура исходной папки и результат фильтрации (извлекаются файлы, выделенные полужирным шрифтом)
Folder* (пусто, используйте по умолчанию) false ПапкаA
    Файл1.csv
    File2.json
    Вложенная_папка1
        File3.csv
        File4.json
        File5.csv
Другая_папкаB
    Файл6.csv
Folder* (пусто, используйте по умолчанию) true ПапкаA
    Файл1.csv
    File2.json
    Вложенная_папка1
        File3.csv
        File4.json
        File5.csv
Другая_папкаB
    Файл6.csv
Folder* *.csv false ПапкаA
    Файл1.csv
    File2.json
    Вложенная_папка1
        File3.csv
        File4.json
        File5.csv
Другая_папкаB
    Файл6.csv
Folder* *.csv true ПапкаA
    Файл1.csv
    File2.json
    Вложенная_папка1
        File3.csv
        File4.json
        File5.csv
Другая_папкаB
    Файл6.csv

Примеры списков файлов

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

Предположим, что у вас есть следующая исходная структура папок и вы хотите скопировать файлы, выделенные полужирным шрифтом:

Пример исходной структуры Содержимое файла FileListToCopy.txt Настройка
root
    ПапкаA
        Файл1.csv
        File2.json
        Вложенная_папка1
            File3.csv
            File4.json
            File5.csv
    Метаданные
        FileListToCopy.txt
Файл1.csv
Вложенная_папка1/Файл3.csv
Вложенная_папка1/Файл5.csv
В наборе данных:
– Путь к папке: root/FolderA

В источнике действия копирования:
– Путь к списку файлов: root/Metadata/FileListToCopy.txt

Путь к списку файлов указывает на текстовый файл в том же хранилище данных, содержащий список файлов, которые необходимо скопировать, указав по одному файлу в строке с относительным путем к пути, заданному в наборе данных.

Свойства действия поиска

Подробные сведения об этих свойствах см. в разделе Действие поиска.

Свойства действия GetMetadata

Подробные сведения об этих свойствах см. в статье Действие GetMetadata.

Свойства действия удаления

Подробные сведения об этих свойствах см. в статье Действие удаления.

Устаревшие модели

Примечание.

Следующие модели по-прежнему поддерживаются на условиях "как есть" для обеспечения обратной совместимости. В дальнейшем рекомендуется использовать новую модель, упомянутую в разделах выше. Пользовательский интерфейс разработки был изменен для создания новой модели.

Устаревшая модель набора данных

Свойство Описание: Обязательное поле
type Свойство type для набора данных должно иметь значение FileShare. Да
folderPath Путь к папке, Фильтр с подстановочными знаками поддерживается. Допустимые подстановочные знаки: * (соответствует нулю или большему количеству знаков) и ? (соответствует нулю или одному знаку). Для экранирования используйте ^, если имя фактической папки содержит подстановочный знак или escape-символ.

Примеры: rootfolder/subfolder/. Дополнительные примеры см. в разделе Примеры фильтров папок и файлов.
Да
fileName Имя или фильтр шаблонов для файлов по указанному folderPath. Если этому свойству не присвоить значение, набор данных будет указывать на все файлы в папке.

Допустимые знаки подстановки для фильтра: * (соответствует нулю или нескольким символам) и ? (соответствует нулю или одному символу).
Пример 1. "fileName": "*.csv"
Пример 2. "fileName": "???20180427.txt"
Используйте ^ для экранирования символов, если фактическое имя файла содержит подстановочный знак или этот escape-символ.
No
format Если требуется скопировать файлы между файловыми хранилищами как есть (двоичное копирование), можно пропустить раздел форматирования в определениях входного и выходного наборов данных.

Если нужно проанализировать или создать файлы определенного формата, поддерживаются следующие типы форматов файлов: TextFormat, JsonFormat, AvroFormat, OrcFormat, ParquetFormat. Свойству type в разделе format необходимо присвоить одно из этих значений. Дополнительные сведения см. в разделах о текстовом формате, формате Json, формате Avro, формате Orc и формате Parquet.
Нет (только для сценария двоичного копирования)
compression Укажите тип и уровень сжатия данных. Дополнительные сведения см. в разделе Поддержка сжатия.
Поддерживаемые типы: GZip, Deflate, BZip2 и ZipDeflate.
Поддерживаемые уровни: Optimal и Fastest.
No
useBinaryTransfer Укажите, следует ли использовать режим передачи в двоичном формате. Задается значение true, если следует использовать двоичный формат (по умолчанию), и false, если следует использовать ASCII. No

Совет

Чтобы скопировать все файлы в папке, укажите только folderPath.
Чтобы скопировать один файл с заданным именем, укажите folderPath с частью папки и fileName с именем файла.
Чтобы скопировать подмножество файлов в папке, укажите folderPath с частью папки и fileName с фильтром подстановочных знаков.

Примечание.

Если вы использовали свойство fileFilter для фильтрации файлов, оно по-прежнему поддерживается без изменений, а вам предлагается далее использовать новую возможность фильтрации, добавленную к fileName.

Пример:

{
    "name": "FTPDataset",
    "properties": {
        "type": "FileShare",
        "linkedServiceName":{
            "referenceName": "<FTP linked service name>",
            "type": "LinkedServiceReference"
        },
        "typeProperties": {
            "folderPath": "folder/subfolder/",
            "fileName": "myfile.csv.gz",
            "format": {
                "type": "TextFormat",
                "columnDelimiter": ",",
                "rowDelimiter": "\n"
            },
            "compression": {
                "type": "GZip",
                "level": "Optimal"
            }
        }
    }
}

Устаревшая модель источника действия копирования

Свойство Описание: Обязательное поле
type Свойство type источника действия копирования должно иметь значение FileSystemSource. Да
recursive Указывает, следует ли читать данные рекурсивно из вложенных папок или только из указанной папки. Обратите внимание, что если для свойства recursive задано значение true, а приемником является файловое хранилище, в приемнике не будут создаваться пустые папки и вложенные папки.
Допустимые значения: true (по умолчанию), false.
No
maxConcurrentConnections Верхний предел одновременных подключений, установленных для хранилища данных при выполнении действия. Указывайте значение только при необходимости ограничить количество одновременных подключений. No

Пример:

"activities":[
    {
        "name": "CopyFromFTP",
        "type": "Copy",
        "inputs": [
            {
                "referenceName": "<FTP input dataset name>",
                "type": "DatasetReference"
            }
        ],
        "outputs": [
            {
                "referenceName": "<output dataset name>",
                "type": "DatasetReference"
            }
        ],
        "typeProperties": {
            "source": {
                "type": "FileSystemSource",
                "recursive": true
            },
            "sink": {
                "type": "<sink type>"
            }
        }
    }
]

Список хранилищ данных, которые поддерживаются в качестве источников и приемников для действия Copy, приведен в таблице Поддерживаемые хранилища данных и форматы.