還原已刪除的資料表
本文說明如何在 BigQuery 中還原 (或取消刪除) 已刪除的資料表。您可以在資料集指定的時間回溯期內,還原已刪除的資料表,包括因資料表到期而明確刪除和隱含刪除的資料表。您也可以設定時間旅行視窗。
如要瞭解如何還原已刪除的整個資料集或快照,請參閱下列資源:
時間回溯期可介於 2 到 7 天。時間回溯期限過後,BigQuery 會提供安全期,自動保留已刪除的資料額外七天。安全期過後,您就無法再使用任何方法還原資料表,包括提交支援單。
事前準備
確認您具備必要的 Identity and Access Management (IAM) 權限,可以還原已刪除的資料表。
必要的角色
如要取得還原已刪除資料表所需的權限,請要求管理員授予您專案的 BigQuery 使用者 (roles/bigquery.user) IAM 角色。如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。
還原資料表
如要從歷來資料還原資料表,請將歷來資料複製到新資料表。只要在時間旅行視窗期間還原資料表,即使資料表已遭刪除或過期,仍可複製歷來資料。
從歷史資料還原資料表時,來源資料表的標記不會複製到目的地資料表。資料表分區資訊也不會複製到目的地資料表。如要重新建立原始資料表的分區架構,請在 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 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
如果您預期之後可能需要還原資料表,但時間超出時間旅行視窗的允許範圍,請建立資料表的資料表快照。詳情請參閱「資料表快照簡介」。
您無法直接還原邏輯檢視區塊。詳情請參閱「還原檢視畫面」。
排解表格復原問題
使用過去的時間戳記查詢已刪除的資料表
您無法使用時間戳記裝飾符查詢過去已刪除的資料表,或使用 FOR SYSTEM_TIME AS OF 將結果儲存至目標資料表,藉此還原資料表資料。使用任一方法都會產生下列錯誤:
Not found: Table myproject:mydataset.table was not found in location LOCATION
如要複製資料表,請按照「還原資料表」一文中的步驟操作。
發生錯誤:VPC Service Controls: Request is prohibited by organization's policy
嘗試從 Google Cloud Shell 執行複製指令時,可能會遇到類似下列的錯誤:
BigQuery error in cp operation: VPC Service Controls: Request is prohibited by organization's policy
Google Cloud 控制台的 Cloud Shell不支援 VPC SC,因為系統會將其視為服務範圍外的要求,並禁止存取受 VPC Service Controls 保護的資料。如要解決這個問題,請使用 Google Cloud CLI 啟動並在本機連線至 Cloud Shell。
發生錯誤:Latest categories are incompatible with schema
如果您從 Google Cloud Shell 執行複製指令,可能會收到類似下列的錯誤訊息:
Latest categories are incompatible with schema at TIMESTAMP
造成這項錯誤的可能原因如下:
如要解決這項錯誤,請按照下列步驟操作:
- 確認目的地資料表的結構定義完全相同,且目的地資料表沒有缺少原始資料表的任何資料欄。
- 從目的地資料表移除不在原始資料表結構定義中的任何資料欄層級政策標記。
發生錯誤:BigQuery error in cp operation: Invalid time travel timestamp
如果您從 Google Cloud Shell 執行 bq copy 指令,可能會收到類似下列的錯誤訊息:
BigQuery error in cp operation: Invalid time travel timestamp 1744343690000 for table PROJECT_ID:DATASET_ID.TABLE_ID@1744343690000. Cannot read before 1744843691075
這項錯誤表示您嘗試從時間旅行視窗之前或資料表建立之前的資料表狀態復原資料。系統不支援這項操作。錯誤訊息會顯示可用於讀取資料表的最新時間戳記。在 bq copy 指令中使用錯誤中的時間戳記。
如果提供負的時間戳記值 (例如 TABLE@-1744963620000),也可能發生這個錯誤。請改用可搭配 - 符號使用的時間偏移。
BigQuery error in cp operation: Invalid time travel timestamp 584878816 for table PROJECT_ID:DATASET_ID.TABLE_ID@584878816. Cannot read before 1744843691075
這則錯誤訊息表示 bq cp 指令含有負的時間戳記值做為偏移量,且您嘗試在 CURRENT_TIMESTAMP - PROVIDED TIMESTAMP 讀取表格。這個值通常是 1970 年的時間戳記。如要解決這個問題,請在設定表格裝飾值時驗證偏移或時間戳記值,並適當使用 - 符號。