更新資料集屬性
本文說明如何在 BigQuery 中更新資料集屬性。建立資料集後,您可以更新下列資料集屬性:
事前準備
授予身分與存取權管理 (IAM) 角色,讓使用者擁有執行本文件各項工作所需的權限。
所需權限
如要更新資料集屬性,您需要下列 IAM 權限:
bigquery.datasets.updatebigquery.datasets.setIamPolicy(僅在 Google Cloud 控制台中更新資料集存取權控管設定時需要)
roles/bigquery.dataOwner 預先定義的 IAM 角色包含更新資料集屬性所需的權限。
此外,如果您具備 bigquery.datasets.create 權限,可以更新所建立資料集的屬性。
如要進一步瞭解 BigQuery 中的 IAM 角色和權限,請參閱預先定義的角色與權限一文。
更新資料集說明
您可以透過下列方式更新資料集的說明:
- 使用 Google Cloud 控制台。
- 使用 bq 指令列工具的
bq update指令。 - 呼叫
datasets.patchAPI 方法 - 使用用戶端程式庫。
如要更新資料集的說明:
控制台
點選左側窗格中的 「Explorer」:

如果沒有看到左側窗格,請按一下「展開左側窗格」圖示 開啟窗格。
在「Explorer」窗格中展開專案,按一下「Datasets」(資料集),然後按一下資料集。
在「詳細資料」窗格中,按一下「編輯詳細資料」,編輯說明文字。
在隨即顯示的「編輯詳細資料」對話方塊中,執行下列操作:
- 在「Description」(說明) 欄位中輸入說明,或編輯現有說明。
- 如要儲存新的說明文字,請按一下「儲存」。
SQL
如要更新資料集的說明,請使用 ALTER SCHEMA SET OPTIONS 陳述式設定 description 選項。
以下範例會為名為 mydataset 的資料集設定說明:
前往 Google Cloud 控制台的「BigQuery」頁面。
在查詢編輯器中輸入下列陳述式:
ALTER SCHEMA mydataset SET OPTIONS ( description = 'Description of mydataset');
按一下「執行」。
如要進一步瞭解如何執行查詢,請參閱「執行互動式查詢」。
bq
發出含有 --description 旗標的 bq update 指令。如果您要更新非預設專案中的資料集,請使用下列格式將專案 ID 新增至資料集名稱:project_id:dataset。
bq update \ --description "string" \ project_id:dataset
更改下列內容:
string:描述資料集的文字 (以引號表示)project_id:專案 IDdataset:您要更新的資料集名稱
範例:
輸入下列指令,將 mydataset 的說明變更為「Description of mydataset」(mydataset 的說明)。mydataset 在您的預設專案中。
bq update --description "Description of mydataset" mydataset
輸入下列指令,將 mydataset 的說明變更為「Description of mydataset」(mydataset 的說明)。該資料集位於 myotherproject,而非預設專案。
bq update \
--description "Description of mydataset" \
myotherproject:mydataset
API
呼叫 datasets.patch 並更新資料集資源中的 description 屬性。由於 datasets.update 方法會取代整個資料集資源,因此建議使用 datasets.patch 方法。
Go
在試用這個範例之前,請先按照「使用用戶端程式庫的 BigQuery 快速入門導覽課程」中的 Go 設定操作說明進行操作。詳情請參閱 BigQuery Go API 參考說明文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
Java
在試用這個範例之前,請先按照「使用用戶端程式庫的 BigQuery 快速入門導覽課程」中的 Java 設定操作說明進行操作。詳情請參閱 BigQuery Java API 參考說明文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
使用 Dataset.toBuilder() 方法,從現有的 Dataset 執行個體建立 Dataset.Builder 執行個體。設定資料集製作工具物件。使用 Dataset.Builder.build() 方法建構經過更新的資料集,並呼叫 Dataset.update() 方法,將更新傳送至 API。Node.js
在試用這個範例之前,請先按照「使用用戶端程式庫的 BigQuery 快速入門導覽課程」中的 Node.js 設定操作說明進行操作。詳情請參閱 BigQuery Node.js API 參考說明文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
Python
在試用這個範例之前,請先按照「使用用戶端程式庫的 BigQuery 快速入門導覽課程」中的 Python 設定操作說明進行操作。詳情請參閱 BigQuery Python API 參考說明文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
設定 Dataset.description 屬性,並呼叫 Client.update_dataset() 方法,將更新傳送至 API。更新預設資料表的到期時間
您可以透過下列方式更新資料集的預設資料表到期時間:
- 使用 Google Cloud 控制台。
- 使用 bq 指令列工具的
bq update指令。 - 呼叫
datasets.patchAPI 方法 - 使用用戶端程式庫。
您可以設定資料集層級的預設資料表到期時間,也可以在建立資料表時設定資料表的到期時間。如果您在建立資料表時設定到期時間,系統將會忽略資料集的資料表預設到期時間。如果您未在資料集層級設定資料表的預設到期時間,也未在建立資料表時設定到期時間,則資料表將永遠不會過期,您必須以手動方式才能刪除資料表。資料表過期後,系統會刪除該資料表和其中的所有資料。
更新資料集的資料表預設到期時間設定時:
- 如果您將值從
Never變更為定義好的到期時間,則除非在建立資料表時已為其設定了到期時間,否則資料集中已存在的任何資料表都不會到期。 - 如果您變更了資料表預設到期時間的值,則任何已存在的資料表都將根據原始的資料表到期時間設定到期。除非您在建立資料表時已為其指定不同的資料表到期時間,否則在資料集中建立的任何新資料表都會套用新的資料表到期時間設定。
資料表預設到期時間的值會依該值的設定位置而有不同的表示方式。請使用可為您提供適當精細層級的方法:
- 在 Google Cloud 控制台中,到期時間會以天為單位表示。
- 在 bq 指令列工具中,到期時間會以秒為單位表示。
- 在 API 中,到期時間會以毫秒為單位表示。
如何更新資料集的預設到期時間:
控制台
點選左側窗格中的 「Explorer」:

在「Explorer」窗格中展開專案,按一下「Datasets」(資料集),然後按一下資料集。
在「詳細資料」分頁中,按一下「編輯詳細資料」,即可編輯到期時間。
在「Edit detail」(編輯詳細資料) 對話方塊的「Default table expiration」(預設資料表到期時間) 區段中,選取「Enable table expiration」(啟用資料表到期時間),然後輸入「Default maximum table age」(預設資料表存在時間上限) 的值。
按一下 [儲存]。
SQL
如要更新預設資料表的到期時間,請使用 ALTER SCHEMA SET OPTIONS 陳述式設定 default_table_expiration_days 選項。
以下範例會更新名為 mydataset 的資料集預設資料表到期時間。
前往 Google Cloud 控制台的「BigQuery」頁面。
在查詢編輯器中輸入下列陳述式:
ALTER SCHEMA mydataset SET OPTIONS( default_table_expiration_days = 3.75);
按一下「執行」。
如要進一步瞭解如何執行查詢,請參閱「執行互動式查詢」。
bq
如要更新資料集中新建立之資料表的預設到期時間,請輸入 bq update 指令並加上 --default_table_expiration 旗標。如果您要更新非預設專案中的資料集,請使用下列格式將專案 ID 新增至資料集名稱:project_id:dataset。
bq update \ --default_table_expiration integer \ project_id:dataset
更改下列內容:
integer:新建立資料表的預設生命週期 (以秒為單位)。最小值是 3600 秒 (1 小時)。到期時間為目前世界標準時間加整數值。指定0即可移除現有的到期時間。在資料集中建立的任何資料表都會在建立時間後integer秒刪除。如果您未在建立資料表時設定資料表到期時間,則會套用這個值。project_id:您的專案 ID。dataset:您要更新的資料集名稱。
範例:
輸入下列指令,將在 mydataset 中建立之新資料表的預設到期時間設為距離目前時間兩小時 (7,200 秒)。該資料集位於預設專案中。
bq update --default_table_expiration 7200 mydataset
輸入下列指令,將在 mydataset 中建立之新資料表的預設到期時間設為距離目前時間兩小時 (7,200 秒)。該資料集位於 myotherproject,而非預設專案。
bq update --default_table_expiration 7200 myotherproject:mydataset
API
呼叫 datasets.patch 並更新資料集資源中的 defaultTableExpirationMs 屬性。API 中的到期時間是以毫秒為單位表示。由於 datasets.update 方法會取代整個資料集的資源,因此建議您使用 datasets.patch 方法。
Go
在試用這個範例之前,請先按照「使用用戶端程式庫的 BigQuery 快速入門導覽課程」中的 Go 設定操作說明進行操作。詳情請參閱 BigQuery Go API 參考說明文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
Java
在試用這個範例之前,請先按照「使用用戶端程式庫的 BigQuery 快速入門導覽課程」中的 Java 設定操作說明進行操作。詳情請參閱 BigQuery Java API 參考說明文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
使用 Dataset.toBuilder() 方法,從現有的 Dataset 執行個體建立 Dataset.Builder 執行個體。設定資料集製作工具物件。使用 Dataset.Builder.build() 方法建構經過更新的資料集,並呼叫 Dataset.update() 方法,將更新傳送至 API。使用 Dataset.Builder.setDefaultTableLifetime() 方法設定預設到期時間。
Node.js
在試用這個範例之前,請先按照「使用用戶端程式庫的 BigQuery 快速入門導覽課程」中的 Node.js 設定操作說明進行操作。詳情請參閱 BigQuery Node.js API 參考說明文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
Python
在試用這個範例之前,請先按照「使用用戶端程式庫的 BigQuery 快速入門導覽課程」中的 Python 設定操作說明進行操作。詳情請參閱 BigQuery Python API 參考說明文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
設定 Dataset.default_table_expiration_ms 屬性,並呼叫 Client.update_dataset() ,將更新傳送至 API。更新預設分區到期時間
您可以透過下列方式更新資料集的預設分區到期時間:
- 使用 bq 指令列工具的
bq update指令。 - 呼叫
datasets.patchAPI 方法 - 使用用戶端程式庫。
Google Cloud 控制台不支援設定或更新資料集的預設分區到期時間。
您可以在資料集層級設定預設分區到期時間,該設定會影響所有新建立的分區資料表,也可以在建立分區資料表時設定個別資料表的分區到期時間。如果您同時在資料集層級設定了預設分區到期時間和預設資料表到期時間,新建立的分區資料表只會套用分區到期時間。也就是說,如果您同時了設定這兩個選項,預設分區到期時間會覆寫預設資料表到期時間。
如果您在建立分區資料表時即設定了分區到期時間,該值會覆寫資料集層級的預設分區到期時間 (如有)。
如果您未設定資料集層級的預設分區到期時間,也未在建立資料表時設定分區到期時間,則分區永遠不會過期,直到您手動刪除分區為止。
當您設定資料集的預設分區到期時間時,到期時間會套用至在資料集中建立之所有分區資料表中的所有分區。當您設定資料表的分區到期時間時,到期時間會套用至在指定資料表中建立的所有分區。您無法對同一資料表中不同的分區套用不同的到期時間。
更新資料集的預設分區到期時間設定時:
- 如果您將值從
never變更為定義好的到期時間,則除非您在建立資料表時已為其設定分區到期時間,否則資料集中分區資料表內的任何既有分區都不會到期。 - 如果您變更了預設分區到期時間的值,既有分區資料表中的任何分區是否到期都將根據原始的分區到期時間設定到期。除非您在建立資料表時已為其指定不同的分區到期時間,否則在資料集中建立的任何新分區資料表都會套用新的預設分區到期時間設定。
預設分區到期時間的值會依該值的設定位置而有不同的表示方式。請使用可為您提供適當精細層級的方法:
- 在 bq 指令列工具中,到期時間會以秒為單位表示。
- 在 API 中,到期時間會以毫秒為單位表示。
如何更新資料集的預設到期時間:
控制台
Google Cloud 控制台不支援更新資料集的預設分區到期時間。
SQL
如要更新預設分區到期時間,請使用 ALTER SCHEMA SET OPTIONS 陳述式設定 default_partition_expiration_days 選項。
以下範例會更新名為 mydataset 的資料集預設分區到期時間:
前往 Google Cloud 控制台的「BigQuery」頁面。
在查詢編輯器中輸入下列陳述式:
ALTER SCHEMA mydataset SET OPTIONS( default_partition_expiration_days = 3.75);
按一下「執行」。
如要進一步瞭解如何執行查詢,請參閱「執行互動式查詢」。
bq
如要更新資料集的預設到期時間,請輸入 bq update 指令並加上 --default_partition_expiration 旗標。如果您要更新非預設專案中的資料集,請使用下列格式將專案 ID 新增至資料集名稱:project_id:dataset。
bq update \ --default_partition_expiration integer \ project_id:dataset
更改下列內容:
integer:新建分區資料表中分區的預設生命週期 (以秒為單位)。此旗標沒有最小值。指定0即可移除現有的到期時間。新建立分區資料表中的任何分區都會在分區的世界標準時間日期起integer秒後刪除。如果您未在建立資料表時設定資料表的分區到期時間,則會套用這個值。project_id:您的專案 ID。dataset:您要更新的資料集名稱。
範例:
輸入下列指令,將在 mydataset 中建立之新分區資料表的預設分區到期時間設定為 26 小時 (93,600 秒)。該資料集位於預設專案中。
bq update --default_partition_expiration 93600 mydataset
輸入下列指令,將在 mydataset 中建立之新分區資料表的預設分區到期時間設定為 26 小時 (93,600 秒)。該資料集位於 myotherproject,而非預設專案。
bq update --default_partition_expiration 93600 myotherproject:mydataset
API
呼叫 datasets.patch 並更新資料集資源中的 defaultPartitionExpirationMs 屬性。到期時間會以毫秒為單位表示。由於 datasets.update 方法會取代整個資料集資源,因此建議使用 datasets.patch 方法。
更新捨入模式
您可以使用 ALTER SCHEMA SET OPTIONS DDL 陳述式,更新資料集的預設捨入模式。以下範例會將 mydataset 的預設捨去模式更新為 ROUND_HALF_EVEN。
ALTER SCHEMA mydataset SET OPTIONS ( default_rounding_mode = "ROUND_HALF_EVEN");
這會為資料集中建立的新資料表設定預設捨入模式。這項設定不會影響新增至現有資料表的資料欄。如果資料集中的資料表已設定預設捨入模式,系統會覆寫這項選項。
更新時間回溯期
您可以透過下列方式更新資料集的時空旅行時間範圍:
- 使用 Google Cloud 控制台。
- 使用
ALTER SCHEMA SET OPTIONS陳述式。 - 使用 bq 指令列工具的
bq update指令。 - 呼叫
datasets.patch或datasets.updateAPI 方法。update方法會取代整個資料集資源,而patch方法只會取代提交的資料集資源中提供的欄位。
如要進一步瞭解時空旅行視窗,請參閱「設定時空旅行視窗」。
如要更新資料集的時間回溯期:
控制台
點選左側窗格中的 「Explorer」:

在「Explorer」窗格中展開專案,按一下「Datasets」(資料集),然後按一下資料集。
在「詳細資料」分頁中,按一下「編輯詳細資料」圖示 。
展開「Advanced options」(進階選項),然後選取要使用的「Time travel window」(時空旅行視窗)。
按一下 [儲存]。
SQL
使用 ALTER SCHEMA SET OPTIONS 陳述式和 max_time_travel_hours 選項,在變更資料集時指定時間旅行視窗。max_time_travel_hours 值必須是 24 的倍數 (48、72、96、120、144、168),且介於 48 (2 天) 和 168 (7 天) 之間的整數。
前往 Google Cloud 控制台的「BigQuery」頁面。
在查詢編輯器中輸入下列陳述式:
ALTER SCHEMA DATASET_NAME SET OPTIONS( max_time_travel_hours = HOURS);
更改下列內容:
DATASET_NAME:您要更新的資料集名稱HOURS,並以小時為單位指定時間回溯期的長度。
按一下「執行」。
如要進一步瞭解如何執行查詢,請參閱「執行互動式查詢」。
bq
使用 bq update 指令搭配 --max_time_travel_hours 旗標,在變更資料集時指定時間旅行視窗。--max_time_travel_hours 值必須是 24 的倍數 (48、72、96、120、144、168),且介於 48 (2 天) 和 168 (7 天) 之間的整數。
bq update \
--dataset=true --max_time_travel_hours=HOURS \
PROJECT_ID:DATASET_NAME
取代下列項目:
PROJECT_ID:專案 IDDATASET_NAME:您要更新的資料集名稱HOURS,時間回溯期長度以小時為單位
API
呼叫 datasets.patch 或 datasets.update 方法,搭配已定義的資料集資源,並在其中指定 maxTimeTravelHours 欄位的值。maxTimeTravelHours 值必須是 24 的倍數 (48、72、96、120、144、168),且介於 48 (2 天) 和 168 (7 天) 之間。
更新儲存空間計費模式
您可以變更資料集的儲存空間計費模式。將 storage_billing_model 值設為 PHYSICAL,即可在計算儲存空間變更時使用實體位元組;設為 LOGICAL 則可使用邏輯位元組。預設值為 LOGICAL。
變更資料集的計費模式後,需要 24 小時才會生效。
變更資料集的儲存空間計費模式後,必須等待 14 天,才能再次變更儲存空間計費模式。
控制台
點選左側窗格中的 「Explorer」:

在「Explorer」窗格中展開專案,按一下「Datasets」(資料集),然後按一下資料集。
在「詳細資料」分頁中,按一下「編輯詳細資料」圖示 。
展開「Advanced options」(進階選項)。
在「儲存空間計費模式」選單中,選取「實體」即可使用實體儲存空間計費,選取「邏輯」即可使用邏輯儲存空間計費。您也可以選取「Storage_billing_model_unspecified」Storage_billing_model_unspecified。
按一下 [儲存]。
SQL
如要更新資料集的帳單模式,請使用 ALTER SCHEMA SET OPTIONS 陳述式並設定 storage_billing_model 選項:
前往 Google Cloud 控制台的「BigQuery」頁面。
在查詢編輯器中輸入下列陳述式:
ALTER SCHEMA DATASET_NAME SET OPTIONS( storage_billing_model = 'BILLING_MODEL');
更改下列內容:
DATASET_NAME,並換成您要變更的資料集名稱BILLING_MODEL,選擇要使用的儲存空間類型,可以是LOGICAL或PHYSICAL
按一下「執行」。
如要進一步瞭解如何執行查詢,請參閱「執行互動式查詢」。
如要更新專案中所有資料集的儲存空間計費模式,請針對每個資料集所在的區域使用下列 SQL 查詢:
FOR record IN (SELECT CONCAT(catalog_name, '.', schema_name) AS dataset_path FROM PROJECT_ID.region-REGION.INFORMATION_SCHEMA.SCHEMATA) DO EXECUTE IMMEDIATE "ALTER SCHEMA `" || record.dataset_path || "` SET OPTIONS(storage_billing_model = 'BILLING_MODEL')"; END FOR;
更改下列內容:
- 將
PROJECT_ID改成您的專案 ID REGION,並加上區域限定符BILLING_MODEL,選擇要使用的儲存空間類型,可以是LOGICAL或PHYSICAL
bq
如要更新資料集的計費模式,請使用 bq update 指令並設定 --storage_billing_model 旗標:
bq update -d --storage_billing_model=BILLING_MODEL PROJECT_ID:DATASET_NAME
取代下列項目:
PROJECT_ID:專案 IDDATASET_NAME:您要更新的資料集名稱BILLING_MODEL:您要使用的儲存空間類型,可以是LOGICAL或PHYSICAL
API
使用已定義的資料集資源呼叫 datasets.update 方法,並設定 storageBillingModel 欄位。
以下範例說明如何使用 curl 呼叫 datasets.update:
curl -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" -L -X PUT https://bigquery.googleapis.com/bigquery/v2/projects/PROJECT_ID/datasets/DATASET_ID -d '{"datasetReference": {"projectId": "PROJECT_ID", "datasetId": "DATASET_NAME"}, "storageBillingModel": "BILLING_MODEL"}'
取代下列項目:
PROJECT_ID:專案 IDDATASET_NAME:您要更新的資料集名稱BILLING_MODEL:您要使用的儲存空間類型,可以是LOGICAL或PHYSICAL
更新存取權控管設定
如要在 BigQuery 中控管資料集存取權,請參閱「控管資料集存取權」。如要瞭解資料加密,請參閱「靜態加密」。