使用 Azure 数据工厂或 Synapse Analytics 从 FTP 服务器复制数据
适用于: Azure 数据工厂 Azure Synapse Analytics
本文概述了如何从 FTP 服务器复制数据。 有关详细信息,请阅读 Azure 数据工厂和 Synapse Analytics 的简介文章。
支持的功能
此 FTP 连接器支持以下功能:
支持的功能 | IR |
---|---|
复制活动(源/-) | ① ② |
Lookup 活动 | ① ② |
GetMetadata 活动 | ① ② |
Delete 活动 | ① ② |
① Azure 集成运行时 ② 自承载集成运行时
具体而言,此 FTP 连接器支持:
- 使用 Basic 或 Anonymous 身份验证复制文件。
- 按原样复制文件,或者使用支持的文件格式和压缩编解码器分析文件。
FTP 连接器支持以被动模式运行的 FTP 服务器。 不支持主动模式。
先决条件
如果数据存储位于本地网络、Azure 虚拟网络或 Amazon Virtual Private Cloud 内部,则需要配置自承载集成运行时才能连接到该数据存储。
如果数据存储是托管的云数据服务,则可以使用 Azure Integration Runtime。 如果访问范围限制为防火墙规则中允许的 IP,你可以选择将 Azure Integration Runtime IP 添加到允许列表。
此外,还可以使用 Azure 数据工厂中的托管虚拟网络集成运行时功能访问本地网络,而无需安装和配置自承载集成运行时。
要详细了解网络安全机制和数据工厂支持的选项,请参阅数据访问策略。
入门
若要使用管道执行复制活动,可以使用以下工具或 SDK 之一:
使用 UI 创建一个到 FTP 服务器的链接服务
使用以下步骤在 Azure 门户 UI 中创建一个到 FTP 服务器的链接服务。
浏览到 Azure 数据工厂或 Synapse 工作区中的“管理”选项卡并选择“链接服务”,然后单击“新建”:
搜索 FTP 并选择 FTP 连接器。
配置服务详细信息、测试连接并创建新的链接服务。
连接器配置详细信息
以下部分提供了有关各属性的详细信息,这些属性用于定义特定于 FTP 的实体。
链接服务属性
FTP 链接服务支持以下属性:
属性 | 描述 | 必需 |
---|---|---|
type | type 属性必须设置为:FtpServer。 | 是 |
host | 指定 FTP 服务器的名称或 IP 地址。 | 是 |
port | 指定 FTP 服务器侦听的端口。 允许的值是:整数,默认值是 21。 |
否 |
enableSsl | 指定是否通过 SSL/TLS 通道使用 FTP。 允许的值是:true(默认)、false。 |
否 |
enableServerCertificateValidation | 指定在通过 SSL/TLS 通道使用 FTP 时,是否要启用服务器 TLS/SSL 证书验证。 允许的值是:true(默认)、false。 |
否 |
authenticationType | 指定身份验证类型。 允许值包括:Basic、Anonymous |
是 |
userName | 指定有权访问 FTP 服务器的用户。 | 否 |
password | 指定用户 (userName) 的密码。 将此字段标记为 SecureString 以安全地存储它,或引用 Azure Key Vault 中存储的机密。 | 否 |
connectVia | 用于连接到数据存储的集成运行时。 在先决条件部分了解更多信息。 如果未指定,则使用默认 Azure Integration Runtime。 | 否 |
注意
FTP 连接器支持在不使用加密或使用显式 SSL/TLS 加密的情况下访问 FTP 服务器;不支持隐式 SSL/TLS 加密。
示例 1:使用 Anonymous 身份验证
{
"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:使用 Basic 身份验证
{
"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 数据工厂支持以下文件格式。 请参阅每一篇介绍基于格式的设置的文章。
在基于格式的数据集中的 location
设置下,FTP 支持以下属性:
属性 | 描述 | 必需 |
---|---|---|
type | 数据集中 location 下的 type 属性必须设置为 FtpServerLocation。 |
是 |
folderPath | 文件夹的路径。 如果要使用通配符筛选文件夹,请跳过此设置并在活动源设置中指定。 | 否 |
fileName | 给定 folderPath 下的文件名。 如果要使用通配符筛选文件,请跳过此设置并在活动源设置中指定。 | 否 |
示例:
{
"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"
}
}
}
复制活动属性
有关可用于定义活动的各部分和属性的完整列表,请参阅管道一文。 本部分提供 FTP 源支持的属性列表。
FTP 作为源
Azure 数据工厂支持以下文件格式。 请参阅每一篇介绍基于格式的设置的文章。
在基于格式的复制源中的 storeSettings
设置下,FTP 支持以下属性:
属性 | 描述 | 必需 |
---|---|---|
type | storeSettings 下的 type 属性必须设置为 FtpReadSettings。 |
是 |
找到要复制的文件: | ||
选项 1:静态路径 |
从数据集中指定的给定文件夹/文件路径复制。 若要复制文件夹中的所有文件,请另外将 wildcardFileName 指定为 * 。 |
|
选项 2:通配符 - wildcardFolderPath |
带有通配符的文件夹路径,用于筛选源文件夹。 允许的通配符为: * (匹配零个或更多个字符)和 ? (匹配零个或单个字符);如果实际文件夹名称中包含通配符或此转义字符,请使用 ^ 进行转义。 请参阅文件夹和文件筛选器示例中的更多示例。 |
否 |
选项 2:通配符 - wildcardFileName |
给定 folderPath/wildcardFolderPath 下带有通配符的文件名,用于筛选源文件。 允许的通配符为: * (匹配零个或更多个字符)和 ? (匹配零个或单个字符);如果实际文件名中包含通配符或此转义字符,请使用 ^ 进行转义。 请参阅文件夹和文件筛选器示例中的更多示例。 |
是 |
选项 3:文件列表 - fileListPath |
指明复制给定文件集。 指向包含要复制的文件列表的文本文件,每行一个文件(即数据集中所配置路径的相对路径)。 使用此选项时,请不要在数据集中指定文件名。 请参阅文件列表示例中的更多示例。 |
否 |
其他设置: | ||
recursive | 指示是要从子文件夹中以递归方式读取数据,还是只从指定的文件夹中读取数据。 请注意,当 recursive 设置为 true 且接收器是基于文件的存储时,将不会在接收器上复制或创建空的文件夹或子文件夹。 允许的值为 true(默认值)和 false。 如果配置 fileListPath ,则此属性不适用。 |
否 |
deleteFilesAfterCompletion | 指示是否会在二进制文件成功移到目标存储后将其从源存储中删除。 文件删除按文件进行。因此,当复制活动失败时,你会看到一些文件已经复制到目标并从源中删除,而另一些文件仍保留在源存储中。 此属性仅在二进制文件复制方案中有效。 默认值:false。 |
否 |
useBinaryTransfer | 指定是否使用二进制传输模式。 这些值在二进制模式下为 true(默认),在 ASCII 模式下为 false。 | 否 |
enablePartitionDiscovery | 对于已分区的文件,请指定是否从文件路径分析分区,并将它们添加为附加的源列。 允许的值为 false(默认)和 true 。 |
否 |
partitionRootPath | 启用分区发现时,请指定绝对根路径,以便将已分区文件夹读取为数据列。 如果未指定,默认情况下, - 在数据集或源的文件列表中使用文件路径时,分区根路径是在数据集中配置的路径。 - 使用通配符文件夹筛选器时,分区根路径是第一个通配符前的子路径。 例如,假设你将数据集中的路径配置为“root/folder/year=2020/month=08/day=27”: - 如果将分区根路径指定为“root/folder/year=2020”,则除了文件内的列外,复制活动还将生成另外两个列 month 和 day ,其值分别为“08”和“27”。- 如果未指定分区根路径,则不会生成额外的列。 |
否 |
maxConcurrentConnections | 活动运行期间与数据存储建立的并发连接的上限。 仅在要限制并发连接时指定一个值。 | 否 |
disableChunking | 在通过 FTP 复制数据时,服务会首先尝试获取文件长度,然后将文件分为多个部分以并行方式读取。 指定 FTP 服务器是支持获取文件长度还是要从某个偏移量读取。 允许的值为 false(默认)和 true 。 |
否 |
示例:
"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 | FolderA File1.csv File2.json Subfolder1 File3.csv File4.json File5.csv AnotherFolderB File6.csv |
Folder* |
(为空,使用默认值) | true | FolderA File1.csv File2.json Subfolder1 File3.csv File4.json File5.csv AnotherFolderB File6.csv |
Folder* |
*.csv |
false | FolderA File1.csv File2.json Subfolder1 File3.csv File4.json File5.csv AnotherFolderB File6.csv |
Folder* |
*.csv |
是 | FolderA File1.csv File2.json Subfolder1 File3.csv File4.json File5.csv AnotherFolderB File6.csv |
文件列表示例
本部分介绍了在复制活动源中使用文件列表路径时的结果行为。
假设有以下源文件夹结构,并且要复制加粗显示的文件:
示例源结构 | FileListToCopy.txt 中的内容 | 配置 |
---|---|---|
root FolderA File1.csv File2.json Subfolder1 File3.csv File4.json File5.csv 元数据 FileListToCopy.txt |
File1.csv Subfolder1/File3.csv Subfolder1/File5.csv |
在数据集中: - 文件夹路径: root/FolderA 在复制活动源中: - 文件列表路径: root/Metadata/FileListToCopy.txt 文件列表路径指向同一数据存储中的文本文件,其中包含要复制的文件列表,每行一个文件,以及在数据集中配置的路径的相对路径。 |
Lookup 活动属性
若要了解有关属性的详细信息,请查看 Lookup 活动。
GetMetadata 活动属性
若要了解有关属性的详细信息,请查看 GetMetadata 活动
Delete 活动属性
若要详细了解这些属性,请查看 Delete 活动
旧模型
注意
仍按原样支持以下模型,以实现向后兼容性。 建议使用上面几个部分中提到的新模型,并且创作 UI 已切换为生成新模型。
旧数据集模型
属性 | 描述 | 必需 |
---|---|---|
type | 数据集的 type 属性必须设置为:FileShare | 是 |
folderPath | 文件夹路径。 支持通配符筛选器,允许的通配符为:* (匹配零个或更多个字符)和 ? (匹配零个或单个字符);如果实际文件夹名中包含通配符或此转义字符,请使用 ^ 进行转义。 示例:“rootfolder/subfolder/”,请参阅文件夹和文件筛选器示例中的更多示例。 |
是 |
fileName | 指定“folderPath”下的文件的“名称或通配符筛选器”。 如果没有为此属性指定任何值,则数据集会指向文件夹中的所有文件。 对于筛选器,允许的通配符为: * (匹配零个或更多字符)和 ? (匹配零个或单个字符)。- 示例 1: "fileName": "*.csv" - 示例 2: "fileName": "???20180427.txt" 如果实际文件名内具有通配符或此转义符,请使用 ^ 进行转义。 |
否 |
format | 如果想要在基于文件的存储之间按原样复制文件(二进制副本),可以在输入和输出数据集定义中跳过格式节。 若要分析具有特定格式的文件,以下是受支持的文件格式类型:TextFormat、JsonFormat、AvroFormat、OrcFormat、ParquetFormat 。 请将格式中的“type”属性设置为上述值之一。 有关详细信息,请参阅文本格式、Json 格式、Avro 格式、Orc 格式和 Parquet 格式部分。 |
否(仅适用于二进制复制方案) |
compression | 指定数据的压缩类型和级别。 有关详细信息,请参阅受支持的文件格式和压缩编解码器。 支持的类型包括:GZip、Deflate、BZip2 和 ZipDeflate。 支持的级别为:“最佳”和“最快” 。 |
否 |
useBinaryTransfer | 指定是否使用二进制传输模式。 这些值在二进制模式下为 true(默认),在 ASCII 模式下为 false。 | 否 |
提示
如需复制文件夹下的所有文件,请仅指定 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 | 复制活动 source 的 type 属性必须设置为:FileSystemSource | 是 |
recursive | 指示是要从子文件夹中以递归方式读取数据,还是只从指定的文件夹中读取数据。 当 recursive 设置为 true 且接收器是基于文件的存储时,将不会在接收器上复制/创建空的文件夹/子文件夹。 允许的值为:true(默认)、false |
否 |
maxConcurrentConnections | 活动运行期间与数据存储建立的并发连接的上限。 仅在要限制并发连接时指定一个值。 | 否 |
示例:
"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>"
}
}
}
]
相关内容
有关复制活动支持作为源和接收器的数据存储的列表,请参阅支持的数据存储。