使用運算單元保留功能
BigQuery Reservation API 可讓您購買專用運算單元 (稱為承諾)、建立運算單元資源池 (稱為預留項目),以及將專案、資料夾和機構指派給這些預留項目。
您可以使用保留項目,為工作負載指派專屬的運算單元數量。舉例來說,您可能不希望實際工作環境工作負載與測試工作負載爭奪運算單元。您可以建立名為 prod
的保留項目,並將正式工作負載指派給這個保留項目。詳情請參閱「預留」。
建立預留項目
所需權限
如要建立預留項目,您必須具備下列身分與存取權管理 (IAM) 權限:
- 管理專案的
bigquery.reservations.create
,可維護承諾的擁有權。
下列預先定義的 IAM 角色都包含此權限:
BigQuery Resource Editor
BigQuery Resource Admin
如要進一步瞭解 BigQuery 中的 IAM 角色,請參閱「預先定義的角色與權限」一文。
使用專屬的運算單元建立預留項目
選取下列選項之一:
主控台
前往 Google Cloud 控制台的「BigQuery」頁面。
在導覽選單中,按一下「Capacity management」(容量管理)。
按一下「Create reservation」(建立預留項目)。
在「Reservation name」(預留項目名稱) 欄位中,輸入預留項目的名稱。
在「位置」清單中選取位置。如果選取 BigQuery Omni 位置,則只能選擇 Enterprise 版本。
在「Edition」清單中選取版本。BigQuery 版本功能 (例如自動調度) 僅適用於特定版本。詳情請參閱「BigQuery 版本簡介」。
在「預留項目大小選取器」清單中,選取預留項目大小上限。
選用:在「基準運算單元」欄位中,輸入保留項目的基準運算單元數量。
可用的自動調度資源運算單元數量,取決於最大預留項目大小減去基準運算單元值後的結果。舉例來說,如果您建立的預留項目有 100 個基準運算單元,且預留項目大小上限為 400,則預留項目會有 300 個自動調度資源運算單元。如要進一步瞭解基準運算單元,請參閱「使用保留項目搭配基準和自動調度運算單元」。
如要停用閒置的運算單元共用功能,並只使用指定的運算單元容量,請按一下「忽略閒置的運算單元」切換鈕。
如要展開「進階設定」部分,請按一下
展開箭頭。選用:如要設定目標工作並行設定,請按一下「覆寫自動目標工作並行設定」切換鈕,然後輸入「目標工作並行設定」。
時段的明細資料會顯示在「費用預估」表格中。系統會在「容量摘要」表格中顯示保留項目摘要。
按一下 [儲存]。
您可以在「Slot reservations」分頁中看到新預訂項目。
SQL
如要建立預留項目,請使用 CREATE RESERVATION
DDL 陳述式。
前往 Google Cloud 控制台的「BigQuery」頁面。
在查詢編輯器中輸入以下陳述式:
CREATE RESERVATION `ADMIN_PROJECT_ID.region-LOCATION.RESERVATION_NAME` OPTIONS ( slot_capacity = NUMBER_OF_BASELINE_SLOTS, edition = EDITION, autoscale_max_slots = NUMBER_OF_AUTOSCALING_SLOTS);
請依指示取代下列項目:
ADMIN_PROJECT_ID
:擁有預留資源的管理專案專案 IDLOCATION
:預訂的地點。如果您選取 BigQuery Omni 位置,則只能選擇企業版。RESERVATION_NAME
:預訂項目名稱名稱只能包含小寫英數字元或破折號,開頭必須是字母,結尾不得為破折號,長度上限為 64 個半形字元。
NUMBER_OF_BASELINE_SLOTS
:要分配給保留項目的運算單元基準數量。您無法在同一個預留作業中設定slot_capacity
和edition
選項。EDITION
:預訂版本。將預留資料指派給某個版本時,功能和價格也會隨之變更。詳情請參閱「BigQuery 版本簡介」。NUMBER_OF_AUTOSCALING_SLOTS
:保留項目指派的自動調度資源單元數量。這個值等於保留項目大小上限減去基準運算單元數量。
按一下
「Run」。
如要進一步瞭解如何執行查詢,請參閱「執行互動式查詢」一文。
bq
如要建立保留項目,請使用 bq mk
指令搭配 --reservation
標記:
bq mk \ --project_id=ADMIN_PROJECT_ID \ --location=LOCATION \ --reservation \ --slots=NUMBER_OF_BASELINE_SLOTS \ --ignore_idle_slots=false \ --edition=EDITION \ --autoscale_max_slots=NUMBER_OF_AUTOSCALING_SLOTS \ --max_slots=MAXIMUM_NUMBER_OF_SLOTS --scaling_mode=SCALING_MODE RESERVATION_NAME
更改下列內容:
ADMIN_PROJECT_ID
:專案 IDLOCATION
:預訂的地點。如果選取 BigQuery Omni 位置,則只能選擇 Enterprise 版本。NUMBER_OF_BASELINE_SLOTS
:要分配給預留項目的基準運算單元數量RESERVATION_NAME
:保留項目的名稱。名稱只能包含小寫英數字元或破折號,開頭必須是字母,結尾不得為破折號,長度上限為 64 個半形字元。EDITION
:預訂版本。將預留資料指派給某個版本時,功能和價格也會隨之變更。詳情請參閱「BigQuery 版本簡介」。NUMBER_OF_AUTOSCALING_SLOTS
:保留項目指派的自動調度資源單元數量。這個值等於保留項目大小上限減去基準運算單元數量。您無法使用--max_slots
或--scaling_mode
旗標設定此選項。MAXIMUM_NUMBER_OF_SLOTS
:預留項目可使用的運算單元數量上限。這個值必須使用--scaling_mode
標記進行設定 (預先發布版)。SCALING_MODE
:保留空間的縮放模式。選項包括ALL_SLOTS
、IDLE_SLOTS_ONLY
或AUTOSCALE_ONLY
。這個值必須使用--scaling_mode
標記進行設定 (預先發布版)。
如要瞭解 --ignore_idle_slots
標記,請參閱「閒置時段」。預設值為 false
。
Terraform
使用 google_bigquery_reservation
資源。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
以下範例會建立名為 my-reservation
的預訂:
如要在 Google Cloud 專案中套用 Terraform 設定,請完成下列各節中的步驟。
準備 Cloud Shell
- 啟動 Cloud Shell。
-
設定要套用 Terraform 設定的預設 Google Cloud 專案。
您只需為每個專案執行這個指令一次,而且可以在任何目錄中執行。
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
如果您在 Terraform 設定檔中設定明確的值,系統就會覆寫環境變數。
準備目錄
每個 Terraform 設定檔都必須有自己的目錄 (也稱為根模組)。
-
在 Cloud Shell 中建立目錄,並在該目錄中建立新檔案。檔案名稱必須包含
.tf
副檔名,例如main.tf
。在本教學課程中,檔案稱為main.tf
。mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
如果您正在參考教學課程,可以複製各個章節或步驟中的程式碼範例。
將範例程式碼複製到新建立的
main.tf
中。您可以視需要從 GitHub 複製程式碼。如果 Terraform 程式碼片段是端對端解決方案的一部分,建議您採用這種做法。
- 查看並修改要套用至環境的範例參數。
- 儲存變更。
-
初始化 Terraform。這項操作只需對每個目錄執行一次。
terraform init
如要使用最新版的 Google 供應器,您可以選擇加入
-upgrade
選項:terraform init -upgrade
套用變更
-
檢查設定,確認 Terraform 要建立或更新的資源符合您的預期:
terraform plan
視需要修正設定。
-
執行下列指令,並在提示中輸入
yes
,即可套用 Terraform 設定:terraform apply
等待 Terraform 顯示「Apply complete!」(套用完成) 訊息。
- 開啟 Google Cloud 專案即可查看結果。在 Google Cloud 控制台中,前往 UI 中的資源,確認 Terraform 已建立或更新這些資源。
Python
建立可預測的預留項目
您必須先啟用以預留為準的平衡機制,才能建立設有運算單元數量上限的預留項目。
啟用以預留為準的平衡機制
如要啟用以預留為準的平衡機制,請將 enable_reservation_based_fairness
標記設為 true
。
如要更新專案的預留項目公平性,您必須具備專案的 bigquery.config.update
權限,才能保留預留項目的擁有權。預先定義的 BigQuery Admin
角色具備這項權限。
如要進一步瞭解如何更新專案的預設設定,請參閱「管理設定」。
ALTER PROJECT `PROJECT_NAME` SET OPTIONS ( `region-LOCATION.enable_reservation_based_fairness`= true);
更改下列內容:
建立可預測的預留項目
如要建立設有運算單元數量上限的預留項目,請選取下列任一選項:
主控台
前往 Google Cloud 控制台的「BigQuery」頁面。
在導覽面板中,前往「容量管理」區段,然後點選「建立預留項目」。
在「Reservation name」(預留項目名稱) 欄位中,輸入預留項目的名稱。
在「位置」清單中選取位置。如果選取 BigQuery Omni 位置,則只能選擇 Enterprise 版本。
在「Edition」清單中選取版本。自動調度資源功能僅適用於特定版本。詳情請參閱「瞭解 BigQuery 版本」。
在「預留項目大小選取器」清單中,選取預留項目大小上限。
選用:在「基準運算單元」欄位中,輸入保留項目的基準運算單元數量。
可用的自動調度資源運算單元數量,取決於最大預留項目大小減去基準運算單元值後的結果。舉例來說,如果您建立的預留項目有 100 個基準運算單元,且預留項目大小上限為 400,則預留項目會有 300 個自動調度資源運算單元。如要進一步瞭解基準運算單元,請參閱「使用保留項目搭配基準和自動調度運算單元」。
如要停用閒置的運算單元共用功能,並只使用指定的運算單元容量,請按一下「忽略閒置的運算單元」切換鈕。
如要展開「進階設定」部分,請按一下
展開箭頭。- 在「如何使用閒置的運算單元?」清單中,選取設定選項。
時段的明細資料會顯示在「費用預估」表格中。系統會在「容量摘要」表格中顯示保留項目摘要。
按一下 [儲存]。
您可以在「Slot reservations」分頁中看到新預訂項目。
bq
如要建立可預測的保留項目,請使用 bq mk
指令搭配 --reservation
標記,並設定 max_slots
和 scaling_mode
的值:
bq mk \ --project_id=ADMIN_PROJECT_ID \ --location=LOCATION \ --reservation \ --slots=NUMBER_OF_BASELINE_SLOTS \ --ignore_idle_slots=false \ --edition=EDITION \ --max_slots=MAXIMUM_NUMBER_OF_SLOTS \ --scaling_mode=SCALING_MODE RESERVATION_NAME
更改下列內容:
ADMIN_PROJECT_ID
:專案 IDLOCATION
:預訂的地點。如果選取 BigQuery Omni 位置,則只能選擇 Enterprise 版本。NUMBER_OF_BASELINE_SLOTS
:要分配給預留項目的基準運算單元數量RESERVATION_NAME
:預訂名稱EDITION
:預訂版本。將預留資料指派給某個版本時,功能和價格也會隨之變更。詳情請參閱「BigQuery 版本簡介」。MAXIMUM_NUMBER_OF_SLOTS
:預留項目可使用的運算單元數量上限。這個值必須使用--scaling_mode
標記進行設定 (預先發布版)。SCALING_MODE
:保留空間的縮放模式。選項包括ALL_SLOTS
、IDLE_SLOTS_ONLY
或AUTOSCALE_ONLY
。這個值必須使用--scaling_mode
標記進行設定 (預先發布版)。
如要瞭解 --ignore_idle_slots
標記,請參閱「閒置時段」。預設值為 false
。
如要進一步瞭解可預測的預訂,請參閱「可預測的預訂」。
更新預留項目
您可以對預訂進行下列更新:
- 新增或移除運算單元,變更保留項目大小。
- 設定這個預留項目中的查詢是否使用閒置的運算單元。
- 變更保留項目的基準或自動調度運算單元數量。
- 設定目標工作並行作業。
如要變更預訂的版本,請先刪除預訂,然後建立使用更新版本的預訂。
所需權限
如要更新預留項目,您必須具備下列身分與存取權管理 (IAM) 權限:
- 管理專案的
bigquery.reservations.update
,可維護承諾的擁有權。
下列預先定義的 IAM 角色都包含此權限:
BigQuery Admin
BigQuery Resource Admin
BigQuery Resource Editor
如要進一步瞭解 BigQuery 中的 IAM 角色,請參閱「預先定義的角色與權限」一文。
變更預留項目大小
您可以新增或移除現有預訂的時間段。
主控台
前往 Google Cloud 控制台的「BigQuery」頁面。
在導覽選單中,按一下「Capacity management」(容量管理)。
按一下「Slot reservations」(運算單元保留) 分頁標籤。
找出要更新的預訂。
展開
「Actions」 選項。按一下 [編輯]。
在「預留項目大小選取器」對話方塊中,輸入預留項目大小上限。
在「Baseline slots」(基準運算單元) 欄位中,輸入基準運算單元數量。
如要展開「進階設定」部分,請按一下
展開箭頭。選用:如要設定目標工作並行設定,請按一下「覆寫自動目標工作並行設定」切換鈕,然後輸入「目標工作並行設定」。
按一下 [儲存]。
SQL
如要變更保留空間的大小,請使用 ALTER RESERVATION SET OPTIONS
資料定義語言 (DDL) 陳述式。
前往 Google Cloud 控制台的「BigQuery」頁面。
在查詢編輯器中輸入以下陳述式:
ALTER RESERVATION `ADMIN_PROJECT_ID.region-LOCATION.RESERVATION_NAME` SET OPTIONS ( slot_capacity = NUMBER_OF_BASELINE_SLOTS, autoscale_max_slots = NUMBER_OF_AUTOSCALING_SLOTS);
請依指示取代下列項目:
按一下
「Run」。
如要進一步瞭解如何執行查詢,請參閱「執行互動式查詢」一文。
bq
如要更新保留空間大小,請使用 bq update
指令並加上 --reservation
標記:
bq update \ --project_id=ADMIN_PROJECT_ID \ --location=LOCATION \ --slots=NUMBER_OF_BASELINE_SLOTS \ --autoscale_max_slots=NUMBER_OF_AUTOSCALING_SLOTS \ --reservation RESERVATION_NAME
更改下列內容:
ADMIN_PROJECT_ID
:專案 IDLOCATION
:預訂的地點NUMBER_OF_BASELINE_SLOTS
:要分配給預留項目的基準運算單元數量RESERVATION_NAME
:保留項目的名稱。名稱只能包含小寫英數字元或破折號,開頭必須是字母,結尾不得為破折號,長度上限為 64 個半形字元。NUMBER_OF_AUTOSCALING_SLOTS
:保留項目指派的自動調度資源單元數量。這個值等於保留項目大小上限減去基準運算單元數量。
Python
設定查詢是否使用閒置的運算單元
--ignore_idle_slots
標記可控制在預留項目中執行的查詢是否可以使用其他預留項目的閒置運算單元。詳情請參閱「閒置時段」。您可以在現有預訂中更新這項設定。
如要更新保留項目,請使用 bq update
指令搭配 --reservation
旗標。以下範例將 --ignore_idle_slots
設為 true
,表示預訂只會使用預訂時分配的時段。
bq update \ --project_id=ADMIN_PROJECT_ID \ --location=LOCATION \ --ignore_idle_slots=true \ --reservation RESERVATION_NAME
更改下列內容:
ADMIN_PROJECT_ID
:專案 IDLOCATION
:預訂的地點RESERVATION_NAME
:保留項目的名稱。名稱只能包含小寫英數字元或破折號,開頭必須是字母,結尾不得為破折號,長度上限為 64 個半形字元。
列出閒置的插槽設定
如要列出預留空間的閒置時段設定,請按照下列步驟操作:
SQL
查詢 INFORMATION_SCHEMA.RESERVATIONS_BY_PROJECT
檢視畫面的 ignore_idle_slots
欄。
前往 Google Cloud 控制台的「BigQuery」頁面。
在查詢編輯器中輸入以下陳述式:
SELECT reservation_name, ignore_idle_slots FROM `ADMIN_PROJECT_ID.region-LOCATION`.INFORMATION_SCHEMA.RESERVATIONS_BY_PROJECT;
請依指示取代下列項目:
按一下
「Run」。
如要進一步瞭解如何執行查詢,請參閱「執行互動式查詢」一文。
bq
請使用 bq ls
指令,並加上 --reservation
旗標:
bq ls --reservation \ --project_id=ADMIN_PROJECT_ID \ --location=LOCATION
更改下列內容:
ignoreIdleSlots
欄位包含設定。
刪除保留項目
刪除保留項目後,目前正在執行該保留項目中運算單元的任何工作都會失敗。為避免發生錯誤,請先等待執行中的工作完成,再刪除預留作業。
所需權限
如要刪除預留項目,您必須具備下列身分與存取權管理 (IAM) 權限:
- 管理專案的
bigquery.reservations.delete
,可維護承諾的擁有權。
下列預先定義的 IAM 角色都包含此權限:
BigQuery Admin
BigQuery Resource Admin
BigQuery Resource Editor
如要進一步瞭解 BigQuery 中的 IAM 角色,請參閱「預先定義的角色與權限」一文。
刪除預留項目
主控台
前往 Google Cloud 控制台的「BigQuery」頁面。
在導覽選單中,按一下「Capacity management」(容量管理)。
按一下「Reservations」分頁標籤。
找出要刪除的預訂。
展開
「Actions」 選項。點選「刪除」。
按一下「Delete reservation」(刪除保留項目) 對話方塊中的「Delete」(刪除)。
SQL
如要刪除預訂,請使用 DROP RESERVATION
DDL 陳述式。
前往 Google Cloud 控制台的「BigQuery」頁面。
在查詢編輯器中輸入以下陳述式:
DROP RESERVATION `ADMIN_PROJECT_ID.region-LOCATION.RESERVATION_NAME`;
請依指示取代下列項目:
按一下
「Run」。
如要進一步瞭解如何執行查詢,請參閱「執行互動式查詢」一文。
bq
如要刪除預訂,請使用 bq rm
指令並加上 --reservation
標記:
bq rm \ --project_id=ADMIN_PROJECT_ID \ --location=LOCATION \ --reservation RESERVATION_NAME
更改下列內容:
Python
控管預訂的存取權
如要尋求支援,或針對這項功能提供意見回饋,請來信至 bigquery-wlm-feedback@google.com。
您可以控管哪些使用者可存取特定預訂。使用者必須擁有保留項目的 reservations.use
權限,才能在查詢中覆寫保留項目。
所需權限
如要取得為工作指定特定保留項目所需的權限,請要求管理員為您授予保留資源的 Reservation Editor (roles/bigquery.reservationEditor
) IAM 角色。如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。
這個預先定義的角色包含 reservations.use
權限,這是為工作指定特定預留作業所需的權限。
控管保留訂單的存取權
如要在預訂中設定 Identity and Access Management (IAM) 條件,請執行下列任一操作:
主控台
前往 Google Cloud 控制台的「IAM」頁面。
選取專案、資料夾或機構。
選取要將
bigquery.resourceEditor
角色授予哪一個主體:
如要將
bigquery.resourceEditor
角色授予已在資源中擁有其他角色的主體,請找出包含該主體的資料列,然後按一下該列中的 「Edit principal」(編輯主體),接著按一下 「Add another role」(新增其他角色)。如要將
bigquery.resourceEditor
角色授予主體,但該主體在資源上沒有任何角色,請按一下 「Grant Access」(授予存取權),然後輸入主體的 ID,例如my-user@example.com
。
- 從下拉式清單中選取要授予的
bigquery.resourceEditor
角色。 - 為角色新增條件。舉例來說,您可以新增條件,將角色授予結束於
/reservation1
的所有預訂。 - 按一下 [儲存]。主體會取得資源的角色。
bq
如要授予預訂權限,請使用 bq
set-iam-policy
指令:
bq set-iam-policy projects/project1/locations/US << EOF resource: "RESOURCE" policy { bindings { role: "roles/bigquery.resourceAdmin" members: "user:USER" condition { title: "title" expression: "EXPRESSION" } } } update_mask { paths: "bindings" } EOF
更改下列內容:
RESOURCE
:預訂資源的名稱。USER
:您要授予角色的使用者電子郵件地址。EXPRESSION
:用於授予角色的運算式。例如:resource.name.endsWith(\"/res1\")
如要進一步瞭解身分與存取權管理,請參閱「管理其他資源的存取權」。