更新資料集屬性
本文說明如何在 BigQuery 中更新資料集屬性。建立資料集之後,您可以更新下列資料集屬性:
事前準備
授予身分與存取權管理 (IAM) 角色,讓使用者取得執行本文件中各項工作的必要權限。
所需權限
如要更新資料集屬性,您必須具備下列 IAM 權限:
bigquery.datasets.update
bigquery.datasets.setIamPolicy
(僅在 Google Cloud 控制台更新資料集存取權控管設定時才需要)
roles/bigquery.dataOwner
預先定義的 IAM 角色包含更新資料集資源所需的權限。
此外,如果您具備 bigquery.datasets.create
權限,就可以更新所建立資料集的屬性。
如要進一步瞭解 BigQuery 中的 IAM 角色和權限,請參閱「預先定義的角色與權限」一文。
更新資料集說明
您可以透過下列方式更新資料集的說明:
- 使用 Google Cloud 控制台。
- 使用 bq 指令列工具的
bq update
指令。 - 呼叫
datasets.patch
API 方法 - 使用用戶端程式庫。
如要更新資料集的說明:
主控台
在「Explorer」面板中展開專案並選取資料集。
展開
「動作」選項,然後按一下「開啟」。在「詳細資料」面板中,按一下
「編輯詳細資料」來編輯說明文字。在隨即顯示的「Edit detail」對話方塊中,執行下列操作:
- 在「Description」欄位輸入說明或編輯現有說明。
- 如要儲存新的說明文字,請按一下「儲存」。
SQL
如要更新資料集的說明,請使用 ALTER SCHEMA SET OPTIONS
陳述式設定 description
選項。
以下範例會為名為 mydataset
的資料集設定說明:
前往 Google Cloud 控制台的「BigQuery」頁面。
在查詢編輯器中輸入以下陳述式:
ALTER SCHEMA mydataset SET OPTIONS ( description = 'Description of mydataset');
按一下
「Run」。
如要進一步瞭解如何執行查詢,請參閱「執行互動式查詢」一文。
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.patch
API 方法 - 使用用戶端程式庫。
您可以設定資料集層級的預設資料表到期時間,也可以在建立資料表時設定資料表的到期時間。如果您在建立資料表時設定到期時間,系統將會忽略資料集的資料表預設到期時間。如果您未在資料集層級設定資料表的預設到期時間,且未在建立資料表時設定到期時間,則資料表永遠不會過期,您必須手動刪除資料表。資料表到期後,系統會刪除該資料表及其內含的所有資料。
更新資料集的資料表預設到期時間設定時:
- 如果您將值從
Never
變更為定義好的到期時間,則除非在建立資料表時已為其設定了到期時間,否則資料集中已存在的任何資料表都不會到期。 - 如果您變更了資料表預設到期時間的值,則任何已存在的資料表都將根據原始的資料表到期時間設定到期。除非您在建立資料表時已為其指定不同的資料表到期時間,否則在資料集中建立的任何新資料表都會套用新的資料表到期時間設定。
資料表預設到期時間的值會依該值的設定位置而有不同的表示方式。請使用可為您提供適當精細層級的方法:
- 在 Google Cloud 控制台中,到期時間會以天為單位表示。
- 在 bq 指令列工具中,到期時間會以秒為單位表示。
- 在 API 中,到期時間會以毫秒為單位表示。
如何更新資料集的預設到期時間:
主控台
在「Explorer」面板中展開專案並選取資料集。
展開
「動作」選項,然後按一下「開啟」。在詳細資料面板中,按一下「Dataset info」旁的鉛筆圖示,即可編輯說明。
在「Dataset info」(資料集資訊) 對話方塊的「Default table expiration」(預設資料表到期時間) 區段中,輸入「Number of days after table creation」(資料表建立後的天數) 的值。
按一下 [儲存]。
SQL
如要更新預設資料表到期時間,請使用 ALTER SCHEMA SET OPTIONS
陳述式設定 default_table_expiration_days
選項。
以下範例會更新名為 mydataset
的資料集的預設資料表到期時間。
前往 Google Cloud 控制台的「BigQuery」頁面。
在查詢編輯器中輸入以下陳述式:
ALTER SCHEMA mydataset SET OPTIONS( default_table_expiration_days = 3.75);
按一下
「Run」。
如要進一步瞭解如何執行查詢,請參閱「執行互動式查詢」一文。
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.patch
API 方法 - 使用用戶端程式庫。
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);
按一下
「Run」。
如要進一步瞭解如何執行查詢,請參閱「執行互動式查詢」一文。
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.update
API 方法。update
方法會取代整個資料集資源,而patch
方法只會取代提交資料集資源中提供的欄位。
如要進一步瞭解時間旅行視窗,請參閱「設定時間旅行視窗」。
如要更新資料集的時間回溯期,請按照下列步驟操作:
主控台
- 在「Explorer」面板中展開專案並選取資料集。
- 展開 「動作」選項,然後按一下「開啟」。
- 在「詳細資料」面板中,按一下 「編輯詳細資料」。
- 展開「進階選項」,然後選取要使用的「時間旅行視窗」。
- 按一下 [儲存]。
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
,其中時間回溯期的時間長度以小時為單位。
按一下
「Run」。
如要進一步瞭解如何執行查詢,請參閱「執行互動式查詢」一文。
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」面板中展開專案並選取資料集。
- 展開 「動作」選項,然後按一下「開啟」。
- 在「詳細資料」面板中,按一下 「編輯詳細資料」。
- 展開「進階選項」,然後選取「啟用實體儲存空間計費模式」即可使用實體儲存空間計費模式,取消選取該選項則可使用邏輯儲存空間計費模式。
- 按一下 [儲存]。
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
)
按一下
「Run」。
如要進一步瞭解如何執行查詢,請參閱「執行互動式查詢」一文。
如要針對專案中的所有資料集更新儲存空間帳單模型,請針對每個資料集所在的區域使用以下 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 資料集的存取權,請參閱「控管資料集存取權」。如要進一步瞭解資料加密,請參閱「靜態資料加密」。