Cloud Storage 转移作业简介

通过适用于 Cloud Storage 的 BigQuery Data Transfer Service,您可以安排从 Cloud Storage 存储桶到 BigQuery 的周期性数据加载作业。Cloud Storage 中存储的数据的路径和目标表都可以参数化,以便您能够从按日期整理的 Cloud Storage 存储桶中加载数据。

支持的文件格式

BigQuery Data Transfer Service 目前支持以某一下列格式从 Cloud Storage 加载数据:

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

支持的压缩类型

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

Cloud Storage 转移作业的数据注入

设置 Cloud Storage 转移作业时,您可以在转移作业配置中选择写入偏好设置来指定数据加载到 BigQuery 的方式。

有两种类型的写入偏好设置:增量转移截断的转移

增量转移

具有 APPENDWRITE_APPEND 写入偏好设置的转移作业配置(也称为增量转移),将从上次成功转移到 BigQuery 目标表后,以增量方式附加新数据。如果转移作业配置使用 APPEND 写入偏好设置运行,BigQuery Data Transfer Service 会过滤自上次转移作业成功运行以来修改的文件。为了确定文件的修改时间,BigQuery Data Transfer Service 会查看文件元数据中的“上次修改时间”属性。例如,BigQuery Data Transfer Service 会查看 Cloud Storage 文件中的 updated 时间戳属性。如果 BigQuery Data Transfer Service 发现任何文件的“上次修改时间”出现在上次成功转移的时间戳之后,则 BigQuery Data Transfer Service 会以增量转移方式转移这些文件。

为了演示增量转移的工作原理,请考虑以下 Cloud Storage 转移示例。用户于 2023-07-01T00:00Z 在 Cloud Storage 存储桶中创建了一个名为 file_1 的文件。file_1updated 时间戳是文件的创建时间。然后,用户从 Cloud Storage 存储桶创建增量转移,安排成从 2023-07-01T03:00Z 起每天 03:00Z 运行一次。

  • 在 2023-07-01T03:00Z,首次转移作业开始运行。由于这是此配置的首次转移作业运行,因此 BigQuery Data Transfer Service 会尝试将与源 URI 匹配的所有文件加载到目标 BigQuery 表中。转移作业运行成功,且 BigQuery Data Transfer Service 成功将 file_1 加载到目标 BigQuery 表中。
  • 下一次转移作业运行 (2023-07-02T03:00Z) 检测不到 updated 时间戳属性晚于上次转移作业成功运行 (2023-07-01T03:00Z) 的文件。转移作业运行成功,但不会将任何其他数据加载到目标 BigQuery 表中。

上面的示例展示了 BigQuery Data Transfer Service 如何查看源文件的 updated 时间戳属性,以确定是否对源文件进行了任何更改,并在检测到任何更改时转移这些更改。

按照相同的示例,假设用户于 2023-07-03T00:00Z 在 Cloud Storage 存储桶中创建了另一个名为 file_2 的文件。file_2updated 时间戳是文件的创建时间。

  • 下一次转移作业运行(时间 2023-07-03T03:00Z)检测到 file_2updated 时间戳晚于上一次转移作业成功运行 (2023-07-01T03:00Z)。假设转移作业运行因暂时性错误而失败。在这种情况下,file_2 不会加载到目标 BigQuery 表中。上一次成功的转移作业运行时间戳仍为 2023-07-01T03:00Z。
  • 下一次转移作业运行(时间 2023-07-04T03:00Z)检测到 file_2updated 时间戳晚于上次转移作业成功运行 (2023-07-01T03:00Z)。这次,转移作业运行成功完成且没有出现问题,因此成功将 file_2 加载到目标 BigQuery 表中。
  • 下一次转移作业运行(时间 2023-07-05T03:00Z)检测不到 updated 时间戳晚于上一次转移作业成功运行 (2023-07-04T03:00Z) 的文件。转移作业运行成功,但不会将任何其他数据加载到目标 BigQuery 表中。

上面的示例显示,转移作业失败时,没有任何文件转移到 BigQuery 目标表。任何文件更改都将在下一次转移作业成功运行时转移。转移作业失败后的任何后续成功转移作业都不会导致重复数据。如果转移作业失败,您还可以选择在计划安排的时间之外手动触发转移作业

截断的转移

具有 MIRRORWRITE_TRUNCATE 写入偏好设置的转移作业配置(也称为截断的转移)会在每次转移作业运行期间,使用与源 URI 匹配的所有文件中的数据来覆盖 BigQuery 目标表中的数据。MIRROR 用于覆盖目标表中数据的新副本。如果目标表使用分区修饰器,则转移作业运行只会覆盖指定分区中的数据。具有分区修饰器的目标表的格式为 my_table${run_date},例如 my_table$20230809

一天内重复相同的增量转移或截断的转移不会导致重复数据。但是,如果您运行多个会影响同一 BigQuery 目标表的转移作业配置,则可能会导致 BigQuery Data Transfer Service 复制数据。

Cloud Storage 资源路径

如需从 Cloud Storage 数据源加载数据,您必须提供数据的路径。

Cloud Storage 资源路径包含存储桶名称和对象(文件名)。例如,如果 Cloud Storage 存储桶的名称为 mybucket,且数据文件的名称为 myfile.csv,则资源路径为 gs://mybucket/myfile.csv

BigQuery 不支持 Cloud Storage 资源路径在初始双斜杠之后添加多个连续斜杠。Cloud Storage 对象名称可包含多个连续斜杠(“/”)字符。但是,BigQuery 会将多个连续斜杠转换为单个斜杠。例如,虽然以下资源路径在 Cloud Storage 中有效,但在 BigQuery 中无效:gs://bucket/my//object//name

如需检索 Cloud Storage 资源路径,请执行以下操作:

  1. 打开 Cloud Storage 控制台

    Cloud Storage 控制台

  2. 浏览到包含源数据的对象(文件)所在的位置。

  3. 点击对象的名称。

    对象详情页面随即会打开。

  4. 复制 gsutil URI 字段中提供的值,该值以 gs:// 开头。

Cloud Storage 资源路径的通配符支持

如果您的 Cloud Storage 数据被分成共用一个通用基本名称的多个文件,则在加载数据时,您可以在资源路径中使用通配符。

如需在 Cloud Storage 资源路径中添加通配符,可在基本名称后附加星号 (*)。例如,如果您有两个名为 fed-sample000001.csvfed-sample000002.csv 的文件,则资源路径为 gs://mybucket/fed-sample*。此通配符随后可在 Google Cloud 控制台或 Google Cloud CLI 中使用。

您可以将多个通配符用于存储桶内的对象(文件名)。通配符可以出现在对象名称中的任何位置。

通配符不会展开 gs://bucket/ 中的目录。例如,gs://bucket/dir/* 会查找 dir 目录中的文件,但不会查找 gs://bucket/dir/subdir/ 子目录中的文件。

您无法匹配没有通配符的前缀。例如,gs://bucket/dirgs://bucket/dir/file.csvgs://bucket/file.csv 都不匹配。

但是,您可以将多个通配符用于存储桶内的文件名。例如,gs://bucket/dir/*/*.csvgs://bucket/dir/subdir/file.csv 匹配。

如需查看通配符支持与参数化表名称相结合的示例,请参阅转移作业中的运行时参数

位置注意事项

您的 Cloud Storage 存储桶必须位于与 BigQuery 中目标数据集的区域或多区域兼容的区域或多区域中。

  • 如果您的 BigQuery 数据集位于多区域,则包含您要转移的数据的 Cloud Storage 存储桶必须位于同一多区域或该多区域内的位置。例如,如果您的 BigQuery 数据集位于“EU”多区域,则 Cloud Storage 存储桶可以位于欧盟内的“europe-west1”比利时区域。
  • 如果您的数据集位于某个区域,则 Cloud Storage 存储桶必须位于同一区域。例如,如果您的数据集位于“asia-northeast1”东京区域,则 Cloud Storage 存储桶不能位于“ASIA”多区域。

如需详细了解转移和区域,请参阅数据集位置和转移

如需详细了解 Cloud Storage 位置,请参阅 Cloud Storage 文档中的存储桶位置

价格

  • 您必须遵循加载作业适用的标准 BigQuery 配额和限制

  • 数据转移到 BigQuery 后,您需要按标准 BigQuery 存储查询价格付费。

  • 数据上传到 BigQuery 后,不会自动从您的 Cloud Storage 存储桶中删除(除非您在设置转移作业时指明要删除数据)。请参阅设置 Cloud Storage 转移作业

  • 如需了解详情,请参阅我们的转移作业价格页面

配额和限制

BigQuery Data Transfer Service 使用加载作业将 Cloud Storage 数据加载到 BigQuery 中。

加载作业的所有 BigQuery 配额和限制均适用于周期性 Cloud Storage 加载作业,同时还需额外注意以下限制:

限制
每次加载作业转移运行的大小上限 15 TB
每次转移运行的最大文件数 1 万个文件

后续步骤