還原資料表快照

本文說明如何使用 Google Cloud 主控台、CREATE TABLE CLONE 查詢、bq cp 指令或 jobs.insert API,從資料表快照建立可寫入的資料表。本指南適用於熟悉資料表快照的使用者。

權限與角色

本節說明從資料表快照建立可寫入資料表時,需要具備的身分與存取權管理 (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
包含目的地資料表的資料集。

還原資料表快照

如要從快照建立可寫入的資料表,請指定要複製的資料表快照和目的地資料表。目的地資料表可以是新資料表,也可以使用資料表快照覆寫現有資料表。

還原至新資料表

您可以使用下列任一選項,將資料表快照還原至新資料表:

主控台

  1. 前往 Google Cloud 控制台的「BigQuery」頁面。

    前往 BigQuery

  2. 在「Explorer」窗格中,展開要從中還原的資料表快照的專案和資料集節點。

  3. 按一下資料表快照的名稱。

  4. 在隨即顯示的表格快照窗格中,按一下「還原」

    從快照還原資料表

  5. 在隨即顯示的「Restore Snapshot」窗格中,輸入新資料表的「Project」、「Dataset」和「Table」資訊。

  6. 按一下 [儲存]

SQL

使用 CREATE TABLE CLONE DDL 陳述式

  1. 前往 Google Cloud 控制台的「BigQuery」頁面。

    前往 BigQuery

  2. 在查詢編輯器中輸入以下陳述式:

    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:要從中還原的快照名稱。

  3. 按一下 「Run」

如要進一步瞭解如何執行查詢,請參閱「執行互動式查詢」一文。

bq

在 Cloud Shell 中輸入下列指令:

前往 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:新資料表的名稱。

如果未指定到期時間,則目的地資料表會在包含目的地資料表的資料集的預設資料表到期時間過後失效。

覆寫現有資料表

您可以使用下列任一選項,透過資料表快照覆寫現有資料表:

主控台

  1. 前往 Google Cloud 控制台的「BigQuery」頁面。

    前往 BigQuery

  2. 在「Explorer」窗格中,展開要從中還原的資料表快照的專案和資料集節點。

  3. 按一下資料表快照的名稱。

  4. 在隨即顯示的表格快照窗格中,按一下「還原」

    從快照還原資料表

  5. 在隨即顯示的「Restore Snapshot」窗格中,輸入現有資料表的「Project」、「Dataset」和「Table」資訊。

  6. 選取「覆寫資料表 (如有)」

  7. 按一下 [儲存]

SQL

使用 CREATE TABLE CLONE DDL 陳述式

  1. 前往 Google Cloud 控制台的「BigQuery」頁面。

    前往 BigQuery

  2. 在查詢編輯器中輸入以下陳述式:

    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:要從中還原的快照名稱。

  3. 按一下 「Run」

如要進一步瞭解如何執行查詢,請參閱「執行互動式查詢」一文。

bq

在 Cloud Shell 中輸入下列指令:

前往 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:您要覆寫的資料表名稱。

如果未指定到期時間,則目的地資料表會在包含目的地資料表的資料集的預設資料表到期時間過後失效。

後續步驟