使用運算單元保留功能
透過 BigQuery Reservation API,您可以購買專屬運算單元 (稱為「承諾」)、建立運算單元集區 (稱為「預留項目」),以及將專案、資料夾和機構指派給這些預留項目。
保留項目可讓您為工作負載指派專屬的運算單元數量。舉例來說,您可能不希望實際工作環境工作負載與測試工作負載爭奪運算單元。您可以建立名為 prod 的預留項目,並將生產工作負載指派給這個預留項目。詳情請參閱「預留項目」。
建立預留項目
所需權限
如要建立預留項目,您必須具備下列身分與存取權管理 (IAM) 權限:
- bigquery.reservations.create,該管理專案會維護承諾使用合約的所有權。
下列預先定義的 IAM 角色都具備這項權限:
- BigQuery Resource Editor
- BigQuery Resource Admin
如要進一步瞭解 BigQuery 中的 IAM 角色,請參閱預先定義的角色與權限一文。
使用專屬運算單元建立預留項目
選取下列選項之一:
主控台
- 前往 Google Cloud 控制台的「BigQuery」頁面。 
- 在導覽選單中,按一下「容量管理」。 
- 按一下「建立預留項目」。 
- 在「Reservation name」(預留項目名稱) 欄位中,輸入預留項目的名稱。 
- 在「位置」清單中選取位置。如果選取 BigQuery Omni 位置,版本選項會限制為 Enterprise 版。 
- 從「Edition」(版本) 清單中選取版本。BigQuery 版本功能 (例如自動調度) 僅適用於該版本。詳情請參閱 BigQuery 版本簡介。 
- 在「預留項目大小選取器」清單中,選取預留項目大小上限。 
- 選用:在「基準運算單元」欄位中,輸入保留項目的基準運算單元數量。 - 可用的自動調度資源運算單元數量,取決於「基準運算單元」值減去「預留項目大小上限」。舉例來說,如果您建立的預留項目有 100 個基準運算單元,且預留項目大小上限為 400,則預留項目有 300 個自動調度運算單元。如要進一步瞭解基準運算單元,請參閱「搭配基準和自動調度資源運算單元使用預留項目」。 
- 如要停用閒置運算單元共用,並只使用指定的運算單元容量,請按一下「忽略閒置運算單元」切換鈕。 
- 如要展開「進階設定」部分,請按一下展開箭頭。 
- 選用:如要設定目標工作並行數,請點按「覆寫自動目標工作並行設定」切換鈕,然後輸入「目標工作並行數」。 
- 預估費用表格會顯示時段明細。 「運算能力摘要」表格會顯示預留項目摘要。 
- 按一下 [儲存]。 
新預訂的時段會顯示在「預訂時段」分頁中。
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:擁有預留資源的管理專案專案 ID
- LOCATION:預訂的地點。如果選取 BigQuery Omni 位置,版本選項會限制為 Enterprise 版。
- RESERVATION_NAME:預留項目的名稱- 名稱只能包含小寫英數字元或連字號,開頭必須是字母,而且結尾不得為連字號,長度上限為 64 個字元。 
- NUMBER_OF_BASELINE_SLOTS:要分配給預訂項目的運算單元數量基準。您無法在同一個預訂中設定- slot_capacity選項和- edition選項。
- EDITION:預訂的方案。將預留項目指派給版本時,功能和價格會有所變更。詳情請參閱 BigQuery 版本簡介。
- NUMBER_OF_AUTOSCALING_SLOTS:指派給預留項目的自動調度運算單元數量。這等於預留項目大小上限減去基準運算單元數量。
 
- 按一下「執行」。 
如要進一步瞭解如何執行查詢,請參閱「執行互動式查詢」。
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:專案 ID
- LOCATION:預訂的地點。如果選取 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 個自動調度運算單元。如要進一步瞭解基準運算單元,請參閱「搭配基準和自動調度資源運算單元使用預留項目」。 
- 如要停用閒置運算單元共用,並只使用指定的運算單元容量,請按一下「忽略閒置運算單元」切換鈕。 
- 如要展開「進階設定」部分,請按一下展開箭頭。 - 在「如何使用閒置時段?」清單中,選取設定選項。
 
- 預估費用表格會顯示時段明細。 「運算能力摘要」表格會顯示預留項目摘要。 
- 按一下 [儲存]。 
新預訂的時段會顯示在「預訂時段」分頁中。
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:專案 ID
- LOCATION:預訂的地點。如果選取 BigQuery Omni 位置,版本選項會限制為 Enterprise 版。
- NUMBER_OF_BASELINE_SLOTS:要分配給預留項目的基準運算單元數量
- RESERVATION_NAME:預留項目名稱
- EDITION:預訂的方案。將預留項目指派給版本時,功能和價格會有所變更。詳情請參閱 BigQuery 版本簡介。
- MAXIMUM_NUMBER_OF_SLOTS:預留項目可使用的運算單元數量上限。這個值必須使用- --scaling_mode標記設定。
- SCALING_MODE:- SCALING_MODE:預訂的縮放模式。選項包括- ALL_SLOTS、- IDLE_SLOTS_ONLY或- AUTOSCALE_ONLY。這個值必須使用- max_slots標記設定。這個值必須與- ignore_idle_slots旗標對齊。詳情請參閱「預留項目可預測性」。
如要瞭解 --ignore_idle_slots 旗標,請參閱「閒置運算單元」。預設值為 false。
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, ignore_idle_slots=IGNORE_IDLE_SLOTS max_slots = MAX_NUMBER_OF_SLOTS, scaling_mode = SCALING_MODE); - 請替換下列項目: - ADMIN_PROJECT_ID:擁有預留資源的管理專案專案 ID。
- LOCATION:預訂的地點。如果選取 BigQuery Omni 位置,版本選項會限制為 Enterprise 版。
- RESERVATION_NAME:預留項目名稱。名稱只能包含小寫英數字元或連字號,開頭必須是字母,而且結尾不得為連字號,長度上限為 64 個字元。
- NUMBER_OF_BASELINE_SLOTS:要分配給預訂項目的運算單元數量基準。您無法在同一個預訂中設定- slot_capacity選項和- edition選項。
- EDITION:預訂的方案。將預留項目指派給版本時,功能和價格會有所變更。詳情請參閱 BigQuery 版本簡介。
- IGNORE_IDLE_SLOTS:預留項目是否使用閒置運算單元。預設值為- false。
- MAX_NUMBER_OF_SLOTS:預留項目可使用的運算單元數量上限。這個值必須使用- scaling_mode選項設定。
- SCALING_MODE:預訂的縮放模式。選項包括- ALL_SLOTS、- IDLE_SLOTS_ONLY或- AUTOSCALE_ONLY。這個值必須使用- max_slots選項設定。這個值必須與- ignore_idle_slots選項一致。詳情請參閱「預留項目預測」。
 
- 按一下「執行」。 
如要進一步瞭解如何執行查詢,請參閱「執行互動式查詢」。
如要進一步瞭解可預測的預留項目,請參閱「可預測的預留項目」。
更新預訂
你可以對預訂項目進行下列更新:
- 新增或移除運算單元,即可變更保留項目大小。
- 設定此預留項目中的查詢是否要使用閒置運算單元。
- 變更分配給預留項目的基準或自動調度運算單元數量。
- 設定目標工作並行。
所需權限
如要更新預留項目,您需要下列身分與存取權管理 (IAM) 權限:
- bigquery.reservations.update,該管理專案會維護承諾使用合約的所有權。
下列預先定義的 IAM 角色都具備這項權限:
- BigQuery Admin
- BigQuery Resource Admin
- BigQuery Resource Editor
如要進一步瞭解 BigQuery 中的 IAM 角色,請參閱預先定義的角色與權限一文。
變更預留項目大小
你可以為現有預約新增或移除時段。
主控台
- 前往 Google Cloud 控制台的「BigQuery」頁面。 
- 在導覽選單中,按一下「容量管理」。 
- 按一下「運算單元預留項目」分頁標籤。 
- 找出要更新的預訂。 
- 展開「動作」選項。 
- 按一下 [編輯]。 
- 在「預留項目大小上限選取器」對話方塊中,輸入預留項目大小上限。 
- 在「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); - 請替換下列項目: 
- 按一下「執行」。 
如要進一步瞭解如何執行查詢,請參閱「執行互動式查詢」。
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:專案 ID
- LOCATION:預訂的地點
- 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:專案 ID
- LOCATION:預訂的地點
- 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; - 請替換下列項目: 
- 按一下「執行」。 
如要進一步瞭解如何執行查詢,請參閱「執行互動式查詢」。
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」頁面。 
- 在導覽選單中,按一下「容量管理」。 
- 按一下「預訂」分頁標籤。 
- 找出要刪除的預訂。 
- 展開「動作」選項。 
- 點選「刪除」。 
- 點選「Delete reservation」(刪除預留項目) 對話方塊中的「Delete」(刪除)。 
SQL
如要刪除預留位置,請使用 DROP RESERVATION DDL 陳述式。
- 前往 Google Cloud 控制台的「BigQuery」頁面。 
- 在查詢編輯器中輸入下列陳述式: - DROP RESERVATION `ADMIN_PROJECT_ID.region-LOCATION.RESERVATION_NAME`; - 請替換下列項目: 
- 按一下「執行」。 
如要進一步瞭解如何執行查詢,請參閱「執行互動式查詢」。
bq
如要刪除預留項目,請使用 bq rm 指令並加上 --reservation 旗標:
bq rm \
    --project_id=ADMIN_PROJECT_ID \
    --location=LOCATION \
    --reservation RESERVATION_NAME
更改下列內容:
Python
控管預訂存取權
您可以控管哪些使用者可存取特定預訂。如要讓使用者覆寫查詢的預留項目,他們必須擁有該預留項目的 reservations.use 權限。
所需權限
    
      如要取得為工作指定特定預留資源所需的權限,請要求管理員授予您預留資源的資源編輯者  (roles/bigquery.resourceEditor) IAM 角色。如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。
  
  
      
        這個預先定義的角色包含  reservations.use 權限,這是為工作指定特定預留資源的必要權限。
控管預訂項目的存取權
如要管理特定預留資源的存取權,請使用 bq
set-iam-policy 指令。
如要管理多個預留資源的存取權,請使用 Google Cloud 控制台 在專案、資料夾或機構中授予 BigQuery 資源編輯者角色。授予角色時,請使用 IAM 條件,在符合指定條件時允許存取預訂資源。
如要控管預訂項目的存取權,請採取下列任一做法:
主控台
在 Google Cloud 控制台中,您可以使用條件允許存取多個預訂資源。
- 前往 Google Cloud 控制台的「IAM」(身分與存取權管理) 頁面。 
- 選取專案、資料夾或機構。 
- 如要將 - bigquery.resourceEditor角色授予在預訂資源中擁有角色的主體,請按照下列步驟操作:- 在「依主體檢視」分頁中,前往適當的主體,或使用「篩選」選項尋找主體。 
- 按一下「Edit principal」(編輯主體)。 
- 在「指派角色」頁面中,按一下「新增角色」。 
- 在「搜尋角色」欄位中輸入 - bigquery.resourceEditor。
- 在搜尋結果中勾選「BigQuery 資源編輯器」選項,然後點選「套用」。 
- 按一下 [儲存]。 
 
- 或者,如要將 - bigquery.resourceEditor角色授予沒有預留資源角色的主體,請按照下列步驟操作:- 按一下「授予存取權」。 
- 在「新增主體」頁面的「新主體」欄位中,輸入主體的 ID,例如 - my-user@example.com。
- 按一下 「新增角色」。 
- 在「搜尋角色」欄位中輸入 - bigquery.resourceEditor。
- 在搜尋結果中勾選「BigQuery 資源編輯器」選項,然後點選「套用」。 
- 在「BigQuery 資源編輯器」方塊中,按一下「新增條件」。 
- 在「新增條件」頁面中: - 在「名稱」和「說明」欄位中輸入值。 
- 在「條件建構工具」中新增條件。舉例來說,如要新增條件,將角色授予所有以 - /reservation1結尾的預訂名稱,請在「條件類型」中選擇「名稱」,在「運算子」中選擇「結尾為」,並在「值」中輸入- /reservation1。
- 按一下 [儲存]。 
 
 
- 按一下 [儲存]。 
bq
在 bq 指令列工具中,您可以授予個別預訂資源的存取權。
如要授予預留項目存取權,請使用 bq
set-iam-policy 指令:
bq set-iam-policy RESOURCE FILE_NAME
更改下列內容:
- RESOURCE:預訂資源的名稱。 例如:- projects/project1/locations/US/reservations/reservation1。
- FILE_NAME:包含 JSON 格式政策的檔案。格式應遵循允許政策的 IAM 政策結構。例如:- { "bindings": [ { "members": [ "user:my-user@example.com" ], "role": "roles/bigquery.resourceEditor" } ], "etag": "BwUjMhCsNvY=", "version": 1 } 
如要進一步瞭解 IAM,請參閱「管理其他資源的存取權」。