建立資料表快照
本文件說明如何使用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」窗格中,展開要擷取快照的資料表專案和資料集節點。
按一下要建立快照的資料表名稱。
在隨即顯示的表格窗格中,按一下「快照」。
在隨即顯示的「Create table snapshot」窗格中,輸入新資料表快照的專案、資料集和資料表資訊。
在「到期時間」欄位中,輸入從現在起算的 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 小時後的日期和時間。
按一下
「Run」。
如要進一步瞭解如何執行查詢,請參閱「執行互動式查詢」一文。
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」窗格中,展開要擷取快照的資料表專案和資料集節點。
按一下要建立快照的資料表名稱。
在隨即顯示的表格窗格中,按一下「快照」。
在隨即顯示的「Create table snapshot」窗格中,輸入新資料表快照的專案、資料集和資料表資訊。
在「快照時間」欄位中,輸入 1 小時前的日期和時間。
按一下 [儲存]。
SQL
使用 CREATE SNAPSHOT TABLE
DDL 陳述式搭配 FOR SYSTEM_TIME AS OF
子句:
前往 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
:您要用來建立快照的資料表名稱。
按一下
「Run」。
如要進一步瞭解如何執行查詢,請參閱「執行互動式查詢」一文。
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 控管資源存取權」。
建立資料表快照時,系統會將資料表快照的資料表層級存取權設為下列狀態:
- 如果資料表快照覆寫現有資料表,則現有資料表的資料表層級存取權會保留。系統不會從基本資料表複製標記。
- 如果資料表快照是新資源,則資料表快照的資料表層級存取權,會由建立資料表快照的資料集存取政策決定。此外,標記會從基礎資料表複製到資料表快照。