你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

使用 Azure 数据工厂或 Synapse Analytics 从 Google 云存储复制数据

适用于: Azure 数据工厂 Azure Synapse Analytics

提示

试用 Microsoft Fabric 中的数据工厂,这是一种适用于企业的一站式分析解决方案。 Microsoft Fabric 涵盖从数据移动到数据科学、实时分析、商业智能和报告的所有内容。 了解如何免费开始新的试用

本文概述了如何从 Google Cloud Storage (GCS) 复制数据。 有关详细信息,请阅读 Azure 数据工厂Synapse Analytics 的简介文章。

支持的功能

此 Google Cloud Storage 连接器支持以下功能:

支持的功能 IR
复制活动(源/-) ① ②
映射数据流(源/-)
Lookup 活动 ① ②
GetMetadata 活动 ① ②
Delete 活动 ① ②

① Azure 集成运行时 ② 自承载集成运行时

具体而言,此 Google 云存储连接器支持按原样复制文件,或者使用受支持的文件格式和压缩编解码器分析文件。 它利用 GCS 的 S3 兼容互操作性。

先决条件

Google 云存储帐户需要进行以下设置:

  1. 为 Google 云存储帐户启用互操作性
  2. 设置默认项目,使其包含要从目标 GCS Bucket 复制的数据。
  3. 使用 GCP 上的云标识和访问管理创建服务帐户并定义适当的权限级别。
  4. 为此服务帐户生成访问密钥。

检索 Google 云存储的访问密钥

所需的权限

若要从 Google 云存储复制数据,请确保你已被授予以下对象操作权限: storage.objects.get storage.objects.list

如果使用 UI 创作,则测试与链接服务的链接以及从根目录浏览之类的操作需要额外的 storage.buckets.list 权限。 如果不想授予此权限,则可以选择 UI 中的“测试与文件路径的连接”或“从指定路径浏览”选项。

有关 Google 云存储角色和相关权限的完整列表,请参阅 Google 云站点上的云存储的 IAM 角色

入门

若要使用管道执行复制活动,可以使用以下工具或 SDK 之一:

使用 UI 创建到 Google Cloud Storage 的链接服务

使用以下步骤在 Azure 门户 UI 中创建到 Google Cloud Storage 的链接服务。

  1. 浏览到 Azure 数据工厂或 Synapse 工作区中的“管理”选项卡并选择“链接服务”,然后单击“新建”:

  2. 搜索“Google”并选择“Google Cloud Storage (S3 API)连接器”。

    选择“Google Cloud Storage (S3 API)连接器”。

  3. 配置服务详细信息、测试连接并创建新的链接服务。

    配置到 Google Cloud Storage 的链接服务。

连接器配置详细信息

以下各部分详细介绍了定义特定于 Google 云存储的数据工厂实体时使用的属性。

链接服务属性

Google 云存储链接服务支持以下属性:

属性 描述 必需
type type 属性必须设置为 GoogleCloudStorage。
accessKeyId 机密访问键 ID。 若要查找访问密钥和机密,请参阅先决条件
secretAccessKey 机密访问键本身。 将此字段标记为 SecureString 以安全地存储它,或引用存储在 Azure Key Vault 中的机密
serviceUrl 将自定义 GCS 终结点指定为 https://storage.googleapis.com
connectVia 用于连接到数据存储的集成运行时。 可使用 Azure Integration Runtime 或自承载集成运行时(如果数据存储位于专用网络中)。 如果未指定此属性,服务会使用默认的 Azure Integration Runtime。

下面是一个示例:

{
    "name": "GoogleCloudStorageLinkedService",
    "properties": {
        "type": "GoogleCloudStorage",
        "typeProperties": {
            "accessKeyId": "<access key id>",
            "secretAccessKey": {
                "type": "SecureString",
                "value": "<secret access key>"
            },
            "serviceUrl": "https://storage.googleapis.com"
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

数据集属性

Azure 数据工厂支持以下文件格式。 请参阅每一篇介绍基于格式的设置的文章。

Google 云存储支持基于格式的数据集中 location 设置下的以下属性:

属性 描述 必需
type 数据集中 location 下的 type 属性必须设置为 GoogleCloudStorageLocation。
bucketName GCS 桶名称。
folderPath 给定存储桶下的文件夹路径。 如果要使用通配符来筛选文件夹,请跳过此设置并在活动源设置中进行相应的指定。
fileName 给定 Bucket 和文件夹路径下的文件名。 如果要使用通配符来筛选文件,请跳过此设置并在活动源设置中进行相应的指定。

示例:

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

复制活动属性

有关可用于定义活动的各部分和属性的完整列表,请参阅管道一文。 本部分提供了 Google 云存储源支持的属性列表。

Google 云存储作为源类型

Azure 数据工厂支持以下文件格式。 请参阅每一篇介绍基于格式的设置的文章。

Google 云存储支持基于格式的复制源中 storeSettings 设置下的以下属性:

属性 描述 必需
type storeSettings 下的 type 属性必须设置为 GoogleCloudStorageReadSettings。
找到要复制的文件:
选项 1:静态路径
从数据集中指定的给定存储桶或文件夹/文件路径复制。 若要复制 Bucket 或文件夹中的所有文件,请另外将 wildcardFileName 指定为 *
选项 2:GCS 前缀
- prefix
数据集中配置的给定 Bucket 下的 GCS 密钥名称的前缀,用于筛选源 GCS 文件。 选择名称以 bucket_in_dataset/this_prefix 开头的 GCS 密钥。 它利用 GCS 的服务端筛选器,相较于通配符筛选器,该筛选器可提供更好的性能。
选项 3:通配符
- wildcardFolderPath
数据集中配置的给定 Bucket 下包含通配符的文件夹路径,用于筛选源文件夹。
允许的通配符为:*(匹配零个或更多字符)和 ?(匹配零个或单个字符)。 如果文件夹名内包含通配符或此转义字符,请使用 ^ 进行转义。
请参阅文件夹和文件筛选器示例中的更多示例。
选项 3:通配符
- wildcardFileName
给定 Bucket 和文件夹路径(或通配符文件夹路径)下包含通配符的文件名,用于筛选源文件。
允许的通配符为:*(匹配零个或更多字符)和 ?(匹配零个或单个字符)。 如果文件名包含通配符或此转义字符,请使用 ^ 进行转义。 请参阅文件夹和文件筛选器示例中的更多示例。
选项 3:文件列表
- fileListPath
指明复制给定文件集。 指向包含要复制的文件列表的文本文件,每行一个文件(即数据集中所配置路径的相对路径)。
使用此选项时,请不要在数据集中指定文件名。 请参阅文件列表示例中的更多示例。
其他设置:
recursive 指示是要从子文件夹中以递归方式读取数据,还是只从指定的文件夹中读取数据。 请注意,当 recursive 设置为 true 且接收器是基于文件的存储时,将不会在接收器上复制或创建空的文件夹或子文件夹。
允许的值为 true(默认值)和 false
如果配置 fileListPath,则此属性不适用。
deleteFilesAfterCompletion 指示是否会在二进制文件成功移到目标存储后将其从源存储中删除。 文件删除按文件进行。因此,当复制活动失败时,你会看到一些文件已经复制到目标并从源中删除,而另一些文件仍保留在源存储中。
此属性仅在二进制文件复制方案中有效。 默认值:false。
modifiedDatetimeStart 文件根据“上次修改时间”属性进行筛选。
如果文件的上次修改时间大于或等于 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”,则除了文件内的列外,复制活动还将生成另外两个列 monthday,其值分别为“08”和“27”。
- 如果未指定分区根路径,则不会生成额外的列。
maxConcurrentConnections 活动运行期间与数据存储建立的并发连接的上限。 仅在要限制并发连接时指定一个值。

示例:

"activities":[
    {
        "name": "CopyFromGoogleCloudStorage",
        "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": "GoogleCloudStorageReadSettings",
                    "recursive": true,
                    "wildcardFolderPath": "myfolder*A",
                    "wildcardFileName": "*.csv"
                }
            },
            "sink": {
                "type": "<sink type>"
            }
        }
    }
]

文件夹和文件筛选器示例

本部分介绍使用通配符筛选器生成文件夹路径和文件名的行为。

Bucket key recursive 源文件夹结构和筛选器结果(用粗体表示的文件已检索)
Bucket Folder*/* false Bucket
    FolderA
        File1.csv
        File2.json
        Subfolder1
            File3.csv
            File4.json
            File5.csv
    AnotherFolderB
        File6.csv
Bucket Folder*/* true Bucket
    FolderA
        File1.csv
        File2.json
        Subfolder1
            File3.csv
            File4.json
            File5.csv
    AnotherFolderB
        File6.csv
Bucket Folder*/*.csv false Bucket
    FolderA
        File1.csv
        File2.json
        Subfolder1
            File3.csv
            File4.json
            File5.csv
    AnotherFolderB
        File6.csv
Bucket Folder*/*.csv true Bucket
    FolderA
        File1.csv
        File2.json
        Subfolder1
            File3.csv
            File4.json
            File5.csv
    AnotherFolderB
        File6.csv

文件列表示例

本部分介绍了在复制活动源中使用文件列表路径时产生的行为。

假设有以下源文件夹结构,并且要复制以粗体显示的文件:

示例源结构 FileListToCopy.txt 中的内容 配置
Bucket
    FolderA
        File1.csv
        File2.json
        Subfolder1
            File3.csv
            File4.json
            File5.csv
    元数据
        FileListToCopy.txt
File1.csv
Subfolder1/File3.csv
Subfolder1/File5.csv
在数据集中:
- 桶:bucket
- 文件夹路径:FolderA

在复制活动源中:
- 文件列表路径:bucket/Metadata/FileListToCopy.txt

文件列表路径指向同一数据存储中的一个文本文件,该文件包含要复制的文件列表(每行一个文件,带有数据集中所配置路径的相对路径)。

映射数据流属性

在映射数据流中转换数据时,可以在 Google Cloud Storage 中读取以下格式的文件:

格式特定的设置位于该格式的文档中。 有关详细信息,请参阅映射数据流中的源转换

源转换

在源转换中,可以从 Google Cloud Storage 中的容器、文件夹或单个文件进行读取。 使用“源选项”选项卡,可以管理文件的读取方式。

源选项的屏幕截图。

通配符路径:如果使用通配符模式,则会指示服务在单个源转换中循环访问每个匹配的文件夹和文件。 这是在单个流中处理多个文件的有效方法。 使用将鼠标指针悬停在现有通配符模式上时出现的加号来添加多个通配符匹配模式。

从源容器中,选择与模式匹配的一系列文件。 数据集中只能指定容器。 因此,通配符路径必须也包含根文件夹中的文件夹路径。

通配符示例:

  • * 表示任意字符集。

  • ** 表示递归目录嵌套。

  • ? 替换一个字符。

  • [] 与括号中的一个或多个字符匹配。

  • /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 格式(例如 year=2019)的分区文件夹,则可以向该分区文件夹树的顶层分配数据流中的列名称。

首先,设置一个通配符,用于包括属于分区文件夹以及要读取的叶文件的所有路径。

分区源文件设置的屏幕截图。

使用“分区根路径”设置来定义文件夹结构的顶级。 通过数据预览查看数据内容时会看到,该服务会添加在每个文件夹级别中找到的已解析的分区。

分区根路径的屏幕截图。

文件列表: 这是一个文件集。 创建一个文本文件,其中包含要处理的相对路径文件的列表。 指向此文本文件。

用于存储文件名的列: 将源文件的名称存储在数据的列中。 请在此处输入新列名称以存储文件名字符串。

完成后: 数据流运行后,可以选择不对源文件执行任何操作、删除源文件或移动源文件。 移动路径是相对路径。

要将源文件移到其他位置进行后期处理,请首先选择“移动”以执行文件操作。 然后,设置“从”目录。 如果未对路径使用任何通配符,则“从”设置中的文件夹将是与源文件夹相同的文件夹。

如果源路径包含通配符,则语法将如下所示:

/data/sales/20??/**/*.csv

可以将“源”指定为:

/data/sales

可以将“目标”指定为:

/backup/priorSales

在此例中,源自 /data/sales 下的所有文件都将移动到 /backup/priorSales

注意

仅当从在管道中使用“执行数据流”活动的管道运行进程(管道调试或执行运行)中启动数据流时,文件操作才会运行。 文件操作不会在数据流调试模式下运行。

按上次修改时间筛选: 通过指定上次修改的日期范围,可以筛选要处理的文件。 所有日期/时间均采用 UTC 格式。

查找活动属性

若要了解有关属性的详细信息,请查看 Lookup 活动

GetMetadata 活动属性

若要了解有关属性的详细信息,请查看 GetMetadata 活动

Delete 活动属性

若要了解有关属性的详细信息,请查看删除活动

旧模型

如果你过去使用 Amazon S3 连接器从 Google 云存储复制数据,为了后向兼容,我们现在仍按原样支持此操作。 建议使用前面提到的新模型。 创作 UI 已切换为生成新模型。

有关复制活动支持作为源和接收器的数据存储的列表,请参阅支持的数据存储