存取歷來資料
您可以使用 BigQuery 查詢及還原在 時間回溯期間內變更或刪除的 BigQuery 資料。
查詢特定時間點的資料
您可以使用 FOR SYSTEM_TIME AS OF
子句,查詢時間旅行視窗內的任何時間點的資料表歷來資料。這個子句會使用常數時間戳記運算式,並參照該時間戳記的目前資料表版本。資料表必須儲存在 BigQuery 中,不得為外部資料表。使用 SYSTEM_TIME AS OF
時,資料表大小沒有限制。
舉例來說,下列查詢會傳回資料表一小時前的歷史版本:
SELECT *
FROM `mydataset.mytable`
FOR SYSTEM_TIME AS OF TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 HOUR);
如果時間戳記指定的時間早於時間回溯期間或資料表建立之前,查詢就會失敗,並傳回類似以下的錯誤:
Invalid snapshot time 1601168925462 for table myproject:mydataset.table1@1601168925462. Cannot read before 1601573410026.
使用 CREATE OR REPLACE TABLE
陳述式替換現有資料表後,您可以使用 FOR SYSTEM_TIME AS OF
查詢資料表的舊版。
如果資料表已刪除,查詢就會失敗,並傳回類似以下的錯誤訊息:
Not found: Table myproject:mydataset.table was not found in location LOCATION
從特定時間點還原資料表
您可以將歷來資料複製到資料表,藉此還原資料表。只要在時間旅行視窗內還原資料表,即使資料表已刪除或已過期,複製歷來資料仍可正常運作。
如要從資料表複製歷來資料,請使用下列其中一種語法,在資料表名稱中加入修飾符:
tableid@TIME
,其中TIME
是自 Unix 紀元起算的毫秒數。tableid@-TIME_OFFSET
,其中TIME_OFFSET
是相對於目前時間的相對偏移量 (以毫秒為單位)。tableid@0
:指定可用的最久期歷來資料。
舉例來說,下列 bq 指令列工具指令會將一小時前名為 table1
的資料表複製到名為 table1_restored
的資料表中。時間 -3600000
是以毫秒為單位,並使用相對偏移值指定。
bq cp mydataset.table1@-3600000 mydataset.table1_restored
執行下列指令,取得指定時間的等效 Unix 紀元時間:
date -d '2023-08-04 16:00:34.456789Z' +%s000
下列 bq 指令列工具指令會將名為 table1
的資料表複製到名為 table1_restored
的資料表。取代您從上一個指令收到的 UNIX 紀元時間 1691164834000
。
bq cp mydataset.table1@1691164834000 mydataset.table1_restored
詳情請參閱「還原已刪除的資料表」。
後續步驟
- 進一步瞭解資料表快照。
- 進一步瞭解透過時間旅行和安全防護機制保留資料。
- 進一步瞭解如何管理資料表。