Amazon S3 转移作业概览

借助适用于 Amazon S3 的 BigQuery Data Transfer Service,您可以自动安排和管理从 Amazon S3 到 BigQuery 的周期性加载作业。

支持的文件格式

BigQuery Data Transfer Service 目前支持从 Amazon S3 加载采用以下其中一种格式的数据:

  • 逗号分隔值 (CSV)
  • JSON(以换行符分隔)
  • Avro
  • Parquet
  • ORC

支持的压缩类型

适用于 Amazon S3 的 BigQuery Data Transfer Service 支持加载压缩数据。BigQuery Data Transfer Service 支持的压缩类型与 BigQuery 加载作业支持的压缩类型相同。如需了解详情,请参阅加载压缩和未压缩的数据

Amazon S3 前提条件

要从 Amazon S3 数据源加载数据,您必须满足以下前提条件:

  • 提供源数据的 Amazon S3 URI
  • 拥有访问密钥 ID
  • 拥有私有访问密钥
  • 至少设置针对 Amazon S3 源数据的 AWS 托管政策 AmazonS3ReadOnlyAccess

Amazon S3 URI

在您提供 Amazon S3 URI 时,路径必须采用以下格式:s3://bucket/folder1/folder2/...只有顶级存储分区名称是必需的。文件夹名称是可选的。如果指定的 URI 仅包含存储分区名称,则系统会将存储分区中的所有文件转移并加载到 BigQuery 中。

Amazon S3 转移作业运行时参数化

Amazon S3 URI 和目标表都可以参数化处理,以便您能够从按日期组织的 Amazon S3 存储分区加载数据。请注意,无法参数化处理 URI 的存储分区部分。Amazon S3 转移作业使用的参数与 Cloud Storage 转移作业使用的参数相同。

如需了解详情,请参阅在转移作业中使用运行时参数

Amazon S3 URI 的通配符支持

如果源数据分布在共用一个基本名称的多个文件中,则加载数据时可以在 URI 中使用通配符。通配符由星号 (*) 组成,可用于 Amazon S3 URI 中的任何位置(存储分区名称除外)。

虽然可以在 Amazon S3 URI 中使用多个通配符,但当 Amazon S3 URI 仅指定单个通配符时,您可以进行一些优化:

  • 每次转移运行的最大文件数存在较高的限制

  • 通配符可跨目录边界起效。例如,Amazon S3 URI s3://my-bucket/*.csv 将与 s3://my-bucket/my-folder/my-subfolder/my-file.csv 文件匹配。

Amazon S3 URI 示例

示例 1

如需将 Amazon S3 中的单个文件加载到 BigQuery 中,请指定该文件的 Amazon S3 URI。

s3://my-bucket/my-folder/my-file.csv

示例 2

如需将 Amazon S3 存储分区中的所有文件加载到 BigQuery 中,请仅指定存储分区名称(可以包含通配符,也可以不包含通配符)。

s3://my-bucket/

s3://my-bucket/*

请注意,s3://my-bucket* 不是有效的 Amazon S3 URI,因为存储分区名称中不允许使用通配符。

示例 3

如需从 Amazon S3 加载具有共用前缀的所有文件,请指定该共用前缀,然后在后面加上通配符。

s3://my-bucket/my-folder/*

请注意,不同于加载顶级 Amazon S3 存储分区中的所有文件,要加载任何文件必须在其 Amazon S3 URI 末尾指定通配符。

示例 4

如需加载 Amazon S3 中具有相似路径的所有文件,请指定共用前缀,然后在后面加上通配符。

s3://my-bucket/my-folder/*.csv

示例 5

请注意,通配符可跨目录起效,因此 my-folder 中以及 的子文件夹中的任何 csv 文件都将加载到 BigQuery 中。

如果 logs 文件夹下有以下源文件:

s3://my-bucket/logs/logs.csv
s3://my-bucket/logs/system/logs.csv
s3://my-bucket/logs/some-application/system_logs.log
s3://my-bucket/logs/logs_2019_12_12.csv

则以下表达式可标识这些文件:

s3://my-bucket/logs/*

示例 6

如果您有以下源文件,但只想转移文件名为 logs.csv 的源文件:

s3://my-bucket/logs.csv
s3://my-bucket/metadata.csv
s3://my-bucket/system/logs.csv
s3://my-bucket/system/users.csv
s3://my-bucket/some-application/logs.csv
s3://my-bucket/some-application/output.csv

则以下表达式可标识名称中包含 logs.csv 的文件:

s3://my-bucket/*logs.csv

示例 7

通过使用多个通配符,您可以对需要转移的文件进行更多控制,但是会降低限制。使用多个通配符意味着每个通配符最多只会匹配到一个子目录内的一个路径的末尾。例如,对于 Amazon S3 中的以下源文件:

s3://my-bucket/my-folder1/my-file1.csv
s3://my-bucket/my-other-folder2/my-file2.csv
s3://my-bucket/my-folder1/my-subfolder/my-file3.csv
s3://my-bucket/my-other-folder2/my-subfolder/my-file4.csv

如果您只想转移 my-file1.csvmy-file2.csv,请使用以下表达式作为 Amazon S3 URI 的值:

s3://my-bucket/*/*.csv

由于这两个通配符都不会跨目录起效,因此该 URI 会将需要转移的文件限定为 my-folder1my-other-folder2 中的 csv 文件。子文件夹不会包含在转移作业之内。

AWS 访问密钥

访问密钥 ID 和私有访问密钥用于代表您访问 Amazon S3 数据。最佳做法是专门为 Amazon S3 转移作业创建唯一的访问密钥 ID 和私有访问密钥,以便提供访问 BigQuery Data Transfer Service 所需的最低访问权限。如需了解如何管理访问密钥,请参阅 AWS 一般参考文档

一致性考虑因素

从 Amazon S3 转移数据时,有些数据可能无法转移到 BigQuery,尤其是文件刚刚才添加到存储分区的情况下。文件添加到存储分区后,可能需要大约 10 分钟才能在 BigQuery Data Transfer Service 中可用。

但是在某些情况下,所需时间可能超过 10 分钟。为降低丢失数据的可能性,请将 Amazon S3 转移作业安排在文件添加到存储分区后至少 10 分钟的时间。如需详细了解 Amazon S3 一致性模型,请参阅 Amazon S3 文档中的 Amazon S3 数据一致性模型

节省出站流量费用的最佳做法

如果未正确配置目标表,则从 Amazon S3 转移数据可能会失败。可能导致配置不当的原因包括:

  • 目标表不存在
  • 表架构未定义
  • 表架构与正在转移的数据不兼容

为了避免失败的 Amazon S3 出站流量产生大量费用,您应先使用较小但有代表性的文件子集来测试转移作业。这里所说的“较小”是指,测试应选择较小的数据大小和较少的文件数量。

价格

如需了解 BigQuery Data Transfer Service 价格,请参阅价格页面。

请注意,使用此服务可能会产生 Google 之外的费用。如需了解详情,请查看 Amazon S3 价格页面

配额和限制

BigQuery Data Transfer Service 使用加载作业将 Amazon S3 数据加载到 BigQuery 中。加载作业的所有 BigQuery 配额和限制均适用于周期性 Amazon S3 转移作业,同时还需额外注意以下限制。

限制
每次加载作业转移运行的大小上限 15 TB
当 Amazon S3 URI 包含 0 或 1 个通配符时,每次转移运行的最大文件数 1000 万个文件
当 Amazon S3 URI 包含多个通配符时,每次转移运行的最大文件数 1 万个文件

后续步骤