存取歷來資料
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 查詢資料表的舊版。
如果資料表已刪除,您就無法使用 FOR SYSTEM_TIME AS OF 直接查詢歷來資料。查詢失敗,並傳回類似下列的錯誤:
Not found: Table myproject:mydataset.table was not found in location LOCATION
如要存取已刪除資料表的歷來資料,請改為從特定時間點還原資料表。
從某個時間點還原表格
如要從歷來資料還原資料表,請將歷來資料複製到新資料表。即使資料表已刪除或過期,只要在時間回溯期內還原資料表,就能複製歷來資料。
從歷來資料還原資料表時,來源資料表的標記不會複製到目的地資料表。資料表分割資訊也不會複製到目的地資料表。如要重新建立原始資料表的分區架構,您可以在 Cloud Logging 中查看初始資料表建立要求,並使用該資訊為還原的資料表建立分區。
您只能還原整個資料表,您無法還原個別磁碟分割區。
舉例來說,系統不支援使用分區裝飾器 (例如 bq cp mydataset.mytable$20260712@1418864998000 mydataset.mytable_restored) 複製分區。
如要還原已刪除但仍在時間旅行時間範圍內的表格,請使用 @<time> 時間裝飾符,將表格複製到新表格。即使使用時間修飾符,您也無法查詢已刪除的資料表。你必須先還原。
請使用下列語法和 @<time> 時間裝飾器:
tableid@TIME,其中TIME是自 Unix Epoch 紀元時間起算的毫秒數。tableid@-TIME_OFFSET,其中TIME_OFFSET是相對於目前時間的相對時差,單位為毫秒。tableid@0:指定最舊的可用歷來資料。
如要還原表格,請選取下列任一選項:
控制台
您無法使用 Cloud de Confiance 控制台取消刪除資料表。
bq
-
在 Cloud de Confiance 控制台中啟用 Cloud Shell。
Cloud de Confiance 控制台底部會開啟 Cloud Shell 工作階段,並顯示指令列提示。Cloud Shell 是已安裝 Google Cloud CLI 的殼層環境,並已設定適用於您目前專案的值。工作階段可能要幾秒鐘的時間才能初始化。
如要還原表格,請先判斷表格存在時的 UNIX 時間戳記 (以毫秒為單位)。您可以使用 Linux
date指令,從一般時間戳記值產生 Unix 時間戳記:date -d '2023-08-04 16:00:34.456789Z' +%s000
接著,使用
bq copy指令和@<time>時間旅行裝飾器,執行表格複製作業。舉例來說,輸入下列指令,即可將
mydataset.mytable資料表在1418864998000時間點的狀態複製到新資料表mydataset.newtable。bq cp mydataset.mytable@1418864998000 mydataset.newtable
(選用) 提供
--location旗標,並將值設為您的位置。您也可以指定相對偏移。以下範例會複製一小時前的資料表版本:
bq cp mydataset.mytable@-3600000 mydataset.newtable
Go
在試用這個範例之前,請先按照「使用用戶端程式庫的 BigQuery 快速入門導覽課程」中的 Go 設定說明操作。詳情請參閱 BigQuery Go API 參考文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
執行程式碼範例前,請將 GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境變數設為 s3nsapis.fr。
Java
在試用這個範例之前,請先按照「使用用戶端程式庫的 BigQuery 快速入門導覽課程」中的 Java 設定說明操作。詳情請參閱 BigQuery Java API 參考文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
執行程式碼範例前,請將 GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境變數設為 s3nsapis.fr。
Node.js
在試用這個範例之前,請先按照「使用用戶端程式庫的 BigQuery 快速入門導覽課程」中的 Node.js 設定說明操作。詳情請參閱 BigQuery Node.js API 參考文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
執行程式碼範例前,請將 GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境變數設為 s3nsapis.fr。
Python
在試用這個範例之前,請先按照「使用用戶端程式庫的 BigQuery 快速入門導覽課程」中的 Python 設定說明操作。詳情請參閱 BigQuery Python API 參考文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
執行程式碼範例前,請將 GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境變數設為 s3nsapis.fr。
如果您預期之後可能會還原資料表,但時間超出時空旅行時間範圍,請建立資料表的快照。詳情請參閱「資料表快照簡介」。
您無法直接還原邏輯檢視畫面。詳情請參閱「還原檢視畫面」。
後續步驟
- 進一步瞭解表格快照。
- 進一步瞭解時間旅行和容錯移轉的資料保留功能。
- 進一步瞭解如何管理表格。