恢复表快照
本文档介绍如何使用 Google Cloud 控制台、CREATE TABLE CLONE
查询、bq cp
命令或 jobs.insert
API 通过表快照创建一个可写表。本文档适用于熟悉表快照的用户。
权限和角色
本部分介绍通过表快照创建可写表所需的 Identity and Access Management (IAM) 权限以及授予这些权限的预定义 IAM 角色。
权限
如需通过表快照创建可写表,您需要具有以下权限:
权限 | 资源 |
---|---|
以下所有项:bigquery.tables.get bigquery.tables.getData bigquery.tables.restoreSnapshot |
要复制到可写表的表快照。 |
bigquery.tables.create
|
包含目标表的数据集。 |
角色
提供所需权限的预定义 BigQuery 角色如下所示:
角色 | 资源 |
---|---|
以下任意一项:bigquery.dataEditor bigquery.dataOwner bigquery.admin
|
要复制到可写表的表快照。 |
以下任意一项:bigquery.dataEditor bigquery.dataOwner bigquery.admin
|
包含目标表的数据集。 |
恢复表快照
如需通过快照创建可写表,请指定要复制的表快照及目标表。目标表可以是新表,也可以使用表快照覆盖现有表。
恢复到新表
您可以使用以下方式之一将表快照恢复到新表中:
控制台
在 Google Cloud 控制台中,转到 BigQuery 页面。
在探索器窗格中,展开要从中恢复数据的表快照的项目和数据集节点。
点击表快照的名称。
在出现的表快照窗格中,点击恢复。
在出现的恢复快照窗格中,输入新表的项目、数据集和表信息。
点击保存。
SQL
在 Google Cloud 控制台中,转到 BigQuery 页面。
在查询编辑器中,输入以下语句:
CREATE TABLE TABLE_PROJECT_ID.TABLE_DATASET_NAME.NEW_TABLE_NAME CLONE SNAPSHOT_PROJECT_ID.SNAPSHOT_DATASET_NAME.SNAPSHOT_NAME;
请替换以下内容:
TABLE_PROJECT_ID
:要在其中创建新表的项目的 ID。TABLE_DATASET_NAME
:要在其中创建新表的数据集的名称。NEW_TABLE_NAME
:新表的名称。SNAPSHOT_PROJECT_ID
:要从中恢复数据的快照所在的项目的 ID。SNAPSHOT_DATASET_NAME
:包含要用做恢复源的快照的数据集名称。SNAPSHOT_NAME
:要从中恢复数据的快照的名称。
点击
运行。
如需详细了解如何运行查询,请参阅运行交互式查询。
bq
在 Cloud Shell 中输入以下命令:
bq cp \ --restore \ --no_clobber \ SNAPSHOT_PROJECT_ID:SNAPSHOT_DATASET_NAME.SNAPSHOT_NAME \ TABLE_PROJECT_ID:TABLE_DATASET_NAME.NEW_TABLE_NAME
请替换以下内容:
SNAPSHOT_PROJECT_ID
:要从中恢复数据的快照所在的项目的 ID。SNAPSHOT_DATASET_NAME
:包含要用做恢复源的快照的数据集名称。SNAPSHOT_NAME
:要从中恢复数据的快照的名称。TABLE_PROJECT_ID
:要在其中创建新表的项目的 ID。TABLE_DATASET_NAME
:要在其中创建新表的数据集的名称。NEW_TABLE_NAME
:新表的名称。
--no_clobber
标志指示如果目标表已存在,则该命令失败。
API
使用以下参数调用 jobs.insert
方法:
参数 | 值 |
---|---|
projectId |
负责此操作的结算费用的项目的 ID。 |
请求正文 | { "configuration": { "copy": { "sourceTables": [ { "projectId": "SNAPSHOT_PROJECT_ID", "datasetId": "SNAPSHOT_DATASET_NAME", "tableId": "SNAPSHOT_NAME" } ], "destinationTable": { "projectId": "TABLE_PROJECT_ID", "datasetId": "TABLE_DATASET_NAME", "tableId": "NEW_TABLE_NAME" }, "operationType": "RESTORE", "writeDisposition": "WRITE_EMPTY" } } } |
请替换以下内容:
SNAPSHOT_PROJECT_ID
:要从中恢复数据的快照所在的项目的 ID。SNAPSHOT_DATASET_NAME
:包含要用做恢复源的快照的数据集名称。SNAPSHOT_NAME
:要从中恢复数据的快照的名称。TABLE_PROJECT_ID
:要在其中创建新表的项目的 ID。TABLE_DATASET_NAME
:要在其中创建新表的数据集的名称。NEW_TABLE_NAME
:新表的名称。
如果未指定到期时间,则目标表将在包含目标表的数据集的默认表到期时间之后到期。
覆盖现有表
您可以通过以下任一方法使用表快照覆盖现有表:
控制台
在 Google Cloud 控制台中,转到 BigQuery 页面。
在探索器窗格中,展开要从中恢复数据的表快照的项目和数据集节点。
点击表快照的名称。
在出现的表快照窗格中,点击恢复。
在出现的恢复快照窗格中,输入现有表的项目、数据集和表信息。
选择覆盖表(如果存在)。
点击保存。
SQL
在 Google Cloud 控制台中,转到 BigQuery 页面。
在查询编辑器中,输入以下语句:
CREATE OR REPLACE TABLE TABLE_PROJECT_ID.TABLE_DATASET_NAME.TABLE_NAME CLONE SNAPSHOT_PROJECT_ID.SNAPSHOT_DATASET_NAME.SNAPSHOT_NAME;
请替换以下内容:
TABLE_PROJECT_ID
:要在其中创建新表的项目的 ID。TABLE_DATASET_NAME
:包含要覆盖的表的数据集名称。TABLE_NAME
:要覆盖的表的名称。SNAPSHOT_PROJECT_ID
:要从中恢复数据的快照所在的项目的 ID。SNAPSHOT_DATASET_NAME
:包含要用做恢复源的快照的数据集名称。SNAPSHOT_NAME
:要从中恢复数据的快照的名称。
点击
运行。
如需详细了解如何运行查询,请参阅运行交互式查询。
bq
在 Cloud Shell 中输入以下命令:
bq cp \ --restore \ --force \ SNAPSHOT_PROJECT_ID:SNAPSHOT_DATASET_NAME.SNAPSHOT_NAME \ TABLE_PROJECT_ID:TABLE_DATASET_NAME.TABLE_NAME
请替换以下内容:
SNAPSHOT_PROJECT_ID
:要从中恢复数据的快照所在的项目的 ID。SNAPSHOT_DATASET_NAME
:包含要用做恢复源的快照的数据集名称。SNAPSHOT_NAME
:要从中恢复数据的快照的名称。TABLE_PROJECT_ID
:要在其中创建新表的项目的 ID。TABLE_DATASET_NAME
:包含要覆盖的表的数据集名称。TABLE_NAME
:要覆盖的表的名称。
API
使用以下参数调用 jobs.insert
方法:
参数 | 值 |
---|---|
projectId |
负责此操作的结算费用的项目的 ID。 |
请求正文 | { "configuration": { "copy": { "sourceTables": [ { "projectId": "SNAPSHOT_PROJECT_ID", "datasetId": "SNAPSHOT_DATASET_NAME", "tableId": "SNAPSHOT_NAME" } ], "destinationTable": { "projectId": "TABLE_PROJECT_ID", "datasetId": "TABLE_DATASET_NAME", "tableId": "TABLE_NAME" }, "operationType": "RESTORE", "writeDisposition": "WRITE_TRUNCATE" } } } |
请替换以下内容:
SNAPSHOT_PROJECT_ID
:要从中恢复数据的快照所在的项目的 ID。SNAPSHOT_DATASET_NAME
:包含要用做恢复源的快照的数据集名称。SNAPSHOT_NAME
:要从中恢复数据的快照的名称。TABLE_PROJECT_ID
:要在其中创建新表的项目的 ID。TABLE_DATASET_NAME
:包含要覆盖的表的数据集名称。TABLE_NAME
:要覆盖的表的名称。
如果未指定到期时间,则目标表将在包含目标表的数据集的默认表到期时间之后到期。