使用 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 之一:
使用以下步骤在 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 源支持的属性列表。
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 活动。
若要了解有关属性的详细信息,请查看 GetMetadata 活动
若要详细了解这些属性,请查看 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>"
}
}
}
]
有关复制活动支持作为源和接收器的数据存储的列表,请参阅支持的数据存储。