管理資料集
本文說明如何在 BigQuery 中複製資料集、在其他位置重建資料集、保護資料集、刪除資料集,以及從已刪除的資料集還原資料表。如要瞭解如何還原 (或取消刪除) 已刪除的資料集,請參閱「還原已刪除的資料集」。
BigQuery 管理員可以整理分析師使用的資料表和檢視區塊,並控管存取權。如要進一步瞭解資料集,請參閱「資料集簡介」。
資料集建立後,您無法變更現有資料集的名稱,也無法重新定位資料集。 如要變更資料集名稱,您可以複製資料集,然後變更目的地資料集的名稱。如要遷移資料集,請按照下列其中一種方法操作:
必要的角色
本節說明管理資料集所需的角色和權限。如果來源或目的地資料集與您用來複製的專案位於同一專案,則不需要該資料集的額外權限或角色。
複製資料集
授予這些角色,即可複製資料集。複製資料集的功能目前為 Beta 版。
如要取得複製資料集所需的權限,請要求管理員授予您下列 IAM 角色:
- BigQuery 管理員 (
roles/bigquery.admin) - 目的地專案 - BigQuery 資料檢視者 (
roles/bigquery.dataViewer):來源資料集
如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。
這些預先定義的角色具備複製資料集所需的權限。如要查看確切的必要權限,請展開「Required permissions」(必要權限) 部分:
所需權限
如要複製資料集,必須具備下列權限:
-
目的地專案的
bigquery.transfers.update -
目的地專案的
bigquery.jobs.create -
bigquery.datasets.get來源和目的地資料集 -
bigquery.tables.list來源和目的地資料集 -
bigquery.datasets.update目的地資料集 -
bigquery.tables.create目的地資料集
刪除資料集
授予這些角色即可刪除資料集。
如要取得刪除資料集所需的權限,請要求管理員授予您專案的「BigQuery 資料擁有者 」(roles/bigquery.dataOwner) IAM 角色。如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。
這個預先定義的角色具備刪除資料集所需的權限。如要查看確切的必要權限,請展開「Required permissions」(必要權限) 部分:
所需權限
如要刪除資料集,必須具備下列權限:
-
專案的
bigquery.datasets.delete -
專案的
bigquery.tables.delete
複製資料集
您可以複製資料集,包括區域內或跨區域的分割資料,不必將資料擷取、移動或重新載入 BigQuery。BigQuery 會在後端使用 BigQuery 資料移轉服務複製資料集。如要瞭解資料移轉時的位置考量,請參閱「資料位置和移轉作業」。
每項資料集複製設定一次只能有一個移轉作業執行。其他移轉工作已排入佇列。如果您使用 Google Cloud 控制台,可以安排週期性複製作業,並透過 BigQuery 資料移轉服務設定電子郵件或 Pub/Sub 通知。
限制
複製資料集時,須遵守下列限制:
您無法從來源資料集複製下列資源:
- 檢視表。
- 常式,包括使用者定義函式。
- 外部資料表。
- 如果複製工作跨區域,則為變更資料擷取 (CDC) 資料表。支援在相同區域內複製 CDC 資料表。
如果目的地資料集並非以 CMEK 加密,且未提供 CMEK,則不支援以客戶自行管理的加密金鑰 (CMEK) 加密的資料表跨區域複製工作。系統支援跨區域複製採用預設加密的資料表。
您可以複製同一區域內的所有加密資料表,包括以 CMEK 加密的資料表。
您無法將下列資源做為複製工作的目的地資料集:
- 寫入效能最佳化儲存空間。
如果複製工作跨區域,且來源資料表未使用 CMEK 加密,則資料集會使用 CMEK 加密。
不過,在相同區域內複製資料時,允許使用以 CMEK 加密的資料表做為目的地資料表。
複製作業之間的最短間隔為 12 小時。
不支援將資料附加至目的地資料集中的分區或非分區資料表。如果來源資料表沒有任何變更,系統會略過該資料表。如果來源資料表更新,目的地資料表會完全截斷並替換。
如果來源資料集和目的地資料集都存在某個資料表,且來源資料表自上次成功複製後未曾變更,系統就會略過該資料表。即使勾選「Overwrite destination tables」(覆寫目的地資料表) 核取方塊,系統也會略過來源資料表。
在目的地資料集中截斷資料表時,資料集副本工作不會偵測到複製工作開始前,目的地資料集資源的任何變更。資料集複製工作會覆寫目的地資料集中的所有資料,包括資料表和結構定義。
複製作業開始後,目的地資料表可能不會反映來源資料表的變更。
BigQuery Omni 區域不支援複製資料集。
如要將資料集複製到其他 VPC Service Controls service perimeter 中的專案,您必須設定下列輸出規則:
在目的地專案的 VPC Service Controls service perimeter 設定中,IAM 主體必須具備下列方法:
bigquery.datasets.getbigquery.tables.listbigquery.tables.get、bigquery.tables.getData
在來源專案的 VPC Service Controls 服務範圍設定中,使用的 IAM 主體必須將方法設為
All Methods。
如果您嘗試更新不屬於您的資料集複製移轉設定,更新可能會失敗,並顯示下列錯誤訊息:
Cannot modify restricted parameters without taking ownership of the transfer configuration.資料集副本的擁有者是與資料集副本相關聯的使用者,或有權存取與資料集副本相關聯服務帳戶的使用者。您可以在資料集副本的設定詳細資料中查看相關聯的使用者。如要瞭解如何更新資料集副本以取得擁有權,請參閱「更新憑證」。如要授予使用者服務帳戶的存取權,您必須具備服務帳戶使用者角色。
資料集副本的擁有者受限參數如下:
- 來源專案
- 來源資料集
- 目的地資料集
- 覆寫目的地資料表設定
跨區域資料表複製作業的所有限制皆適用。
複製資料集
選取下列選項之一:
控制台
為目的地資料集啟用 BigQuery 資料移轉服務。
確認您具備必要角色。
如要設定 Pub/Sub 的移轉作業執行通知 (請參閱後續步驟的選項 2),則必須具備
pubsub.topics.setIamPolicy權限。如果只設定電子郵件通知,則不需要 Pub/Sub 權限。詳情請參閱 BigQuery 資料移轉服務執行通知。
建立 BigQuery 資料集,該資料集可與來源資料集位於相同或不同區域。
方法 1:使用 BigQuery 複製函式
如要建立一次性移轉作業,請使用 BigQuery 複製函式:
前往「BigQuery」頁面
點選左側窗格中的 「Explorer」。

如果沒有看到左側窗格,請按一下 「Expand left pane」(展開左側窗格),開啟窗格。
在「Explorer」窗格中展開專案,點選「資料集」,然後選取資料集。
在「Dataset info」(資料集資訊) 部分,按一下 「Copy」(複製),然後執行下列操作:
在「資料集」欄位中,建立新的資料集,或從清單中選取現有的資料集 ID。
專案中的資料集名稱不得重複。專案和資料集可以位於不同區域,但並非所有區域都支援跨區域資料集複製。
「Location」(位置) 欄位會顯示來源資料集的位置。
選用:如要使用來源資料表覆寫目的地資料表的資料和結構定義,請勾選「Overwrite destination tables」(覆寫目的地資料表) 核取方塊。來源和目的地資料表必須採用相同的分區架構。
如要複製資料集,請按一下「複製」。
方法 2:使用 BigQuery 資料移轉服務
如要排定週期性複製作業,以及設定電子郵件或 Pub/Sub 通知,請在目的地專案的 Google Cloud 控制台,使用 BigQuery 資料移轉服務:
前往「Data transfers」(資料移轉) 頁面。
按一下「建立轉移作業」。
在「Source」(來源) 清單中,選取「Dataset Copy」(資料集複製)。
在「顯示名稱」欄位中,輸入轉移作業的名稱。
在「Schedule options」(排程選項) 部分執行下列操作:
在「Repeat frequency」(重複頻率) 部分選取選項,指定移轉作業的執行頻率:
如果選取「自訂」,請輸入自訂頻率,例如
every day 00:00。詳情請參閱「設定時間表格式」。在「Start date and run time」(開始日期和執行時間) 部分,輸入開始移轉的日期與時間。如果您選擇 [Start now] (立即開始),系統就會停用這個選項。
在「Destination settings」(目的地設定) 部分,選取目的地資料集來儲存移轉資料。您也可以先點選「CREATE NEW DATASET」(建立新的資料集) 建立新的資料集,再選取該資料集進行這項移轉作業。
在「Data source details」(資料來源詳細資料) 部分,輸入下列資訊:
- 在「Source dataset」(來源資料集) 中,輸入要複製的資料集 ID。
- 在「來源專案」部分,輸入來源資料集的專案 ID。
如要使用來源資料表覆寫目的地資料表的資料和結構定義,請勾選「Overwrite destination tables」(覆寫目的地資料表) 核取方塊。來源和目的地資料表必須採用相同的分割區結構定義。
在「Service Account」(服務帳戶) 選單,從Google Cloud 專案的關聯服務帳戶中選取服務帳戶。您可以將服務帳戶與移轉作業建立關聯,而非使用使用者憑證。如要進一步瞭解如何搭配使用服務帳戶與資料移轉作業,請參閱使用服務帳戶的相關說明。
選用:在「Notification options」(通知選項) 專區,執行下列操作:
按一下 [儲存]。
bq
確認您具備必要角色。
如要建立 BigQuery 資料集,請使用
bq mk指令,並加上資料集建立旗標--dataset和location旗標:bq mk \ --dataset \ --location=LOCATION \ PROJECT:DATASET
更改下列內容:
LOCATION:要複製資料集的位置PROJECT:目標資料集的專案 IDDATASET:目標資料集的名稱
如要複製資料集,請使用
bq mk指令,並加上轉移建立旗標--transfer_config和--data_source旗標。您必須將--data_source旗標設為cross_region_copy。如需--data_source旗標的有效值完整清單,請參閱 bq 指令列工具參考資料中的轉移設定旗標。bq mk \ --transfer_config \ --project_id=PROJECT \ --data_source=cross_region_copy \ --target_dataset=DATASET \ --display_name=NAME \ --service_account_name=SERCICE_ACCOUNT \ --params='PARAMETERS'
更改下列內容:
NAME:複製作業或移轉設定的顯示名稱SERVICE_ACCOUNT:用於驗證轉移作業的服務帳戶名稱。服務帳戶應由建立轉移作業的project_id擁有,且應具備所有必要權限。PARAMETERS:JSON 格式的移轉設定參數資料集複製設定的參數包括:
source_dataset_id:要複製的來源資料集 IDsource_project_id:來源資料集所在的專案 IDoverwrite_destination_table:選用旗標,可截斷先前副本的資料表,並重新整理所有資料
來源和目的地資料表必須採用相同的分區架構。
以下範例根據系統環境顯示參數的格式:
Linux:使用單引號括住 JSON 字串,例如:
'{"source_dataset_id":"mydataset","source_project_id":"mysourceproject","overwrite_destination_table":"true"}'Windows 指令列:使用雙引號括住 JSON 字串,並在字串中使用反斜線逸出雙引號,例如:
"{\"source_dataset_id\":\"mydataset\",\"source_project_id\":\"mysourceproject\",\"overwrite_destination_table\":\"true\"}"PowerShell:使用單引號括住 JSON 字串,並在字串中使用反斜線逸出雙引號,例如:
'{\"source_dataset_id\":\"mydataset\",\"source_project_id\":\"mysourceproject\",\"overwrite_destination_table\":\"true\"}'
舉例來說,下列指令會建立名為
My Transfer的資料集複製設定,其中目標資料集名為mydataset,專案 ID 為myproject。bq mk \ --transfer_config \ --project_id=myproject \ --data_source=cross_region_copy \ --target_dataset=mydataset \ --display_name='My Transfer' \ --params='{ "source_dataset_id":"123_demo_eu", "source_project_id":"mysourceproject", "overwrite_destination_table":"true" }'
API
確認您具備必要角色。
如要建立 BigQuery 資料集,請使用已定義的資料集資源呼叫
datasets.insert方法。如要複製資料集,請使用
projects.locations.transferConfigs.create方法,並提供TransferConfig資源的執行個體。
Java
在試用這個範例之前,請先按照「使用用戶端程式庫的 BigQuery 快速入門導覽課程」中的 Java 設定說明操作。詳情請參閱 BigQuery Java API 參考文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
Python
在試用這個範例之前,請先按照「使用用戶端程式庫的 BigQuery 快速入門導覽課程」中的 Python 設定操作說明進行操作。詳情請參閱 BigQuery Python API 參考文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
使用pip install google-cloud-bigquery-datatransfer 安裝 BigQuery 資料移轉 API 的 Python 用戶端。然後建立移轉設定,複製資料集。
如要避免產生額外的儲存費用,建議您刪除先前的資料集。
查看資料集複製工作
如要在Google Cloud 控制台中查看資料集副本工作的狀態和詳細資料,請按照下列步驟操作:
前往 Google Cloud 控制台的「資料移轉」頁面。
選取要查看詳細資料的移轉作業,然後執行下列操作:
在「Transfer details」(移轉作業詳細資料) 頁面中,選取移轉作業執行。
如要重新整理,請按一下「重新整理」圖示 。
在其他位置重新建立資料集
如要手動將資料集從某個位置移至其他位置,請按照下列步驟操作:
-
將 BigQuery 資料表中的資料匯出至 Cloud Storage bucket。
從 BigQuery 中匯出資料並不需要付費,但是在 Cloud Storage 儲存匯出的資料則會產生費用。BigQuery 匯出作業受擷取工作限制。
-
將匯出 Cloud Storage bucket 中的資料複製或移至您在目的地位置建立的新 bucket。舉例來說,如果您要將資料從
US多區域移至asia-northeast1東京區域,則應將資料轉移至在東京建立的 bucket。如要瞭解如何轉移 Cloud Storage 物件,請參閱 Cloud Storage 說明文件中的「複製、重新命名及移動物件」。在區域之間移轉資料時,Cloud Storage 會收取網路輸出費用。
-
在新位置建立新的 BigQuery 資料集,然後將 Cloud Storage bucket 中的資料載入新資料集。
將資料載入 BigQuery 無須支付費用,但將資料儲存於 Cloud Storage 則須支付費用,直到您刪除資料或值區為止。載入資料之後,將資料儲存至 BigQuery 亦須支付相關費用。將資料載入 BigQuery 時,須遵守載入工作限制。
您也可以使用 Managed Service for Apache Airflow,以程式輔助方式移動及複製大型資料集。
如要進一步瞭解如何使用 Cloud Storage 儲存及移動大型資料集,請參閱「搭配使用 Cloud Storage 與大數據」。
保護資料集
如要控管 BigQuery 資料集的存取權,請參閱「控管資料集的存取權」。如要瞭解資料加密,請參閱「靜態資料加密」。
刪除資料集
使用 Google Cloud 控制台刪除資料集時,系統會自動刪除資料集中的資料表和檢視表,包括當中的資料。不過,如果使用其他方法,則必須先清空資料集,或指定對應的旗標、參數或關鍵字,強制移除資料集內容。
如果您嘗試刪除非空白資料集,但未提供適當的旗標或參數,作業會失敗並顯示下列錯誤:Dataset project:dataset is still in use。
如果嘗試刪除不存在的資料集,除非您指定忽略遺失資料集的選項 (例如 GoogleSQL 中的 IF EXISTS 或 bq 指令列工具中的 -f (--force) 旗標),否則作業會失敗並顯示 Not found 錯誤。
刪除資料集時,系統會建立一筆資料集刪除作業的稽核記錄項目。不會為資料集中每個刪除的資料表建立個別記錄項目。
如要刪除資料集,請選取下列其中一個選項:
控制台
前往「BigQuery」頁面。
點選左側窗格中的 「Explorer」。

在「Explorer」窗格中展開專案,按一下「Datasets」,然後點選資料集。
在詳細資料窗格中,按一下「 刪除」。
在「Delete dataset」(刪除資料集) 對話方塊中,在欄位輸入
delete,然後按一下「Delete」(刪除)。
SQL
如要刪除資料集,請使用 DROP SCHEMA DDL 陳述式。
下列範例會刪除名為 mydataset 的資料集:
前往 Google Cloud 控制台的「BigQuery」頁面。
在查詢編輯器中輸入下列陳述式:
DROP SCHEMA IF EXISTS mydataset;
IF EXISTS子句可避免在資料集不存在時發生錯誤。如果沒有IF EXISTS,嘗試刪除不存在的資料集會傳回Not found錯誤。根據預設,
DROP SCHEMA只會刪除空白資料集。 如要刪除資料集及其所有內容,請使用CASCADE關鍵字:DROP SCHEMA IF EXISTS mydataset CASCADE;
按一下「執行」。
如要進一步瞭解如何執行查詢,請參閱「執行互動式查詢」。
bq
使用 bq rm 指令,並加上 --dataset 或 -d 旗標 (選用)。如果資料集包含資料表,您必須使用 -r 旗標,移除資料集內的所有資料表。如果使用 -r 旗標,則可省略 --dataset 或 -d 旗標。
執行指令後,系統會要求確認。您可以使用 -f (或 --force) 旗標略過確認,並在資料集不存在時忽略 Not found 錯誤。如果沒有 -f 旗標,嘗試刪除不存在的資料集會失敗,並顯示 Not found 錯誤。
如要刪除預設專案以外的資料表,請按照下列格式,在資料集名稱中加入專案 ID:PROJECT_ID:DATASET。
bq rm -r -f -d PROJECT_ID:DATASET
更改下列內容:
PROJECT_ID:專案 IDDATASET:要刪除的資料集名稱
範例:
輸入下列指令,從預設專案中移除名為 mydataset 的資料集,以及其中的所有資料表。這個指令會使用 -d 旗標。
bq rm -r -d mydataset
當系統提示時,請輸入 y,然後按下 Enter 鍵。
輸入下列指令,即可從 myotherproject 中移除 mydataset 及其中的所有資料表。這個指令不使用選用的 -d 旗標。-f 標記可用來略過確認程序。
bq rm -r -f myotherproject:mydataset
您可以使用 bq ls 指令,確認資料集是否已刪除。
API
呼叫 datasets.delete 方法刪除資料集,並將 deleteContents 參數設為 true,即可刪除其中的資料表。如果指定的資料集不存在,方法會傳回 404 Not Found 錯誤。
C#
下列程式碼範例會刪除空白資料集。
在試用這個範例之前,請先按照「使用用戶端程式庫的 BigQuery 快速入門導覽課程」中的 C# 設定操作說明進行操作。詳情請參閱 BigQuery C# API 參考文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
使用pip install google-cloud-bigquery-datatransfer 安裝 BigQuery 資料移轉 API 的 Python 用戶端。接著建立移轉設定,複製資料集。
下列程式碼範例會刪除資料集及其所有內容:
Go
在試用這個範例之前,請先按照「使用用戶端程式庫的 BigQuery 快速入門導覽課程」中的 Go 設定操作說明進行操作。詳情請參閱 BigQuery Go API 參考文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
使用pip install google-cloud-bigquery-datatransfer 安裝 BigQuery 資料移轉 API 的 Python 用戶端。然後建立移轉設定,複製資料集。
Java
下列程式碼範例會刪除空白資料集。
在試用這個範例之前,請先按照「使用用戶端程式庫的 BigQuery 快速入門導覽課程」中的 Java 設定說明操作。詳情請參閱 BigQuery Java API 參考文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
使用pip install google-cloud-bigquery-datatransfer 安裝 BigQuery 資料移轉 API 的 Python 用戶端。然後建立移轉設定,複製資料集。
下列程式碼範例會刪除資料集及其所有內容:
Node.js
在試用這個範例之前,請先按照「使用用戶端程式庫的 BigQuery 快速入門導覽課程」中的 Node.js 設定說明操作。詳情請參閱 BigQuery Node.js API 參考文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
使用pip install google-cloud-bigquery-datatransfer 安裝 BigQuery 資料移轉 API 的 Python 用戶端。接著建立移轉設定,複製資料集。
PHP
在試用這個範例之前,請先按照「使用用戶端程式庫的 BigQuery 快速入門導覽課程」中的 PHP 設定說明操作。詳情請參閱 BigQuery PHP API 參考文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
使用pip install google-cloud-bigquery-datatransfer 安裝 BigQuery 資料移轉 API 的 Python 用戶端。接著建立移轉設定,複製資料集。
Python
在試用這個範例之前,請先按照「使用用戶端程式庫的 BigQuery 快速入門導覽課程」中的 Python 設定說明操作。詳情請參閱 BigQuery Python API 參考文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
使用pip install google-cloud-bigquery-datatransfer 安裝 BigQuery 資料移轉 API 的 Python 用戶端。接著建立移轉設定,複製資料集。
Ruby
下列程式碼範例會刪除空白資料集。
在試用這個範例之前,請先按照「使用用戶端程式庫的 BigQuery 快速入門導覽課程」中的 Ruby 設定操作說明進行操作。詳情請參閱 BigQuery Ruby API 參考文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
使用pip install google-cloud-bigquery-datatransfer 安裝 BigQuery 資料移轉 API 的 Python 用戶端。然後建立移轉設定,複製資料集。
下列程式碼範例會刪除資料集及其所有內容:
從已刪除的資料集還原資料表
您可以在資料集的時間回溯期內,還原已刪除資料集中的資料表。如要還原整個資料集,請參閱「還原已刪除的資料集」。
- 建立資料集,名稱和位置與原始資料集相同。
- 使用自 Epoch 紀元以來的毫秒格式 (例如
1418864998000),選擇原始資料集遭刪除前的時間戳記。 將
originaldataset.table1資料表在1418864998000時間點的狀態複製到新資料集:bq cp originaldataset.table1@1418864998000 mydataset.mytable
如要找出已刪除資料集中非空白資料表的名稱,請在時間回溯期內查詢資料集的
INFORMATION_SCHEMA.TABLE_STORAGE檢視區塊。
還原已刪除的資料集
如要瞭解如何還原 (或取消刪除) 已刪除的資料集,請參閱「還原已刪除的資料集」。
配額
如要瞭解複製配額,請參閱「複製工作」。您可以在 INFORMATION_SCHEMA 中查看複製作業的使用情形。如要瞭解如何查詢 INFORMATION_SCHEMA.JOBS 檢視表,請參閱「JOBS 檢視表」。
定價
如要瞭解複製資料集的定價資訊,請參閱「資料複製定價」。
BigQuery 會傳送壓縮資料,以供跨區域複製,因此計費資料量可能小於資料集的實際大小。詳情請參閱「BigQuery 定價」一文。