存取歷來資料
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
詳情請參閱「還原已刪除的資料表」。
後續步驟
- 進一步瞭解資料表快照。
- 進一步瞭解時間旅行和容錯安全機制中的資料保留。
- 進一步瞭解如何管理資料表。