透過時間旅行和容錯移轉功能保留資料
本文說明資料集的時空旅行和安全防護資料保留時間範圍。在時間旅行和安全防護期間,系統會繼續儲存您在資料集任何資料表中變更或刪除的資料,以備不時之需。
時間旅行和資料保留
您可以在時間旅行視窗的任何時間點存取變更或刪除的資料,預設涵蓋過去七天。時空旅行功能可讓您查詢已更新或刪除的資料、還原已刪除的資料表或資料集,或是還原已過期的資料表。
您可以設定時間回溯期的長度,最短為兩天,最長為七天。如果需要復原更新或刪除的資料,較長的時間旅行視窗就很有用。使用實體儲存空間計費模式時,縮短時間範圍可節省儲存空間費用。使用邏輯儲存空間計費模式時,不適用這些折扣。如要進一步瞭解儲存空間計費模式對費用的影響,請參閱「計費方式」一文。
設定時間回溯期
您可以在資料集或專案層級設定時間回溯期。這些設定隨後會套用至與資料集或專案相關聯的所有資料表。
設定專案層級的時間回溯期
如要指定專案層級的預設時間回溯期,可以使用資料定義語言 (DDL) 陳述式。如要瞭解如何設定專案層級的時間旅行視窗,請參閱「管理設定」。
設定資料集層級的時間回溯期
如要指定或修改資料集的時空旅行時間範圍,可以使用Trusted Cloud console、bq 指令列工具或 BigQuery API。
修改時間旅行視窗時,如果時間戳記指定的時間超出時間旅行視窗,或是在資料表建立之前,查詢就會失敗並傳回類似下列的錯誤:
TableID
was created at time which is before its allowed time travel intervaltimestamp
. Creation time:timestamp
時間回溯的運作方式
BigQuery 採用欄位式儲存格式。也就是說,資料是依資料欄而非資料列整理及儲存。如果資料表有多個資料欄,所有列中每個資料欄的值會一起儲存在儲存區塊中。
修改 BigQuery 資料表中的儲存格時,您會變更特定資料列和資料欄中的特定值。由於 BigQuery 會將資料欄儲存在一起,因此即使只修改資料欄中的單一儲存格,通常也需要讀取包含該資料欄資料的整個儲存區塊 (適用於受影響的資料列)、套用變更,然後寫入該儲存區塊的新版本。
時間旅行功能會追蹤組成資料表的儲存區塊版本,更新資料時,BigQuery 不會直接修改現有的儲存區塊,而是會建立受影響儲存區塊的新版本,並納入更新後的資料。然後保留舊版,以供時間旅行之用。
BigQuery 會使用適應性檔案大小和儲存空間區塊。儲存區塊的大小不固定,可能會因資料表大小和資料分布等因素而異。即使變更儲存區塊中的一個儲存格,也會變更該資料欄的資料,可能影響許多資料列。因此,版本化並傳送至時空旅行的資料單位通常是包含該資料欄修改資料的整個儲存區塊,而不只是單一儲存格。
因此,變更一個儲存格可能會導致傳送至時間旅行的資料量,超出變更大小。
時間回溯視窗對資料表和資料集復原作業的影響
刪除資料表或資料集時,系統會使用刪除時生效的時間旅行視窗持續時間。
舉例來說,如果時間回溯期為兩天,之後您將回溯期延長為七天,則在變更前刪除的資料表仍只能在兩天內復原。同樣地,如果時間回溯期為五天,而您將其縮短為三天,則變更前刪除的任何資料表仍可復原五天。
由於時間回溯期是在資料集層級設定,因此您必須先取消刪除資料集,才能變更其時間回溯期。
如果您縮短時空旅行時間範圍、刪除資料表,然後發現需要更長的時間才能復原該資料,可以從刪除資料表之前的時間點建立資料表快照。您必須在刪除的資料表仍可復原時執行這項操作。 詳情請參閱「使用時空旅行功能建立資料表快照」。
時間旅行和資料列層級存取權
如果資料表有或曾有資料列層級存取權政策,則只有資料表管理員可以存取該資料表的歷來資料。
您需要下列身分與存取權管理 (IAM) 權限:
權限 | 資源 |
---|---|
bigquery.rowAccessPolicies.overrideTimeTravelRestrictions
|
要存取歷來資料的資料表 |
下列 BigQuery 角色提供必要權限:
角色 | 資源 |
---|---|
roles/bigquery.admin
|
要存取歷來資料的資料表 |
bigquery.rowAccessPolicies.overrideTimeTravelRestrictions
權限無法新增至自訂角色。
執行下列指令,取得對應的 Unix 紀元時間:
date -d '2023-08-04 16:00:34.456789Z' +%s000
在 bq 指令列工具中,將上一個指令傳回的 UNIX 紀元時間
1691164834000
取代為 執行下列指令,在相同資料集myDatasetID
的另一個資料表restoredTable
中,還原已刪除資料表deletedTableID
的副本:bq cp myProjectID:myDatasetID.deletedTableID@1691164834000 myProjectID:myDatasetID.restoredTable
故障保全
BigQuery 提供安全期,在安全期內,系統會在時空旅行時間範圍後,自動保留刪除的資料額外七天,以供緊急復原。資料可在資料表層級復原。系統會從資料表遭刪除時的時間戳記所代表的時間點,還原資料表資料。安全期無法設定。
您無法查詢或直接復原安全儲存空間中的資料。如要從安全儲存空間復原資料,請與 Cloud Customer Care 團隊聯絡。
帳單
如果將儲存空間計費模式設為依實體位元組計費,系統會另外收取時間旅行和安全儲存空間所用位元組的費用。時間回溯和容錯移轉儲存空間的費用,會以實際使用中的儲存空間費率計算。您可以設定時間範圍,在儲存空間成本與資料保留需求之間取得平衡。
如果將儲存空間計費模式設為依邏輯位元組計費,系統會將時間旅行和容錯移轉儲存空間的總儲存空間費用,計入您支付的基本費率。
下表比較實體和邏輯儲存空間的費用:
計費模式 | 你支付的費用為何? |
---|---|
實體 (壓縮) 儲存空間 |
|
邏輯 (未壓縮) 儲存空間 (預設設定) |
|
如果您使用實體儲存空間,可以查看 TABLE_STORAGE
和 TABLE_STORAGE_BY_ORGANIZATION
檢視畫面中的 TIME_TRAVEL_PHYSICAL_BYTES
和 FAIL_SAFE_PHYSICAL_BYTES
欄,瞭解時間旅行和安全模式使用的位元組。如需如何使用這些檢視畫面估算費用的示例,請參閱「預測儲存空間帳單」。
儲存費用適用於時空旅行和容錯資料,但只有在 BigQuery 其他地方不適用資料儲存費用時,您才需要付費。詳情如下:
- 建立資料表時,不會產生時間旅行或容錯儲存空間費用。
- 如果資料遭到變更或刪除,您必須支付在時空旅行期間和安全期內,時空旅行功能儲存變更或刪除資料的費用。這與表格快照和副本的儲存空間定價類似。
資料保留範例
下表說明已刪除或變更的資料在儲存空間保留時間範圍之間的移動方式。以下範例顯示總有效儲存空間為 200 GiB,且在七天的時空旅行時間範圍內刪除了 50 GiB 的情況:
第 0 天 | 第 1 天 | 第 2 天 | 第 3 天 | 第 4 天 | 第 5 天 | 第 6 天 | Day 7 | 第 8 天 | 第 9 天 | 第 10 天 | 第 11 天 | 第 12 天 | 第 13 天 | Day 14 | 第 15 天 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
動態儲存空間 | 200 | 150 | 150 | 150 | 150 | 150 | 150 | 150 | 150 | 150 | 150 | 150 | 150 | 150 | 150 | 150 |
時間回溯儲存空間 | 50 | 50 | 50 | 50 | 50 | 50 | 50 | |||||||||
安全儲存空間 | 50 | 50 | 50 | 50 | 50 | 50 | 50 |
從長期實體儲存空間刪除資料的運作方式也相同。
限制
使用時間旅行功能擷取資料時,會受到以下限制:
- 時間回溯功能只會提供時間回溯期內的歷來資料。如要保留資料表資料以供非緊急用途,且保留時間超過時間旅行視窗,請使用資料表快照。
- 如果資料表有或曾有資料列層級存取政策,則只有資料表管理員可以使用時間旅行。詳情請參閱「時間旅行和資料列層級存取權」。
- 時間旅行功能不會還原資料表中繼資料。
- 下列表格類型不支援時間旅行:
- 外部資料表
- 暫時快取的查詢結果資料表
- 暫時工作階段資料表
- 臨時多重陳述式表格
- 外部資料集下方列出的資料表。
後續步驟
- 瞭解如何查詢及復原時間旅行資料。
- 進一步瞭解資料表快照。