复制数据集

您可以直接将区域内的数据集从一个区域复制到另一个区域,而无需执行数据提取、移动和重新加载到 BigQuery 的操作。您可以一次性复制数据集,也可以执行自定义的周期性复制。

准备工作

在创建数据集副本之前,请先做好以下准备工作:

  • 数据集复制要使用 BigQuery Data Transfer Service 的功能。因此,请确认您已完成启用 BigQuery Data Transfer Service 所需的所有操作。
  • 如果您要使用经典版 BigQuery 网页界面创建转移作业,请在浏览器中允许来自 bigquery.cloud.google.com 的弹出式窗口,这样您才能看到权限窗口。您必须授予 BigQuery Data Transfer Service 管理您数据集副本的权限,这是一种转移作业。
  • 创建 BigQuery 数据集,作为目标数据集,该数据集可以与源数据集位于同一区域也可以位于不同区域。创建数据集时,请指定一个位置,用于存储 BigQuery 数据。目前并非所有区域都支持进行数据集复制(请参阅位置限制)。每个项目的数据集名称必须唯一。
  • 找到要复制的源数据集的 ID 以及源项目的 ID。
  • 如果您想要为 Cloud Pub/Sub 设置转移作业运行通知,那么您必须拥有 pubsub.topics.setIamPolicy 权限。如果您只是要设置电子邮件通知,则无需 Cloud Pub/Sub 权限。如需了解详情,请参阅 BigQuery Data Transfer Service 运行通知

必要权限

在创建数据集副本之前,请确保创建数据集副本的人员在 BigQuery 中拥有以下必要权限:

  1. 创建副本转移作业所需的 bigquery.transfers.update 权限。

  2. 源数据集的 bigquery.tables.list 权限。

    以下预定义的项目级层 IAM 角色具有 bigquery.tables.list 权限:

    • bigquery.dataViewer
    • bigquery.dataEditor
    • bigquery.dataOwner
    • bigquery.metadataViewer
    • bigquery.user
  3. 目标数据集的 bigquery.tables.listbigquery.tables.create 权限。

    以下预定义的项目级层 IAM 角色具有 bigquery.tables.listbigquery.tables.create 权限:

    • bigquery.dataEditor
    • bigquery.dataOwner
  4. bigquery.admin 预定义的项目级层 IAM 角色具有数据集副本的所有必要权限。如需详细了解 BigQuery 中的 IAM 角色,请参阅访问权限控制

设置数据集副本

要创建数据集副本,请执行以下操作:

控制台

方法 1:使用复制数据集图标。

  1. 转到 BigQuery 网页界面。

    转到 BigQuery 网页界面

  2. 选择要复制的源数据集的名称。

  3. 点击复制数据集图标。

    复制数据集图标

  4. 复制数据集对话框中,选择项目 ID 和目标数据集 ID。项目和数据集可以位于不同区域,但并非所有区域都支持进行跨区域的数据集复制

  5. 项目中的数据集名称必须唯一。

  6. (可选)如果您想要刷新(覆盖)目标数据集中的所有数据,请选中覆盖目标表复选框。包括表和架构都将被覆盖。

    复制数据集对话框

  7. 请考虑删除旧数据集以避免额外的存储开销。

方法 2:使用转移作业界面。

  1. 转到 BigQuery 网页界面。

    转到 BigQuery 网页界面

  2. 点击转移作业

  3. 点击 + 创建转移作业

  4. 创建转移作业页面上:

    • 来源类型部分的来源中,选择数据集副本

      转移作业来源

    • 转移配置名称部分的显示名中,输入转移作业的名称,例如 My Transfer。转移作业名称可以是任何容易辨识的值,方便以后需要时对其进行修改。

      转移作业名称

    • 时间安排选项部分的时间安排中,保留默认值(立即开始)或点击在设置的时间开始 (Start at a set time)。

      • 重复频率部分,从以下选项中选择转移作业的运行频率。选项包括:

        • 每日一次(默认值)
        • 每周一次
        • 每月一次
        • 自定义
        • 按需

        如果您选择除“每日一次”以外的选项,则系统还会提供其他选项。例如,如果您选择“每周一次”,则系统会显示一个选项,供您选择星期几。

      • 开始日期和运行时间部分,输入开始转移作业的日期和时间。如果您选择的是立即开始,则此选项处于停用状态。

        转移作业时间安排

    • 目标数据集部分,选择您在另一个区域中创建用于存储数据的数据集。

    • 源数据集部分,输入要复制的数据集的名称。

    • 源项目部分,输入源数据集所在的项目的 ID。

    • (可选)如果您想要刷新(覆盖)目标数据集中的所有数据,请选中覆盖目标表复选框。包括表和架构都将被覆盖。

      新建数据集副本

    • (可选)在通知选项部分,执行以下操作:

      • 点击切换开关以启用电子邮件通知。启用此选项后,转移作业管理员会在转移作业运行失败时收到电子邮件通知。
      • 选择 Cloud Pub/Sub 主题部分,选择您的主题名称,或点击创建主题来创建一个主题。此选项会为转移作业配置 Cloud Pub/Sub 运行通知

      Cloud Pub/Sub 主题

  5. 点击保存

  6. 请考虑删除旧数据集以避免额外的存储开销。

经典版界面

  1. 转到经典版 BigQuery 网页界面。

    转到经典版 BigQuery 网页界面

  2. 点击 Transfers

  3. 点击 Add Transfer

  4. New Transfer 页面上,执行以下操作:

    • Source 部分,选择 Dataset Copy
    • Display name 部分,输入转移作业的名称,例如 My Dataset Copy。显示名称可以是任何容易辨识的值,让您以后在需要修改时能够轻松识别。
    • (可选)在 Schedule 部分,您可以保留默认值 Daily(即从创建时间开始,每 24 小时一次),也可以点击 Edit 以更改间隔时间。您还可以将间隔时间更改为“每周一次” (Weekly)、“每月一次” (Monthly) 或“自定义” (Custom)。如果选择“自定义”,应以类似 Cron 的时间规格输入间隔时间,例如 every 12 hours。允许的最短间隔时间为 12 小时。

    • Destination dataset 字段,选择相应的数据集。

    • Source dataset 部分,输入源数据集的名称。

    • Source project 部分,选择源数据集所在的项目。

      新建数据集副本

    • (可选)展开 Advanced 部分,并为转移作业配置运行通知

    • Cloud Pub/Sub topic 部分,输入 Cloud Pub/Sub 主题名称,例如 projects/myproject/topics/mytopic

    • 勾选 Send email notifications,让系统在转移作业运行失败时发送电子邮件通知。

      Cloud Pub/Sub 主题

  5. 点击 Add

  6. 请考虑删除旧数据集以避免额外的存储开销。

CLI

输入 bq mk 命令并提供转移作业创建标志 --transfer_config。此外,还必须提供以下标志:

  • --project_id
  • --data_source
  • --target_dataset
  • --display_name
  • --params

    bq mk --transfer_config --project_id=[PROJECT_ID] --data_source=[DATA_SOURCE] --target_dataset=[DATASET] --display_name=[NAME] --params='[PARAMETERS]'
    

其中:

  • --project_id 是您的 Google Cloud Platform 项目 ID。如果未指定 --project_id,则系统会使用默认项目。
  • --data_source 是数据源:cross_region_copy
  • --target_dataset 是转移作业配置的 BigQuery 目标数据集。
  • --display_name 是复制作业或转移作业配置的显示名。转移作业名称可以是任何容易辨识的值,让您以后在需要修改时能够轻松识别。
  • --params 包含所创建的转移作业配置的参数(采用 JSON 格式)。例如:--params='{"param":"param_value"}'。对于数据集复制,您必须提供 source_dataset_idsource_project_id 参数,overwrite_destination_table 为可选参数。

数据集副本配置的参数包括:

  • source_dataset_id:要复制的源数据集的 ID。
  • source_project_id:源数据集所在项目的 ID。
  • (可选)overwrite_destination_table:如果您要截断前一个副本的表并刷新所有数据,请添加此参数。

例如,以下命令会创建名为 My Transfer 的数据集副本配置,且目标数据集名为 mydataset,项目 ID 为 myproject

bq mk --transfer_config --project_id=myproject --data_source=cross_region_copy --target_dataset=123_demo_tokyo --display_name='My Dataset Copy' --params='{"source_dataset_id":"123_demo_eu","source_project_id":"mysourceproject","overwrite_destination_table":"true"}'

API

使用 projects.locations.transferConfigs.create 方法并提供一个 TransferConfig 资源实例

查看和刷新数据集副本作业

您可以在“转移作业”下查看数据集副本的进度和详细信息。

控制台

转移作业按钮控制台

查看转移作业详情控制台

系统会按照您指定的时间表运行数据集副本刷新,该时间表可进行配置。默认为每 24 小时运行一次。如果您想要请求立即执行新运行,请点击更多菜单,然后点击立即刷新

刷新数据集副本按钮

经典版界面

转移作业按钮(经典版)

系统会按照您指定的时间表运行数据集副本刷新,该时间表可进行配置。默认为每 24 小时运行一次。如果您想要请求立即执行新运行,请点击 Refresh Now

刷新数据集副本按钮

价格

测试版的数据集复制是免费的。

正式版发布后,在区域间复制数据将按照各区域间的 Compute Engine 网络出站流量的价格收费。

BigQuery 会发送经压缩的数据以进行跨区域复制,因此计费的 GB 数可能小于您数据集的大小。

配额和限制

以下限制适用于在 BigQuery 中复制数据集。这些限制适用于使用命令行工具 (CLI)、控制台或经典版 BigQuery 网页界面创建的复制作业,以及使用复制类型 jobs.insert API 方法以编程方式提交的复制作业。

针对存储和查询的所有 BigQuery 使用量标准收费同样适用于复制的数据。如需了解详情,请参阅 BigQuery 价格

BigQuery 数据集副本存在如下限制:

配额

区域内

在同一区域内复制数据集时,所有 BigQuery 复制作业均使用同一配额。

以下限制适用于在 BigQuery 中复制表。这些限制适用于使用命令行工具、控制台或经典版 BigQuery 网页界面复制数据时自动创建的作业,以及使用复制类型 jobs.insert API 方法以编程方式提交的复制作业。

  • 每张目标表每天的复制作业数 - 1000 个(包括失败的作业)
  • 每个项目每天的复制作业数 - 100000 个(包括失败的作业)

跨区域

  • 每张目标表每天的复制作业数 - 100 个(包括失败的作业)
  • 每个项目每天的复制作业数 - 2000 个(包括失败的作业)

一般限制

  • 您必须先创建目标数据集,然后才能为数据集副本创建转移作业配置。

  • 每个数据集副本配置一次只能有一个有效副本。其他转移作业运行将被排入队列。

数据类型限制

  • 不支持复制视图。
  • 不支持复制具体化视图。
  • 不支持复制外部表。
  • 不支持在流式缓冲区中复制存储。
  • 对于使用客户管理的密钥加密的表,是否支持复制取决于您是在同一区域内复制还是跨区域进行复制。

区域内

对于在同一区域内的数据集复制,支持复制加密表(包括使用客户管理的密钥 (CMEK) 加密的表)。

跨区域

对于使用默认加密的表,支持跨区域复制。但目前尚不支持跨区域复制使用客户管理的密钥 (CMEK) 加密的表。将表复制到目标数据集时,将跳过 CMEK 加密的表。

源数据集限制

源数据集中最多可包含 20000 张表。每次运行可复制的表数量取决于同一区域内复制还是跨区域复制。

区域内

  • 源数据集中最多可以包含 20000 张表。

  • 每次运行时最多可以将 20000 张表复制到目标数据集。

跨区域

  • 源数据集中最多可以包含 20000 张表。

  • 每次运行时最多可以将 1000 张表复制到目标数据集。

示例

如果您配置了一个包含 8000 张表的数据集跨区域复制,则 BigQuery Data Transfer Service 会按顺序自动创建 8 次运行。第一次运行将复制 1000 张表,过 24 小时后由另一次运行再复制 1000 张表,以此类推,直到复制完数据集中的所有表为止 - 每个数据集中最多可包含 20000 张表。

表限制

  • 目前支持复制分区表。但是,不支持将数据附加到分区表。

  • 如果源数据集和目标数据集中都存在同一张表,并且它自上次成功复制后未发生更改,则将跳过复制该表。即使选中了覆盖目标表 (Override destination table) 复选框也是如此。

  • 截断表时,开始复制之前数据集复制不会检测目标数据集是否有任何更改。系统将刷新(覆盖)目标数据集中的所有数据,包括表和架构都将被覆盖。

位置限制

您可以将数据集从一个区域复制到另一个区域、从单个区域复制到多个区域、从多个区域复制到单个区域,或从多个区域复制到多个区域。

目前并非所有区域都支持进行数据集复制。您可以在目前支持 BigQuery Data Transfer Service 的区域内创建数据集副本,如下所示。

区域位置

区域名称 区域说明
欧洲
europe-west2 伦敦
亚太地区
asia-northeast1 东京
australia-southeast1 悉尼

多区域位置

多区域名称 多区域说明
EU 欧盟1
US 美国

1 位于 EU 多区域的数据不会存储在 europe-west2(伦敦)数据中心。

后续步骤

  • 如需了解如何使用转移作业,包括获取有关转移作业配置的信息、列出转移作业配置以及查看转移作业的运行历史记录,请参阅处理转移作业
此页内容是否有用?请给出您的反馈和评价:

发送以下问题的反馈:

此网页
需要帮助?请访问我们的支持页面