存取歷來資料
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
從特定時間點還原資料表
如要從歷來資料還原資料表,請將歷來資料複製到新資料表。只要在時間旅行視窗期間還原資料表,即使資料表已遭刪除或過期,仍可複製歷來資料。
從歷史資料還原資料表時,來源資料表的標記不會複製到目的地資料表。資料表分區資訊也不會複製到目的地資料表。如要重新建立原始資料表的分區架構,請在 Cloud Logging 中查看初始資料表建立要求,並使用該資訊將還原的資料表分區。
如要還原已刪除但仍在時空旅行時間範圍內的資料表,請使用 @<time> 時間修飾符將資料表複製到新資料表。即使使用時間修飾符,您也無法查詢已刪除的資料表。你必須先還原。
請搭配 @<time> 時間裝飾器使用下列語法:
tableid@TIME,其中TIME是自 Unix 紀元起經過的毫秒數。tableid@-TIME_OFFSET,其中TIME_OFFSET是以毫秒為單位的相對偏移量,以目前時間為準。tableid@0:指定最舊的可用歷來資料。
如要還原資料表,請選取下列其中一個選項:
控制台
您無法使用 Google Cloud 控制台還原已刪除的資料表。
bq
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
如要還原資料表,請先確定資料表存在時間的 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 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
Java
在試用這個範例之前,請先按照「使用用戶端程式庫的 BigQuery 快速入門導覽課程」中的 Java 設定操作說明進行操作。詳情請參閱 BigQuery Java API 參考說明文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
Node.js
在試用這個範例之前,請先按照「使用用戶端程式庫的 BigQuery 快速入門導覽課程」中的 Node.js 設定操作說明進行操作。詳情請參閱 BigQuery Node.js API 參考說明文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
Python
在試用這個範例之前,請先按照「使用用戶端程式庫的 BigQuery 快速入門導覽課程」中的 Python 設定操作說明進行操作。詳情請參閱 BigQuery Python API 參考說明文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
如果您預期之後可能需要還原資料表,但時間超出時間旅行視窗的允許範圍,請建立資料表的資料表快照。詳情請參閱「資料表快照簡介」。
您無法直接還原邏輯檢視區塊。詳情請參閱「還原檢視畫面」。
後續步驟
- 進一步瞭解資料表快照。
- 進一步瞭解時間旅行和容錯安全機制中的資料保留。
- 進一步瞭解如何管理資料表。