還原資料表快照

本文說明如何使用 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」

    醒目顯示的「Explorer」窗格按鈕。

    如果沒有看到左側窗格,請按一下「展開左側窗格」圖示 開啟窗格。

  3. 在「Explorer」窗格中展開專案,點選「Datasets」,然後點選包含要還原資料表快照的資料集。

  4. 依序點選「總覽」>「資料表」,然後按一下資料表快照的名稱。

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

    從快照還原資料表

  6. 在隨即顯示的「還原快照」窗格中,輸入新資料表的「專案」、「資料集」和「資料表」資訊。

  7. 按一下 [儲存]

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. 按一下「執行」

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

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」

    醒目顯示的「Explorer」窗格按鈕。

  3. 在「Explorer」窗格中展開專案,點選「Datasets」,然後點選包含要還原資料表快照的資料集。

  4. 依序點選「總覽」>「資料表」,然後按一下資料表快照的名稱。

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

    從快照還原資料表

  6. 在隨即顯示的「還原快照」窗格中,輸入現有資料表的「專案」、「資料集」和「資料表」資訊。

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

  8. 按一下 [儲存]

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. 按一下「執行」

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

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

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

後續步驟