Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
适用于:
Azure 数据工厂
Azure Synapse Analytics
本文概述了如何使用Azure 数据工厂和Azure Synapse管道中的复制活动从/向Azure Blob 存储复制数据。 它还介绍如何使用数据流活动转换Azure Blob 存储中的数据。 若要了解详细信息,请阅读 Azure 数据工厂 和 Azure Synapse Analytics 简介文章。
提示
若要了解数据湖或数据仓库的迁移方案,请参阅文章将数据从数据湖或数据仓库转换为 Azure。
支持的功能
以下功能支持此Azure Blob 存储连接器:
| 支持的功能 | IR | 托管专用终结点 |
|---|---|---|
| 复制活动 (源/接收器) | (1) (2) | ✓ 排除掉存储帐户 V1 |
| 映射数据流(源/接收器) | ① | ✓ 排除掉存储帐户 V1 |
| 查找活动 | (1) (2) | ✓ 排除掉存储帐户 V1 |
| GetMetadata 活动 | (1) (2) | ✓ 排除掉存储帐户 V1 |
| 删除活动 | (1) (2) | ✓ 排除掉存储帐户 V1 |
(1) Azure集成运行时 (2) 自承载集成运行时
对于复制活动,此 Blob 存储连接器支持:
- 在常规用途的 Azure 存储帐户和热/冷 Blob 存储之间复制 Blob。
- 使用帐户密钥、服务共享访问签名(SAS)、服务主体或托管标识复制 blob,进行 Azure 资源身份验证。
- 从块 Blob、追加 Blob 或页 Blob 中复制数据,并仅将数据复制到块 Blob。
- 按原样复制 Blob,或者使用支持的文件格式和压缩编解码器分析或生成 Blob。
- 在复制期间保留文件元数据。
开始
若要使用管道执行复制活动,可以使用以下工具或 SDK 之一:
使用 UI 创建Azure Blob 存储链接服务
使用以下步骤在Azure门户 UI 中创建Azure Blob 存储链接服务。
浏览到Azure 数据工厂或 Synapse 工作区中的“管理”选项卡,然后选择“链接服务”,然后选择“新建”
搜索 blob 并选择Azure Blob 存储连接器。
配置服务详细信息、测试连接并创建新的链接服务。
连接器配置详细信息
以下部分详细介绍了用于定义特定于 Blob 存储的数据工厂和 Synapse 管道实体的属性。
链接的服务属性
此 Blob 存储连接器支持以下身份验证类型。 有关详细信息,请参阅相应部分。
注意
- 如果要使用 Azure 集成运行时,通过应用在 Azure 存储防火墙上启用的 Allow trusted Microsoft 服务 to access this storage account 选项来连接到 Blob 存储,则必须使用 托管标识身份验证。 有关Azure 存储防火墙设置的详细信息,请参阅 Azure 存储配置防火墙和虚拟网络。
- 使用 PolyBase 或 COPY 语句将数据加载到 Azure Synapse Analytics 时,如果您的源 Blob 存储或暂存 Blob 存储配置了 Azure 虚拟网络终结点,则必须按照 Azure Synapse 的要求使用托管标识进行身份验证。 请参阅托管标识身份验证部分,了解更多的配置先决条件。
注意
Azure HDInsight和Azure 机器学习活动仅支持使用Azure Blob 存储帐户密钥的身份验证。
匿名身份验证
Azure 数据工厂或 Synapse 管道中的存储帐户密钥身份验证支持以下属性:
| 属性 | 描述 | 必填 |
|---|---|---|
| 类型 |
type 属性必须设置为 AzureBlobStorage(建议)或 AzureStorage(请查看以下注释)。 |
是 |
| containerUri | 指定启用了匿名读取访问权限的 Azure Blob 容器 URI,请使用格式https://<AccountName>.blob.core.chinacloudapi.cn/<ContainerName>,并参考 配置容器和 blob 的匿名公共读取访问权限 |
是 |
| connectVia | 用于连接到数据存储的集成运行时。 可以使用Azure集成运行时或自承载集成运行时(如果数据存储位于专用网络中)。 如果未指定此属性,服务将使用默认Azure集成运行时。 | 否 |
示例:
{
"name": "AzureBlobStorageAnonymous",
"properties": {
"annotations": [],
"type": "AzureBlobStorage",
"typeProperties": {
"containerUri": "https://<accountname>.blob.core.chinacloudapi.cn/<containername>",
"authenticationType": "Anonymous"
},
"connectVia": {
"referenceName": "<name of Integration Runtime>",
"type": "IntegrationRuntimeReference"
}
}
}
UI 示例:
UI 体验如下图中所述。 此示例使用Azure打开的数据集作为源。
帐户密钥身份验证
Azure 数据工厂或 Synapse 管道中的存储帐户密钥身份验证支持以下属性:
| 属性 | 描述 | 必填 |
|---|---|---|
| 类型 |
type 属性必须设置为 AzureBlobStorage(建议)或 AzureStorage(请查看以下注释)。 |
是 |
| connectionString | 为 connectionString 属性指定连接到存储所需的信息。 还可以将帐户密钥放在Azure 密钥保管库中,并从连接字符串中拉取 accountKey 配置。 有关详细信息,请参阅以下示例以及文章《将凭据存储在 Azure 密钥保管库 中》。 |
是 |
| connectVia | 用于连接到数据存储的集成运行时。 可以使用Azure集成运行时或自承载集成运行时(如果数据存储位于专用网络中)。 如果未指定此属性,服务将使用默认Azure集成运行时。 | 否 |
注意
使用帐户密钥身份验证时,不支持次要 Blob 服务终结点。 可以使用其他身份验证类型。
注意
如果您正在使用 AzureStorage 类型的链接服务,它仍将在原有状态下受到支持。 但是,建议今后使用这个新的 AzureBlobStorage 链接服务类型。
示例:
{
"name": "AzureBlobStorageLinkedService",
"properties": {
"type": "AzureBlobStorage",
"typeProperties": {
"connectionString": "DefaultEndpointsProtocol=https;AccountName=<accountname>;AccountKey=<accountkey>;EndpointSuffix=core.chinacloudapi.cn"
},
"connectVia": {
"referenceName": "<name of Integration Runtime>",
"type": "IntegrationRuntimeReference"
}
}
}
Example:将帐户密钥存储在 Azure 密钥保管库
{
"name": "AzureBlobStorageLinkedService",
"properties": {
"type": "AzureBlobStorage",
"typeProperties": {
"connectionString": "DefaultEndpointsProtocol=https;AccountName=<accountname>;EndpointSuffix=core.chinacloudapi.cn",
"accountKey": {
"type": "AzureKeyVaultSecret",
"store": {
"referenceName": "<Azure Key Vault linked service name>",
"type": "LinkedServiceReference"
},
"secretName": "<secretName>"
}
},
"connectVia": {
"referenceName": "<name of Integration Runtime>",
"type": "IntegrationRuntimeReference"
}
}
}
共享访问签名身份验证
共享访问签名对存储帐户中的资源提供委托访问。 使用共享访问签名可以在指定的时间内授予客户端对存储帐户中对象的有限访问权限。
无需共享帐户访问密钥。 共享访问签名是一个 URI,在其查询参数中包含对存储资源已验证访问所需的所有信息。 若要使用共享访问签名访问存储资源,客户端只需将共享访问签名传入到相应的构造函数或方法。
有关共享访问签名的详细信息,请参阅共享访问签名:了解共享访问签名模型。
注意
- 该服务现在支持服务共享访问签名和帐户共享访问签名 。 有关共享访问签名的详细信息,请参阅 使用共享访问签名限制对 Azure 存储资源的访问。
- 在稍后的数据集配置中,文件夹路径是从容器级别开始的绝对路径。 你需要配置一个与 SAS URI 中路径对齐的路径。
以下属性支持使用共享访问签名身份验证:
| 属性 | 描述 | 必填 |
|---|---|---|
| 类型 |
type 属性必须设置为 AzureBlobStorage(建议)或 AzureStorage(请查看以下注释)。 |
是 |
| sasUri | 指定存储资源(例如 Blob 或容器)的共享访问签名 URI。 将此字段标记为 SecureString 以安全存储它。 还可以将 SAS 令牌置于Azure 密钥保管库,以使用自动轮换并删除令牌部分。 有关详细信息,请参阅以下示例和 Azure 密钥保管库 中的存储凭据。 |
是 |
| connectVia | 用于连接到数据存储的集成运行时。 可以使用Azure集成运行时或自承载集成运行时(如果数据存储位于专用网络中)。 如果未指定此属性,服务将使用默认Azure集成运行时。 | 否 |
注意
如果您正在使用 AzureStorage 类型的链接服务,它仍将在原有状态下受到支持。 但是,建议今后使用这个新的 AzureBlobStorage 链接服务类型。
示例:
{
"name": "AzureBlobStorageLinkedService",
"properties": {
"type": "AzureBlobStorage",
"typeProperties": {
"sasUri": {
"type": "SecureString",
"value": "<SAS URI of the Azure Storage resource e.g. https://<accountname>.blob.core.chinacloudapi.cn/?sv=<storage version>&st=<start time>&se=<expire time>&sr=<resource>&sp=<permissions>&sip=<ip range>&spr=<protocol>&sig=<signature>>"
}
},
"connectVia": {
"referenceName": "<name of Integration Runtime>",
"type": "IntegrationRuntimeReference"
}
}
}
Example:将帐户密钥存储在 Azure 密钥保管库
{
"name": "AzureBlobStorageLinkedService",
"properties": {
"type": "AzureBlobStorage",
"typeProperties": {
"sasUri": {
"type": "SecureString",
"value": "<SAS URI of the Azure Storage resource without token e.g. https://<accountname>.blob.core.chinacloudapi.cn/>"
},
"sasToken": {
"type": "AzureKeyVaultSecret",
"store": {
"referenceName": "<Azure Key Vault linked service name>",
"type": "LinkedServiceReference"
},
"secretName": "<secretName with value of SAS token e.g. ?sv=<storage version>&st=<start time>&se=<expire time>&sr=<resource>&sp=<permissions>&sip=<ip range>&spr=<protocol>&sig=<signature>>"
}
},
"connectVia": {
"referenceName": "<name of Integration Runtime>",
"type": "IntegrationRuntimeReference"
}
}
}
在创建共享访问签名 URI 时,请注意以下几点:
- 根据链接服务(读取、写入、读/写)的用法,设置针对对象的适当读/写权限。
- 根据需要设置“到期时间”。 确保存储对象的访问权限不会在管道的活动期限内过期。
- 应该根据需要在正确的容器或 Blob 中创建 URI。 数据工厂或 Synapse 管道可以使用 Blob 的共享访问签名 URI 来访问该特定的 Blob。 数据工厂或 Synapse 管道可以通过 Blob 存储容器的共享访问签名 URI 来迭代该容器中的 blob。 以后若要提供更多/更少对象的访问权限或需要更新共享访问签名 URI,请记得使用新 URI 更新链接服务。
服务主体身份验证
有关Azure 存储服务主体身份验证的一般信息,请参阅 Authenticate access to Azure 存储 using Microsoft Entra ID。
若要使用服务主体身份验证,请执行以下步骤:
将应用程序注册到Microsoft 标识平台。 若要了解如何操作,请参阅 Quickstart:向 Microsoft 标识平台 注册应用程序。 记下以下值,这些值用于定义链接服务:
- 应用程序 ID
- 应用程序密钥
- 租户 ID
在Azure Blob 存储中授予服务主体适当的权限。 有关角色的详细信息,请参阅 使用 Azure 门户分配 Azure 角色以访问 blob 和队列数据。
- 作为来源,在“访问控制 (IAM)”中至少授予“存储 Blob 数据读取者”角色。
- 作为 接收器,在“访问控制 (IAM)”中至少授予“Storage Blob Data Contributor (存储 Blob 数据参与者)”角色。
Azure Blob 存储链接服务支持这些属性:
| 属性 | 描述 | 必填 |
|---|---|---|
| 类型 | type 属性必须设置为 AzureBlobStorage。 | 是 |
| serviceEndpoint | 使用 https://<accountName>.blob.core.chinacloudapi.cn/ 模式指定Azure Blob 存储服务终结点。 |
是 |
| 账户类型 | 指定存储帐户的种类。 允许值包括:Storage(常规用途 v1)、StorageV2(常规用途 v2)、BlobStorage 或 BlockBlobStorage 。 在数据流中使用 Azure Blob 链接服务时,当帐户类型为空或“存储”时,不支持托管标识或服务主体身份验证。 请指定正确的帐户类型,选择一种不同的身份验证,或者将你的存储帐户升级到常规用途 v2。 |
否 |
| servicePrincipalId | 指定应用程序的客户端 ID。 | 是 |
| 服务主体凭证类型 | 要用于服务主体身份验证的凭据类型。 允许的值为“ServicePrincipalKey”和“ServicePrincipalCert”。 | 是 |
| servicePrincipalCredential | 服务主体凭证。 使用 ServicePrincipalKey 作为凭据类型时,请指定应用程序的密钥。 将此字段标记为 SecureString 以安全地存储它,或引用存储在 Azure 密钥保管库 中的机密。 使用 ServicePrincipalCert 作为凭据时,请引用 Azure 密钥保管库 中的证书,并确保证书内容类型为 PKCS #12。 |
是 |
| 租户 | 请指定您的应用程序所驻留的租户信息(域名或租户 ID)。 通过将鼠标悬停在Azure门户的右上角来检索它。 | 是 |
| azureCloudType | 对于服务主体身份验证,请指定注册Microsoft Entra应用程序的Azure云环境类型。 允许的值为“AzureChina”。 默认情况下,使用数据工厂或 Synapse 管道的云环境。 |
否 |
| connectVia | 用于连接到数据存储的集成运行时。 可以使用Azure集成运行时或自承载集成运行时(如果数据存储位于专用网络中)。 如果未指定此属性,服务将使用默认Azure集成运行时。 | 否 |
注意
- 如果 blob 帐户启用 soft delete,则数据流不支持服务主体身份验证。
- 如果使用数据流通过专用终结点访问 Blob 存储,请注意使用服务主体身份验证时,数据流连接到 ADLS Gen2 终结点而不是 Blob 终结点。 确保在数据工厂或 Synapse 工作区中创建相应的专用终结点,以启用访问权限。
注意
服务主体身份验证仅受“AzureBlobStorage”类型的链接服务支持,而不受以前的“AzureStorage”类型的链接服务支持。
示例:
{
"name": "AzureBlobStorageLinkedService",
"properties": {
"type": "AzureBlobStorage",
"typeProperties": {
"serviceEndpoint": "https://<accountName>.blob.core.chinacloudapi.cn/",
"accountKind": "StorageV2",
"servicePrincipalId": "<service principal id>",
"servicePrincipalKey": {
"type": "SecureString",
"value": "<service principal key>"
},
"tenant": "<tenant info, e.g. microsoft.partner.onmschina.cn>"
},
"connectVia": {
"referenceName": "<name of Integration Runtime>",
"type": "IntegrationRuntimeReference"
}
}
}
系统分配的托管身份验证
数据工厂或 Synapse 管道可与用于 Azure 资源的系统分配的托管标识相关联,该标识表示该资源用于向其他 Azure 服务进行身份验证。 可以像使用自己的服务主体一样,直接使用此系统分配的托管标识进行 Blob 存储身份验证。 这个指定的资源可通过此方法访问和复制 Blob 存储中的数据或将数据复制到其中。 若要了解有关Azure资源的托管标识的详细信息,请参阅 Azure 资源的托管标识
有关 Azure 存储身份验证的一般信息,请参阅 使用 Microsoft Entra ID 验证对 Azure 存储的访问。 若要使用托管标识进行Azure资源身份验证,请执行以下步骤:
检索系统分配的托管标识信息,方法是复制随工厂或 Synapse 工作区生成的系统分配的托管标识对象 ID 的值。
在 Azure Blob 存储 中授予托管身份权限。 有关角色的详细信息,请参阅 使用 Azure 门户分配 Azure 角色以访问 blob 和队列数据。
- 作为来源,在“访问控制 (IAM)”中至少授予“存储 Blob 数据读取者”角色。
- 作为 接收器,在“访问控制 (IAM)”中至少授予“Storage Blob Data Contributor (存储 Blob 数据参与者)”角色。
Azure Blob 存储链接服务支持这些属性:
| 属性 | 描述 | 必填 |
|---|---|---|
| 类型 | type 属性必须设置为 AzureBlobStorage。 | 是 |
| serviceEndpoint | 使用 https://<accountName>.blob.core.chinacloudapi.cn/ 模式指定Azure Blob 存储服务终结点。 |
是 |
| 账户类型 | 指定存储帐户的种类。 允许值包括:Storage(常规用途 v1)、StorageV2(常规用途 v2)、BlobStorage 或 BlockBlobStorage 。 在数据流中使用 Azure Blob 链接服务时,当帐户类型为空或“存储”时,不支持托管标识或服务主体身份验证。 请指定正确的帐户类型,选择一种不同的身份验证,或者将你的存储帐户升级到常规用途 v2。 |
否 |
| connectVia | 用于连接到数据存储的集成运行时。 可以使用Azure集成运行时或自承载集成运行时(如果数据存储位于专用网络中)。 如果未指定此属性,服务将使用默认Azure集成运行时。 | 否 |
示例:
{
"name": "AzureBlobStorageLinkedService",
"properties": {
"type": "AzureBlobStorage",
"typeProperties": {
"serviceEndpoint": "https://<accountName>.blob.core.chinacloudapi.cn/",
"accountKind": "StorageV2"
},
"connectVia": {
"referenceName": "<name of Integration Runtime>",
"type": "IntegrationRuntimeReference"
}
}
}
用户指定的托管标识身份验证
可以为数据工厂分配一个或多个用户分配的托管标识。 可以将此用户分配的托管标识用于 Blob 存储身份验证,该身份验证允许访问和复制 Blob 存储中的数据或将数据复制到其中。 若要了解有关Azure资源的托管标识的详细信息,请参阅 Azure 资源的托管标识
有关 Azure 存储身份验证的一般信息,请参阅 使用 Microsoft Entra ID 对 Azure 存储进行身份验证。 若要使用用户分配的托管标识身份验证,请执行以下步骤:
创建一个或多个用户分配的托管标识并在Azure Blob 存储中授予权限。 有关角色的详细信息,请参阅 使用 Azure 门户分配 Azure 角色以访问 blob 和队列数据。
- 作为来源,在“访问控制 (IAM)”中至少授予“存储 Blob 数据读取者”角色。
- 作为 接收器,在“访问控制 (IAM)”中至少授予“Storage Blob Data Contributor (存储 Blob 数据参与者)”角色。
为数据工厂分配一个或多个用户分配的托管标识,并为每个用户分配的托管标识创建凭据。
Azure Blob 存储链接服务支持这些属性:
| 属性 | 描述 | 必填 |
|---|---|---|
| 类型 | type 属性必须设置为 AzureBlobStorage。 | 是 |
| serviceEndpoint | 使用 https://<accountName>.blob.core.chinacloudapi.cn/ 模式指定Azure Blob 存储服务终结点。 |
是 |
| 账户类型 | 指定存储帐户的种类。 允许值包括:Storage(常规用途 v1)、StorageV2(常规用途 v2)、BlobStorage 或 BlockBlobStorage 。 在数据流中使用 Azure Blob 链接服务时,当帐户类型为空或“存储”时,不支持托管标识或服务主体身份验证。 请指定正确的帐户类型,选择一种不同的身份验证,或者将你的存储帐户升级到常规用途 v2。 |
否 |
| 凭据 | 将用户分配的托管标识指定为凭据对象。 | 是 |
| connectVia | 用于连接到数据存储的集成运行时。 可以使用Azure集成运行时或自承载集成运行时(如果数据存储位于专用网络中)。 如果未指定此属性,服务将使用默认Azure集成运行时。 | 否 |
示例:
{
"name": "AzureBlobStorageLinkedService",
"properties": {
"type": "AzureBlobStorage",
"typeProperties": {
"serviceEndpoint": "https://<accountName>.blob.core.chinacloudapi.cn/",
"accountKind": "StorageV2",
"credential": {
"referenceName": "credential1",
"type": "CredentialReference"
}
},
"connectVia": {
"referenceName": "<name of Integration Runtime>",
"type": "IntegrationRuntimeReference"
}
}
}
重要
如果使用 PolyBase 或 COPY 语句将数据从 Blob 存储(作为源或暂存)加载到Azure Synapse Analytics,则对 Blob 存储使用托管标识身份验证时,请确保还遵循
注意
- 如果 blob 帐户启用 soft delete,则 数据流 不支持系统分配/用户分配的托管标识身份验证。
- 如果使用数据流通过专用终结点访问 Blob 存储,请注意在使用系统分配/用户分配的托管标识身份验证时,数据流连接到 ADLS Gen2 终结点而不是 Blob 终结点。 请确保在 ADF 中创建相应的专用终结点以启用访问权限。
注意
仅“AzureBlobStorage”类型的链接服务支持系统分配的/用户分配的托管标识身份验证,而以前的“AzureStorage”类型链接服务并不支持。
数据集属性
有关可用于定义数据集的各部分和属性的完整列表,请参阅数据集一文。
Azure 数据工厂支持以下文件格式。 请参阅每一篇介绍基于格式的设置的文章。
在基于格式的数据集中的 location 设置下,Azure Blob 存储支持以下属性:
| 属性 | 描述 | 必填 |
|---|---|---|
| 类型 | 数据集中位置的 type 属性必须设置为 AzureBlobStorageLocation。 | 是 |
| 容器 | Blob 容器。 | 是 |
| 文件夹路径 | 给定容器下的文件夹的路径。 如果要使用通配符来筛选文件夹,请跳过此设置并在活动源设置中进行相应的指定。 | 否 |
| 文件名 | 给定容器和文件夹路径下的文件名。 如果要使用通配符来筛选文件,请跳过此设置并在活动源设置中进行相应的指定。 | 否 |
示例:
{
"name": "DelimitedTextDataset",
"properties": {
"type": "DelimitedText",
"linkedServiceName": {
"referenceName": "<Azure Blob Storage linked service name>",
"type": "LinkedServiceReference"
},
"schema": [ < physical schema, optional, auto retrieved during authoring > ],
"typeProperties": {
"location": {
"type": "AzureBlobStorageLocation",
"container": "containername",
"folderPath": "folder/subfolder"
},
"columnDelimiter": ",",
"quoteChar": "\"",
"firstRowAsHeader": true,
"compressionCodec": "gzip"
}
}
}
复制活动 属性
有关可用于定义活动的各部分和属性的完整列表,请参阅管道一文。 本部分提供 Blob 存储源和接收器支持的属性的列表。
将 Blob 存储用作源类型
Azure 数据工厂支持以下文件格式。 请参阅每一篇介绍基于格式的设置的文章。
在基于格式的复制源中的 storeSettings 设置下,Azure Blob 存储支持以下属性:
| 属性 | 描述 | 必填 |
|---|---|---|
| 类型 |
type 属性在 storeSettings 下必须设置为 AzureBlobStorageReadSettings。 |
是 |
| 找到要复制的文件: | ||
| 选项 1:静态路径 |
从数据集中指定的给定容器或文件夹/文件路径复制。 若要复制容器或文件夹中的所有 Blob,请另外将 wildcardFileName 指定为 *。 |
|
| 选项 2:blob 前缀 - 前缀 |
在数据集中配置的给定容器下的 Blob 名称的前缀,用于筛选源 Blob。 名称以 container_in_dataset/this_prefix 开头的 Blob 会被选择。 它利用 Blob 存储的服务端筛选器。与通配符筛选器相比,该服务端筛选器可提供更好的性能。在使用前缀并选择复制到基于文件的存储设备并保留层次结构时,请注意,前缀中最后一个“/”后的子路径会被保留。 例如,如果在源为 container/folder/subfolder/file.txt 的情况下将前缀配置为 folder/sub,则保留的文件路径为 subfolder/file.txt。 |
否 |
| 选项 3:通配符 - wildcardFolderPath |
数据集中配置的给定容器下包含通配符的文件夹路径,用于筛选源文件夹。 允许的通配符为: *(匹配零个或更多字符)和 ?(匹配零个或单个字符)。 如果文件夹名内包含通配符或此转义字符,请使用 ^ 进行转义。 请参阅文件夹和文件筛选器示例中的更多示例。 |
否 |
| 选项 3:通配符 - 通配符文件名 |
给定容器和文件夹路径(或通配符文件夹路径)下包含通配符的文件名,用于筛选源文件。 允许的通配符为: *(匹配零个或更多字符)和 ?(匹配零个或单个字符)。 如果文件名包含通配符或此转义字符,请使用 ^ 进行转义。 请参阅文件夹和文件筛选器示例中的更多示例。 |
是 |
| 选项 4:文件列表 - 文件列表路径 |
指明复制给定文件集。 指向包含要复制的文件列表的文本文件,每行一个文件(即数据集中所配置路径的相对路径)。 使用此选项时,请不要在数据集中指定文件名。 请参阅文件列表示例中的更多示例。 |
否 |
| 其他设置: | ||
| recursive | 指示是要从子文件夹中以递归方式读取数据,还是只从指定的文件夹中读取数据。 请注意,当递归设置为真且目标端是基于文件的存储时,空的文件夹或子文件夹不会在目标端被复制或创建。 允许的值为 true(默认值)和 false。 如果配置 fileListPath,则此属性不适用。 |
否 |
| deleteFilesAfterCompletion | 指示是否会在二进制文件成功移到目标存储后将其从源存储中删除。 文件删除以每文件为单位。 因此,当复制活动失败时,你会看到一些文件已经复制到目标并从源中删除,而另一些文件仍保留在源存储中。 此属性仅在二进制文件复制方案中有效。 默认值:false。 |
否 |
| 修改日期时间起始 | 文件根据“上次修改时间”属性进行筛选。 如果文件的上次修改时间大于或等于 modifiedDatetimeStart 并且小于 modifiedDatetimeEnd,则会选择这些文件。 该时间应用于 UTC 时区,格式为“2018-12-01T05:00:00Z”。 属性可以为 NULL,这意味着不会向数据集应用任何文件属性筛选器。 如果 modifiedDatetimeStart 具有日期/时间值,但 modifiedDatetimeEnd 为 NULL,则会选中“上次修改时间”属性大于或等于该日期/时间值的文件。 如果 modifiedDatetimeEnd 具有日期/时间值,但 modifiedDatetimeStart 为 NULL,则会选中“上次修改时间”属性小于该日期/时间值的文件。如果配置 fileListPath,则此属性不适用。 |
否 |
| .modifiedDatetimeEnd | 与前一个属性相同。 | 否 |
| enablePartitionDiscovery | 对于已分区的文件,请指定是否从文件路径分析分区,并将它们添加为附加的源列。 允许的值为 false(默认)和 true 。 |
否 |
| partitionRootPath | 启用分区发现时,请指定绝对根路径,以便将已分区文件夹读取为数据列。 如果未指定,则默认为 - 在数据集或源的文件列表中使用文件路径时,分区根路径是在数据集中配置的路径。 - 使用通配符文件夹筛选器时,分区根路径是第一个通配符前的子路径。 - 在使用前缀时,分区根路径是最后一个“/”前的子路径。 例如,假设你将数据集中的路径配置为“root/folder/year=2020/month=08/day=27”: - 如果将分区根路径指定为“root/folder/year=2020”,则除了文件内的列外,复制活动还将生成另外两个列 month 和 day,其值分别为“08”和“27”。- 如果未指定分区根路径,则不会生成额外的列。 |
否 |
| 最大并发连接数 (maxConcurrentConnections) | 活动运行期间与数据存储建立的并发连接的上限。 仅在要限制并发连接时指定一个值。 | 否 |
注意
对于 Parquet/带分隔符的文本格式,为了支持向后兼容,仍然支持下一部分中提到的复制活动源的 BlobSource 类型。 建议使用新模型,直到创作 UI 已切换为生成这些新类型为止。
示例:
"activities":[
{
"name": "CopyFromBlob",
"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": "AzureBlobStorageReadSettings",
"recursive": true,
"wildcardFolderPath": "myfolder*A",
"wildcardFileName": "*.csv"
}
},
"sink": {
"type": "<sink type>"
}
}
}
]
注意
当通过 UI 执行容器列表操作时,不会显示为存储帐户启用存储分析时自动创建的 $logs 容器。 必须直接将文件路径提供给数据工厂或 Synapse 管道以便处理$logs容器中的文件。
用作接收器类型的 Blob 存储
Azure 数据工厂支持以下文件格式。 请参阅每一篇介绍基于格式的设置的文章。
在基于格式的复制接收器中的 storeSettings 设置下,Azure Blob 存储支持以下属性:
| 属性 | 描述 | 必填 |
|---|---|---|
| 类型 |
type 下的 storeSettings 属性必须设置为 AzureBlobStorageWriteSettings。 |
是 |
| copyBehavior | 定义以基于文件的数据存储中的文件为源时的复制行为。 允许值包括: - PreserveHierarchy(默认):将文件层次结构保留到目标文件夹中。 指向源文件夹的源文件相对路径与指向目标文件夹的目标文件相对路径相同。 - FlattenHierarchy:源文件夹中的所有文件都位于目标文件夹的第一级中。 目标文件具有自动生成的名称。 - MergeFiles:将源文件夹中的所有文件合并到一个文件中。 如果指定了文件名或 Blob 名称,则合并文件的名称为指定名称。 否则,它是自动生成的文件名。 |
否 |
| blockSizeInMB(块大小,单位为MB) | 指定用于将数据写入块 Blob 的块大小(以 MB 为单位)。 了解更多关于Block Blobs的信息。 允许的值介于 4 MB 到 100 MB 之间。 默认情况下,该服务会自动根据源存储类型和数据确定块大小。 以非二进制格式复制到 Blob 存储中时,默认块大小为 100 MB,因此该存储(最多)可容纳 4.95 TB 的数据。 当数据不大时,它可能并非最优,特别是当你在网络连接不佳的情况下使用自承载集成运行时的时候,这会导致操作超时或性能问题。 可以显式指定块大小,同时确保 blockSizeInMB*50000 足够大,可以存储数据。 否则,复制活动运行将会失败。 |
否 |
| 最大并发连接数 (maxConcurrentConnections) | 活动运行期间与数据存储建立的并发连接的上限。 仅在要限制并发连接时指定一个值。 | 否 |
| 元数据 | 在复制到接收器时设置自定义元数据。
metadata 数组下的每个对象都表示一个额外的列。
name 定义元数据键名称,value 表示该键的数据值。 如果使用了保留属性功能,则指定的元数据会与源文件元数据联合,或者会被其覆盖。允许的数据值为: - $$LASTMODIFIED:保留变量指示存储源文件的上次修改时间。 仅适用于二进制格式的文件源。- 表达式 - 静态值 |
否 |
示例:
"activities":[
{
"name": "CopyFromBlob",
"type": "Copy",
"inputs": [
{
"referenceName": "<input dataset name>",
"type": "DatasetReference"
}
],
"outputs": [
{
"referenceName": "<Parquet output dataset name>",
"type": "DatasetReference"
}
],
"typeProperties": {
"source": {
"type": "<source type>"
},
"sink": {
"type": "ParquetSink",
"storeSettings":{
"type": "AzureBlobStorageWriteSettings",
"copyBehavior": "PreserveHierarchy",
"metadata": [
{
"name": "testKey1",
"value": "value1"
},
{
"name": "testKey2",
"value": "value2"
},
{
"name": "lastModifiedKey",
"value": "$$LASTMODIFIED"
}
]
}
}
}
}
]
文件夹和文件筛选器示例
本部分介绍使用通配符筛选器生成文件夹路径和文件名的行为。
| 文件夹路径 | 文件名 | recursive | 源文件夹结构和筛选器结果(用粗体表示的文件已检索) |
|---|---|---|---|
container/Folder* |
(为空,使用默认值) | false | 容器 FolderA File1.csv File2.json Subfolder1 File3.csv File4.json File5.csv AnotherFolderB File6.csv |
container/Folder* |
(为空,使用默认值) | true | 容器 FolderA File1.csv File2.json Subfolder1 File3.csv File4.json File5.csv AnotherFolderB File6.csv |
container/Folder* |
*.csv |
false | 容器 FolderA File1.csv File2.json Subfolder1 File3.csv File4.json File5.csv AnotherFolderB File6.csv |
container/Folder* |
*.csv |
true | 容器 FolderA File1.csv File2.json Subfolder1 File3.csv File4.json File5.csv AnotherFolderB File6.csv |
文件列表示例
本部分介绍在复制活动源中使用文件列表路径的结果行为。
假设有以下源文件夹结构,并且要复制以粗体显示的文件:
| 示例源结构 | FileListToCopy.txt 中的内容 | 配置 |
|---|---|---|
| 容器 FolderA File1.csv File2.json Subfolder1 File3.csv File4.json File5.csv 元数据 FileListToCopy.txt |
File1.csv Subfolder1/File3.csv Subfolder1/File5.csv |
在数据集中: - 容器: container- 文件夹路径: FolderA在复制活动源中: - 文件列表路径: container/Metadata/FileListToCopy.txt 文件列表路径指向同一数据存储中的一个文本文件,该文件包含要复制的文件列表。 它每行包含一个文件,其中包含数据集中配置的路径的相对路径。 |
一些递归和复制行为示例
此部分描述了在不同的 recursive 和 copyBehavior 值组合下,复制操作的结果行为。
| recursive | copyBehavior | 源文件夹结构 | 最终目标 |
|---|---|---|---|
| true | 保留层级 | Folder1 文件 1 文件 2 Subfolder1 File3 File4 File5 |
使用与源相同的结构创建目标文件夹 Folder1: Folder1 文件 1 文件 2 Subfolder1 File3 File4 File5 |
| true | 扁平化层次结构 | Folder1 文件 1 文件 2 Subfolder1 File3 File4 File5 |
使用以下结构创建目标文件夹 Folder1: Folder1 自动生成的 File1 名称 File2 的自动生成名称 自动生成的 File3 名称 File4 的自动生成的名称 自动生成的名称为 File5 |
| true | mergeFiles | Folder1 文件 1 文件 2 Subfolder1 File3 File4 File5 |
使用以下结构创建目标文件夹 Folder1: Folder1 File1 + File2 + File3 + File4 + File5 的内容将合并到一个文件中,且自动生成文件名。 |
| false | 保留层级 | Folder1 文件 1 文件 2 Subfolder1 File3 File4 File5 |
使用以下结构创建目标文件夹 Folder1: Folder1 文件 1 文件 2 Subfolder1 中的 File3、File4 和 File5 没有被检测到。 |
| false | 扁平化层次结构 | Folder1 文件 1 文件 2 Subfolder1 File3 File4 File5 |
使用以下结构创建目标文件夹 Folder1: Folder1 自动生成的 File1 名称 File2 的自动生成名称 Subfolder1 中的 File3、File4 和 File5 没有被检测到。 |
| false | mergeFiles | Folder1 文件 1 文件 2 Subfolder1 File3 File4 File5 |
使用以下结构创建目标文件夹 Folder1: Folder1 File1 + File2 的内容将合并到一个文件中,且自动生成文件名。 自动生成的 File1 名称 Subfolder1 中的 File3、File4 和 File5 没有被检测到。 |
在复制期间保留元数据
将文件从 Amazon S3、Azure Blob 存储或Azure Data Lake Storage Gen2复制到Azure Data Lake Storage Gen2或Azure Blob 存储时,可以选择保留文件元数据和数据。 从保留元数据中了解更多信息。
映射数据流属性
在映射数据流中转换数据时,可以按以下格式从Azure Blob 存储读取和写入文件:
该格式的特定设置可在其文档中找到。 有关详细信息,请参阅映射数据流中的源转换和映射数据流中的汇转换。
源转换
在源转换中,可以从容器、文件夹或Azure Blob 存储中的单个文件进行读取。 使用“源选项”选项卡,可以管理文件的读取方式。
通配符路径:如果使用通配符模式,则会指示服务在单个源转换中循环访问每个匹配的文件夹和文件。 这是在单个流中处理多个文件的有效方法。 使用将鼠标指针悬停在现有通配符模式上时出现的加号来添加多个通配符匹配模式。
从源容器中,选择与模式匹配的一系列文件。 数据集中只能指定容器。 因此,通配符路径也必须包含从根文件夹开始的文件夹路径。
通配符示例:
*表示任意字符集。**表示递归目录嵌套。?替换一个字符。[]匹配括号内的一个或多个字符。/data/sales/**/*.csv获取 /data/sales 下的所有 .csv 文件。/data/sales/20??/**/获取 20 世纪的所有文件。/data/sales/*/*/*.csv获取比 /data/sales 低两个级别的 .csv 文件。/data/sales/2004/*/12/[XY]1?.csv获取时间为 2004 年 12 月、以 X 或 Y 开头且以两位数为前缀的所有 .csv 文件。
分区根路径:如果文件源中存在 格式(例如 key=value)的分区文件夹,则可以向该分区文件夹树的顶层分配数据流中的列名称。
首先,设置一个通配符,用于包括属于分区文件夹以及要读取的叶文件的所有路径。
使用分区根路径 设置来定义文件夹结构的顶级是什么。 通过数据预览查看数据内容时会看到,该服务会添加在每个文件夹级别中找到的已解析的分区。
文件列表: 这是一个文件集。 创建一个文本文件,其中包含要处理的相对路径文件的列表。 指向此文本文件。
用于存储文件名的列: 将源文件的名称存储在数据的列中。 请在此处输入新列名称以存储文件名字符串。
完成后: 数据流运行后,可以选择不对源文件执行任何操作、删除源文件或移动源文件。 移动路径是相对路径。
要将源文件移到其他位置进行后期处理,请首先选择“移动”以执行文件操作。 然后,设置“源目录”。 如果未对路径使用任何通配符,则“从”设置中的文件夹将是与源文件夹相同的文件夹。
如果源路径包含通配符,则语法将如下所示:
/data/sales/20??/**/*.csv
可以将“源”指定为:
/data/sales
可以将“为”指定为:
/backup/priorSales
在此例中,源自 /data/sales 下的所有文件都将移动到 /backup/priorSales。
注意
只有在通过使用管道中的“执行数据流”活动的管道运行(包括管道调试或执行运行)启动数据流时,文件操作才会执行。 文件操作在调试模式下不在数据流中运行。
按上次修改时间筛选: 通过指定上次修改的日期范围,可以筛选要处理的文件。 所有日期/时间均采用 UTC 格式。
启用变更数据捕获:如果为 true,则只能从上次运行中获取新的或更改后的文件。 将始终从首次运行中获取完整快照数据的初始加载,然后仅在下次运行中捕获新的或更改后的文件。
接收器属性
在接收器转换中,可以写入Azure Blob 存储中的容器或文件夹。 使用“设置”选项卡,可以管理文件的写入方式。
清除文件夹: 确定在写入数据之前是否清除目标文件夹。
文件名选项: 确定目标文件在目标文件夹中的命名方式。 文件名选项有:
- 默认:允许 Spark 根据 PART 默认值为文件命名。
-
模式:输入一种模式,该模式枚举每个分区的输出文件。 例如,
loans[n].csv会创建loans1.csv、loans2.csv等等。 - 每个分区:为每个分区输入一个文件名。
- 作为列数据:将输出文件设置为某个列内的值。 此路径是数据集容器而非目标文件夹的相对路径。 如果数据集中有文件夹路径,则它将被重写。
- 输出到一个文件:将分区输出文件合并为一个命名的文件。 此路径是数据集文件夹的相对路径。 合并操作可能会因节点大小而失败。 对于大型数据集,不建议使用此选项。
全部引用: 确定是否将所有内容括在引号中。
Lookup 操作属性
若要了解有关属性的详细信息,请查看 Lookup 活动。
GetMetadata 活动属性
若要了解有关属性的详细信息,请查看 GetMetadata 活动。
删除活动属性
若要了解有关属性的详细信息,请查看删除活动。
遗留模型
注意
仍会按原样支持以下模型,以实现后向兼容性。 建议使用前面提到的新模型。 创作 UI 已切换为生成新模型。
旧数据集模型
| 属性 | 描述 | 必填 |
|---|---|---|
| 类型 | 数据集的type属性必须设置为AzureBlob。 |
是 |
| 文件夹路径 | 指向 Blob 存储中的容器和文件夹的路径。 路径支持通配符筛选器,但不包括容器名称。 允许的通配符为: *(匹配零个或更多字符)和 ?(匹配零个或单个字符)。 如果文件夹名内包含通配符或此转义字符,请使用 ^ 进行转义。 例如: myblobcontainer/myblobfolder/。 请参阅文件夹和文件筛选器示例中的更多示例。 |
对于复制或查找活动为“是”,对于 GetMetadata 活动为“否” |
| 文件名 | 指定 folderPath 值下 Blob 的名称或通配符筛选器。 如果没有为此属性指定任何值,则数据集会指向文件夹中的所有 Blob。 对于筛选器,允许的通配符为 *(匹配零个或零个以上的字符)和 ?(匹配零个或单个字符)。- 示例 1: "fileName": "*.csv"- 示例 2: "fileName": "???20180427.txt"如果文件名包含通配符或此转义字符,请使用 ^ 进行转义。如果未为输出数据集指定 fileName,并且在活动汇聚中未指定preserveHierarchy,复制活动会自动生成具有以下模式的 blob 名称:“Data.[活动运行 ID GUID]。[若已配置则为 FlattenHierarchy 的 GUID]。[若已配置则为格式]。[若已配置则为压缩]”。 例如:“Data.0a405f8a-93ff-4c6f-b3be-f69616f1df7a.txt.gz”。 如果使用表名称(而不是查询)从表格源进行复制,则名称模式为 [table name].[format].[compression if configured]。 例如:“MyTable.csv”。 |
否 |
| 修改日期时间起始 | 文件根据“上次修改时间”属性进行筛选。 如果文件的上次修改时间大于或等于 modifiedDatetimeStart 并且小于 modifiedDatetimeEnd,将选择这些文件。 该时间应用于 UTC 时区,格式为“2018-12-01T05:00:00Z”。 请注意,要对大量文件进行筛选时,启用此设置会影响数据移动的整体性能。 属性可以为 NULL,这意味着不会向数据集应用任何文件属性筛选器。 当 modifiedDatetimeStart 具有日期/时间值但 modifiedDatetimeEnd 为 NULL 时,将选择那些“上次修改属性”大于或等于该日期/时间值的文件。 当 modifiedDatetimeEnd 具有日期和时间值,但 modifiedDatetimeStart 等于 NULL 时,将选择“上次修改时间”属性小于该日期和时间值的文件。 |
否 |
| .modifiedDatetimeEnd | 文件根据“上次修改时间”属性进行筛选。 如果文件的上次修改时间大于或等于 modifiedDatetimeStart 并且小于 modifiedDatetimeEnd,将选择这些文件。 该时间应用于 UTC 时区,格式为“2018-12-01T05:00:00Z”。 请注意,要对大量文件进行筛选时,启用此设置会影响数据移动的整体性能。 属性可以为 NULL,这意味着不会向数据集应用任何文件属性筛选器。 当 modifiedDatetimeStart 具有日期/时间值但 modifiedDatetimeEnd 为 NULL 时,将选择那些“上次修改属性”大于或等于该日期/时间值的文件。 当 modifiedDatetimeEnd 具有日期和时间值,但 modifiedDatetimeStart 等于 NULL 时,将选择“上次修改时间”属性小于该日期和时间值的文件。 |
否 |
| 格式 | 若要在基于文件的存储之间按原样复制文件(二进制副本),可以在输入和输出数据集定义中跳过格式节。 若要分析或生成具有特定格式的文件,以下是受支持的文件格式类型:TextFormat、JsonFormat、AvroFormat、OrcFormat 和 ParquetFormat 。 请将 format 中的 type 属性设置为上述值之一。 有关详细信息,请参阅文本格式、JSON 格式、Avro 格式、Orc 格式和 Parquet 格式部分。 |
否(仅适用于二进制复制方案) |
| 压缩 | 指定数据的压缩类型和级别。 有关详细信息,请参阅受支持的文件格式和压缩编解码器。 支持的类型为 GZip、Deflate、BZip2 和 ZipDeflate。 支持的级别为“最佳”和“最快”。 |
否 |
提示
如需复制文件夹下的所有“blob”,请仅指定folderPath。
如需复制指定名称的单个 Blob,请将 folderPath 指定为文件夹路径,并将 fileName 指定为文件名。
如需复制文件夹下的 Blob 对象子集,请在文件夹路径中指定 folderPath,并使用通配符筛选器指定 fileName。
示例:
{
"name": "AzureBlobDataset",
"properties": {
"type": "AzureBlob",
"linkedServiceName": {
"referenceName": "<Azure Blob Storage linked service name>",
"type": "LinkedServiceReference"
},
"typeProperties": {
"folderPath": "mycontainer/myfolder",
"fileName": "*",
"modifiedDatetimeStart": "2018-12-01T05:00:00Z",
"modifiedDatetimeEnd": "2018-12-01T06:00:00Z",
"format": {
"type": "TextFormat",
"columnDelimiter": ",",
"rowDelimiter": "\n"
},
"compression": {
"type": "GZip",
"level": "Optimal"
}
}
}
}
复制活动的旧源模型
| 属性 | 描述 | 必填 |
|---|---|---|
| 类型 | 复制活动源的 type 属性必须设置为 BlobSource。 |
是 |
| recursive | 指示是要从子文件夹中以递归方式读取数据,还是只从指定的文件夹中读取数据。 当 recursive 设置为 true 且接收器是基于文件的存储时,将不会在接收器上复制或创建空的文件夹或子文件夹。允许的值为 true(默认值)和 false。 |
否 |
| 最大并发连接数 (maxConcurrentConnections) | 活动运行期间与数据存储建立的并发连接的上限。 仅在要限制并发连接时指定一个值。 | 否 |
示例:
"activities":[
{
"name": "CopyFromBlob",
"type": "Copy",
"inputs": [
{
"referenceName": "<Azure Blob input dataset name>",
"type": "DatasetReference"
}
],
"outputs": [
{
"referenceName": "<output dataset name>",
"type": "DatasetReference"
}
],
"typeProperties": {
"source": {
"type": "BlobSource",
"recursive": true
},
"sink": {
"type": "<sink type>"
}
}
}
]
复制活动的旧接收器模型
| 属性 | 描述 | 必填 |
|---|---|---|
| 类型 | Copy 活动接收器的 type 属性必须设置为 BlobSink。 |
是 |
| copyBehavior | 定义以基于文件的数据存储中的文件为源时的复制行为。 允许值包括: - PreserveHierarchy(默认):将文件层次结构保留到目标文件夹中。 从源文件到源文件夹的相对路径与从目标文件到目标文件夹的相对路径相同。 - FlattenHierarchy:源文件夹中的所有文件都位于目标文件夹的第一级中。 目标文件具有自动生成的名称。 - MergeFiles:将源文件夹中的所有文件合并到一个文件中。 如果指定了文件名或 Blob 名称,则合并文件的名称为指定名称。 否则,它是自动生成的文件名。 |
否 |
| 最大并发连接数 (maxConcurrentConnections) | 活动运行期间与数据存储建立的并发连接的上限。 仅在要限制并发连接时指定一个值。 | 否 |
示例:
"activities":[
{
"name": "CopyToBlob",
"type": "Copy",
"inputs": [
{
"referenceName": "<input dataset name>",
"type": "DatasetReference"
}
],
"outputs": [
{
"referenceName": "<Azure Blob output dataset name>",
"type": "DatasetReference"
}
],
"typeProperties": {
"source": {
"type": "<source type>"
},
"sink": {
"type": "BlobSink",
"copyBehavior": "PreserveHierarchy"
}
}
}
]
更改数据捕获
Azure 数据工厂只有在映射数据流源转换中启用“启用更改数据捕获”,才能从Azure Blob 存储获取新的或更改的文件。 使用此连接器选项,可以仅读取新的或更新后的文件,并在将转换后的数据加载到所选目标数据集之前应用转换。 有关详细信息,请参阅 变更数据捕获 。
相关内容
关于 复制活动 作为源和汇支持的数据存储列表,请参阅 支持的数据存储。