建立資料表快照
本文說明如何使用Google Cloud 控制台、CREATE SNAPSHOT TABLE
SQL 陳述式、bq cp --snapshot
指令或 jobs.insert
API,建立資料表的快照。本文適用於熟悉 BigQuery 資料表快照的使用者。
權限與角色
本節說明建立資料表快照所需的身分與存取權管理 (IAM) 權限,以及授予這些權限的預先定義 IAM 角色。
權限
如要建立資料表快照,您必須具備下列權限:
權限 | 資源 | 附註 |
---|---|---|
下列所有項目:bigquery.tables.get bigquery.tables.getData bigquery.tables.createSnapshot bigquery.datasets.get bigquery.jobs.create
|
要建立快照的表格。 | 由於快照到期後會遭到刪除,因此如要建立設有到期時間的快照,您必須具備 bigquery.tables.deleteSnapshot 權限。 |
bigquery.tables.create bigquery.tables.updateData
|
包含資料表快照的資料集。 |
角色
提供必要權限的預先定義 BigQuery 角色如下:
角色 | 資源 | 附註 |
---|---|---|
至少下列其中一項:bigquery.dataViewer bigquery.dataEditor bigquery.dataOwner 至少下列其中一項: bigquery.jobUser bigquery.studioUser bigquery.user bigquery.studioAdmin bigquery.admin
|
要建立快照的資料表。 | 只有 bigquery.dataOwner 、bigquery.admin 和 bigquery.studioAdmin 可用於建立設有有效期限的快照。 |
至少以下其中一項:bigquery.dataEditor bigquery.dataOwner bigquery.studioAdmin bigquery.admin
|
包含新資料表快照的資料集。 |
限制
如要瞭解資料表快照限制,請參閱資料表快照限制。
此外,建立資料表快照時也須遵守下列限制,這些限制適用於所有資料表複製工作:
- 建立資料表快照時,名稱必須遵循與建立資料表時相同的命名規則。
- 建立資料表快照時,必須遵守 BigQuery 對複製工作的限制。
- 資料表快照資料集必須與要建立快照的資料表所屬資料集,位於相同區域,且屬於相同機構。舉例來說,您無法在位於美國的資料集中,為位於歐盟資料集的資料表建立資料表快照。您必須改為複製表格。
- BigQuery 建立資料表快照所需的時間可能會因執行作業而有顯著差異,因為基礎儲存空間是動態管理。
- 使用 BigQuery CLI 建立資料表快照時,快照會採用目的地資料集的預設加密金鑰。使用 SQL 建立資料表快照時,快照會與來源資料表使用相同的加密金鑰。
建立資料表快照
最佳做法是在與基本資料表不同的資料集內建立資料表快照。採用這種做法後,即使意外刪除基本資料表的資料集,仍可從資料表快照還原基本資料表。
建立資料表快照時,請指定要建立快照的資料表,以及資料表快照的專屬名稱。您可以視需要指定快照的時間和資料表快照的到期時間。
建立會過期的資料表快照
您可以透過下列任一方式,建立 24 小時後過期的資料表快照:
主控台
前往 Google Cloud 控制台的「BigQuery」頁面。
在左側窗格中,按一下「Explorer」
:如果沒有看到左側窗格,請按一下「展開左側窗格」圖示
開啟窗格。在「Explorer」窗格中展開專案,按一下「Datasets」,然後按一下資料集。
依序點選「總覽」>「表格」,然後點選要建立快照的表格名稱。
在隨即顯示的詳細資料窗格中,按一下「快照」。
在隨即顯示的「建立資料表快照」窗格中,輸入新資料表快照的「專案」、「資料集」和「資料表」資訊。
在「Expiration time」(到期時間) 欄位中,輸入從現在起 24 小時後的日期和時間。
按一下 [儲存]。
SQL
使用 CREATE SNAPSHOT TABLE
DDL 陳述式:
前往 Google Cloud 控制台的「BigQuery」頁面。
在查詢編輯器中輸入下列陳述式:
CREATE SNAPSHOT TABLE SNAPSHOT_PROJECT_ID.SNAPSHOT_DATASET_NAME.SNAPSHOT_NAME CLONE TABLE_PROJECT_ID.TABLE_DATASET_NAME.TABLE_NAME OPTIONS ( expiration_timestamp = TIMESTAMP 'TIMESTAMP_VALUE');
請替換下列項目:
SNAPSHOT_PROJECT_ID
:要在其中建立快照的專案 ID。SNAPSHOT_DATASET_NAME
:要在其中建立快照的資料集名稱。SNAPSHOT_NAME
:您要建立的快照名稱。TABLE_PROJECT_ID
:包含您要建立快照的資料表的專案 ID。TABLE_DATASET_NAME
:包含您要建立快照的資料表所屬資料集名稱。TABLE_NAME
:要從中建立快照的資料表名稱。TIMESTAMP_VALUE
:時間戳記值,代表 24 小時後的日期和時間。
按一下「執行」
。
如要進一步瞭解如何執行查詢,請參閱「執行互動式查詢」。
bq
在 Cloud Shell 中輸入下列指令:
bq cp \ --snapshot \ --no_clobber \ --expiration=86400 \ TABLE_PROJECT_ID:TABLE_DATASET_NAME.TABLE_NAME \ 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
:您要建立的快照名稱。
--no_clobber
旗標為必要項目。
API
使用下列參數呼叫 jobs.insert
方法:
參數 | 值 |
---|---|
projectId |
要為這項作業計費的專案 ID。 |
要求主體 | { "configuration": { "copy": { "sourceTables": [ { "projectId": "TABLE_PROJECT_ID", "datasetId": "TABLE_DATASET_NAME", "tableId": "TABLE_NAME" } ], "destinationTable": { "projectId": "SNAPSHOT_PROJECT_ID", "datasetId": "SNAPSHOT_DATASET_NAME", "tableId": "SNAPSHOT_NAME" }, "operationType": "SNAPSHOT", "writeDisposition": "WRITE_EMPTY", "destinationExpirationTime":"TIMESTAMP_VALUE" } } } |
請替換下列項目:
TABLE_PROJECT_ID
:包含您要建立快照的資料表的專案 ID。TABLE_DATASET_NAME
:包含您要建立快照的資料表所屬資料集名稱。TABLE_NAME
:要從中建立快照的資料表名稱。SNAPSHOT_PROJECT_ID
:要在其中建立快照的專案 ID。SNAPSHOT_DATASET_NAME
:要在其中建立快照的資料集名稱。SNAPSHOT_NAME
:您要建立的快照名稱。TIMESTAMP_VALUE
:時間戳記值,代表 24 小時後的日期和時間。
與資料表相同,如果未指定到期時間,資料表快照會在預設資料表到期時間或包含資料表快照的資料集到期後過期。
使用時空旅行功能建立資料表快照
如要建立一小時前的資料表快照,請使用下列任一選項:
主控台
前往 Google Cloud 控制台的「BigQuery」頁面。
在左側窗格中,按一下「Explorer」
:在「Explorer」窗格中展開專案,按一下「Datasets」,然後按一下資料集。
依序點選「總覽」>「表格」,然後點選要建立快照的表格名稱。
在隨即顯示的詳細資料窗格中,按一下「快照」。
在隨即顯示的「建立資料表快照」窗格中,輸入新資料表快照的「專案」、「資料集」和「資料表」資訊。
在「Snapshot time」(快照時間) 欄位中,輸入 1 小時前的日期和時間。
按一下 [儲存]。
SQL
使用 FOR SYSTEM_TIME AS OF
子句搭配 CREATE SNAPSHOT TABLE
DDL 陳述式:
前往 Google Cloud 控制台的「BigQuery」頁面。
在查詢編輯器中輸入下列陳述式:
CREATE SNAPSHOT TABLE SNAPSHOT_PROJECT_ID.SNAPSHOT_DATASET_NAME.SNAPSHOT_NAME CLONE TABLE_PROJECT_ID.TABLE_DATASET_NAME.TABLE_NAME FOR SYSTEM_TIME AS OF TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 HOUR);
請替換下列項目:
SNAPSHOT_PROJECT_ID
:要在其中建立快照的專案 ID。SNAPSHOT_DATASET_NAME
:要在其中建立快照的資料集名稱。SNAPSHOT_NAME
:您要建立的快照名稱。TABLE_PROJECT_ID
:包含您要建立快照的資料表的專案 ID。TABLE_DATASET_NAME
:包含您要建立快照的資料表所屬資料集名稱。TABLE_NAME
:要從中建立快照的資料表名稱。
按一下「執行」
。
如要進一步瞭解如何執行查詢,請參閱「執行互動式查詢」。
bq
在 Cloud Shell 中輸入下列指令:
bq cp \ --no_clobber \ --snapshot \ TABLE_PROJECT_ID:TABLE_DATASET_NAME.TABLE_NAME@-3600000 \ 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
:您要建立的快照名稱。
--no_clobber
旗標為必要項目。
API
使用下列參數呼叫 jobs.insert
方法:
參數 | 值 |
---|---|
projectId |
要為這項作業計費的專案 ID。 |
要求主體 | { "configuration": { "copy": { "sourceTables": [ { "projectId": "TABLE_PROJECT_ID", "datasetId": "TABLE_DATASET_NAME", "tableId": "TABLE_NAME@-360000" } ], "destinationTable": { "projectId": "SNAPSHOT_PROJECT_ID", "datasetId": "SNAPSHOT_DATASET_NAME", "tableId": "SNAPSHOT_NAME" }, "operationType": "SNAPSHOT", "writeDisposition": "WRITE_EMPTY" } } } |
請替換下列項目:
TABLE_PROJECT_ID
:包含您要建立快照的資料表的專案 ID。TABLE_DATASET_NAME
:包含您要建立快照的資料表所屬資料集名稱。TABLE_NAME
:要從中建立快照的資料表名稱。SNAPSHOT_PROJECT_ID
:要在其中建立快照的專案 ID。SNAPSHOT_DATASET_NAME
:要在其中建立快照的資料集名稱。SNAPSHOT_NAME
:您要建立的快照名稱。
如要進一步瞭解如何指定資料表的舊版,請參閱使用時間旅行功能存取歷史資料。
資料表存取權控管
如要控管 BigQuery 資料表的存取權,請參閱「使用 IAM 控管資源存取權」。
建立資料表快照時,系統會按照下列方式設定資料表快照的資料表層級存取權:
- 如果資料表快照覆寫現有資料表,系統會保留現有資料表的資料表層級存取權。系統不會從基本資料表複製標記。
- 如果資料表快照是新資源,則資料表快照的資料表層級存取權,取決於建立資料表快照的資料集存取權政策。此外,標記也會從基礎資料表複製到資料表快照。