存取歷來資料
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 紀元起算的毫秒數。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>時光旅行裝飾器,執行資料表複製作業。例如,輸入下列指令,將
1418864998000時間點的mydataset.mytable資料表複製到新資料表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。
如果您預期可能需要在時光旅行期間允許的時間之後還原資料表,請建立資料表的資料表快照。詳情請參閱「資料表快照簡介」。
您無法直接還原邏輯檢視表。詳情請參閱「還原檢視表」。
後續步驟
- 進一步瞭解資料表快照。
- 進一步瞭解時間旅行和安全防護機制的資料保留功能。
- 進一步瞭解如何管理表格。