存取歷來資料
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:指定最舊的可用歷來資料。
如要還原資料表,請選取下列其中一個選項:
控制台
您無法使用 Cloud de Confiance 控制台還原已刪除的資料表。
bq
-
In the Cloud de Confiance console, activate Cloud Shell.
At the bottom of the Cloud de Confiance 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 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
執行程式碼範例前,請將 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。
如果您預期之後可能需要還原資料表,但時間超出時間旅行視窗的允許範圍,請建立資料表的資料表快照。詳情請參閱「資料表快照簡介」。
您無法直接還原邏輯檢視區塊。詳情請參閱「還原檢視畫面」。
後續步驟
- 進一步瞭解資料表快照。
- 進一步瞭解時間旅行和容錯安全機制中的資料保留。
- 進一步瞭解如何管理資料表。