購買及管理運算單元承諾使用合約
BigQuery Reservation API 可讓您購買專用運算單元 (稱為承諾)、建立運算單元資源池 (稱為預留項目),以及將專案、資料夾和機構指派給這些預留項目。
容量使用承諾是指購買 BigQuery 運算容量,但有一些最低的承諾使用期間。使用版本建立保留項目時,購買容量承諾並非必要,但可以節省成本。
承諾是地區性資源。在某個地區或多區域購買的使用承諾無法用於其他地區或多區域。使用承諾無法在區域之間或區域與多區域之間移動。
啟用 Reservations API
BigQuery Reservation API 與現有的 BigQuery API 不同,必須單獨啟用。詳情請參閱「啟用及停用 API」。
- API 名稱為「BigQuery Reservations API」
- BigQuery Reservation API 的端點為
bigqueryreservation.googleapis.com
。
購買運算單元
如要預留容量一段最短時間,您可以購買容量使用承諾。這樣一來,您就能享有折扣並節省成本。如要進一步瞭解具體費用,請參閱 BigQuery 定價。
所需權限
如要建立容量承諾,您必須具備下列身分與存取權管理 (IAM) 權限:
- 管理專案的
bigquery.capacityCommitments.create
,該專案會維護承諾的擁有權。
下列預先定義的 IAM 角色都包含此權限:
BigQuery Admin
BigQuery Resource Admin
如要進一步瞭解 BigQuery 中的 IAM 角色,請參閱「預先定義的角色與權限」一文。
建立容量使用承諾
承諾是地區性資源。在某個地區或多地區購買的承諾無法用於其他地區或多地區。您無法在區域之間或區域與多區域之間移動承諾。
主控台
前往 Google Cloud 控制台的「BigQuery」頁面。
在導覽選單中,按一下「Capacity management」(容量管理)。
按一下「建立承諾」。
在「設定」下方:
- 選取位置。
- 在「容量模式」部分中,選取容量模式。
- 如果您選取「自動調度資源 (版本)」選項:
- 在「Edition」清單中選取版本。容量承諾僅適用於 Enterprise 和 Enterprise Plus 版本。自動調度資源功能僅適用於特定版本。如要進一步瞭解版本,請參閱「BigQuery 版本簡介」。
- 選取「Commitment duration」(承諾使用時間長度),指定承諾方案。
如果您購買的是年約,請選取在合約到期後生效的續約方案:
- 每年續約。年約到期後,系統會續約一年,繼續以年約方案收費。
詳情請參閱「承諾」。
輸入要購買的運算單元數量。
點按「Next」。
查看購買項目的預估費用。
在「確認並提交」下方:
- 輸入「CONFIRM」確認購買。
- 按一下「購買」購買運算單元。
如要查看承諾使用設定,請按一下「View slot commitments」(查看運算單元使用承諾)。容量佈建完成後,所要求的容量使用承諾會呈現綠色狀態。
首次購買容量時,系統會建立 default
保留項目。
SQL
如要建立容量承諾,請使用 CREATE CAPACITY
DDL 陳述式。
前往 Google Cloud 控制台的「BigQuery」頁面。
在查詢編輯器中輸入以下陳述式:
CREATE CAPACITY `ADMIN_PROJECT_ID.region-LOCATION.COMMITMENT_ID` OPTIONS ( slot_count = NUMBER_OF_SLOTS, edition = EDITION, plan = 'PLAN_TYPE');
請依指示取代下列項目:
ADMIN_PROJECT_ID
:管理專案的專案 ID,該專案會保留這項承諾的擁有權LOCATION
:承諾位置COMMITMENT_ID
:承諾 ID專案和位置中的名稱不得重複。開頭和結尾必須為小寫英文字母或數字,且只能包含小寫英文字母、數字和連字號。
NUMBER_OF_SLOTS
:要購買的版位數量EDITION
:與容量使用承諾相關聯的版本。您只能使用 Enterprise 或 Enterprise Plus 版本建立容量承諾。如要進一步瞭解版本,請參閱「BigQuery 版本簡介」。PLAN_TYPE
:方案類型,例如ANNUAL
或THREE_YEAR
。
按一下
「Run」。
如要進一步瞭解如何執行查詢,請參閱「執行互動式查詢」一文。
bq
使用加上 --capacity_commitment
旗標的 bq mk
指令購買時段。
bq mk \ --project_id=ADMIN_PROJECT_ID \ --location=LOCATION \ --capacity_commitment=true \ --edition=EDITION \ --plan=PLAN_TYPE \ --renewal_plan=RENEWAL_PLAN_TYPE \ --slots=NUMBER_OF_SLOTS
更改下列內容:
ADMIN_PROJECT_ID
:管理專案的專案 ID,該專案會保留這項承諾的擁有權LOCATION
:承諾位置EDITION
:與容量承諾相關聯的版本。您只能使用 Enterprise 或 Enterprise Plus 版本建立容量承諾。如要進一步瞭解版本,請參閱「BigQuery 版本簡介」。PLAN_TYPE
:方案類型,例如ANNUAL
或THREE_YEAR
。RENEWAL_PLAN_TYPE
:續約方案類型,例如NONE
、ANNUAL
或THREE_YEAR
。NUMBER_OF_SLOTS
:要購買的版位數量。
查看容量使用承諾
所需權限
如要查看承諾,您必須具備下列身分與存取權管理 (IAM) 權限:
- 管理專案的
bigquery.capacityCommitments.list
,該專案會維護承諾的擁有權。
下列預先定義的 IAM 角色都包含此權限:
BigQuery Admin
BigQuery Resource Admin
BigQuery Resource Editor
BigQuery Resource Viewer
BigQuery User
如要進一步瞭解 BigQuery 中的 IAM 角色,請參閱「預先定義的角色與權限」一文。
依專案查看容量使用承諾
如要查看各專案的容量承諾,請按照下列步驟操作:
主控台
前往 Google Cloud 控制台的「BigQuery」頁面。
在導覽選單中,按一下「Capacity management」(容量管理)。
按一下「Slot commitments」分頁標籤。您的容量使用承諾會列在「承諾」下方的表格中。
SQL
如要查看管理專案的承諾,請查詢 INFORMATION_SCHEMA.CAPACITY_COMMITMENTS_BY_PROJECT
檢視畫面。
前往 Google Cloud 控制台的「BigQuery」頁面。
在查詢編輯器中輸入以下陳述式:
SELECT capacity_commitment_id FROM `region-LOCATION`.INFORMATION_SCHEMA.CAPACITY_COMMITMENTS_BY_PROJECT WHERE project_id = 'ADMIN_PROJECT_ID' AND slot_count = 100;
請依指示取代下列項目:
按一下
「Run」。
如要進一步瞭解如何執行查詢,請參閱「執行互動式查詢」一文。
bq
請使用 bq ls
指令,並加上 --capacity_commitment
旗標,列出管理專案的承諾。
bq ls \ --capacity_commitment=true \ --location=LOCATION \ --project_id=ADMIN_PROJECT_ID
更改下列內容:
可更新容量使用承諾
您可以對容量使用承諾進行下列更新:
- 更新承諾使用合約的續約方案
- 將承諾轉換為期限較長的承諾合約方案。
- 將承諾分割為兩個承諾。
- 將兩個承諾合併為單一承諾。
所需權限
如要更新容量承諾,您必須具備下列身分與存取權管理 (IAM) 權限:
- 管理專案的
bigquery.capacityCommitments.update
,該專案會維護承諾的擁有權。
下列預先定義的 IAM 角色都包含此權限:
BigQuery Admin
BigQuery Resource Admin
如要進一步瞭解 BigQuery 中的 IAM 角色,請參閱「預先定義的角色與權限」一文。
續訂承諾使用合約
年約方案有續約方案,您可以在建立或轉換為年約方案時指定。在合約結束日期之前,您隨時可以變更年約的續約方案。
主控台
您可以按照下列步驟變更年約方案的續約方案:
前往 Google Cloud 控制台的「BigQuery」頁面。
在導覽選單中,按一下「Capacity management」(容量管理)。
按一下 [Slot commitments] (運算單元使用承諾) 分頁標籤。
找出要編輯的承諾。
依序按一下
「動作」,然後選取「編輯續約方案」選項。選取新的續約方案。
bq
如要變更年約方案的續約選項,請使用 bq update
指令搭配 --capacity_commitment
旗標和 --renewal_plan
旗標。
bq update \ --project_id=ADMIN_PROJECT_ID \ --location=LOCATION \ --renewal_plan=PLAN_TYPE \ --capacity_commitment=true \ COMMITMENT_ID
更改下列內容:
ADMIN_PROJECT_ID
:管理專案的專案 ID,該專案會保留這項承諾的擁有權LOCATION
:承諾位置PLAN_TYPE
:方案類型,例如ANNUAL
或THREE_YEAR
。COMMITMENT_ID
:承諾 ID如要取得 ID,請參閱「查看已購買的承諾使用合約」。
將承諾轉換為較長的時間
您隨時可以選擇將承諾轉換為較長時間的承諾類型。即使您想將舊版方案轉換為版本,這項功能也適用。
更新承諾使用合約後,系統會立即以新方案的費率向您收費,並重設結束日期。
如要轉換承諾,請使用 bq update
指令,並加上 --plan
旗標。
bq update \ --project_id=ADMIN_PROJECT_ID \ --location=LOCATION \ --plan=PLAN_TYPE \ --renewal_plan=RENEWAL_PLAN \ --capacity_commitment=true \ COMMITMENT_ID
更改下列內容:
ADMIN_PROJECT_ID
:專案 IDLOCATION
:承諾位置PLAN_TYPE
:方案類型,例如ANNUAL
或THREE_YEAR
。RENEWAL_PLAN
:續約方案這項設定僅適用於
PLAN_TYPE
為ANNUAL
的情況。COMMITMENT_ID
:承諾 ID如要取得 ID,請參閱「查看已購買的承諾使用合約」。
拆分承諾使用合約
您可以將承諾使用合約分割為兩個承諾。如果您想續約部分承諾,這項功能就非常實用。舉例來說,如果您有 1,000 個運算單元的年度承諾,可以將 300 個運算單元分割為新的承諾,讓原始承諾保留 700 個運算單元。接著,您可以以年費率續約 700 個時段,並將 300 個時段轉換為三年承諾。您可以以 50 個運算單元為單位分割承諾。
分割承諾時,新承諾會與原始承諾使用相同的方案和承諾結束日期。
主控台
前往 Google Cloud 控制台的「BigQuery」頁面。
在導覽選單中,按一下「Capacity management」(容量管理)。
按一下 [Slot commitments] (運算單元使用承諾) 分頁標籤。
選取要拆分的承諾。
按一下「分割」。
在「Split commitment」頁面中,使用「Configure split」滑桿選取每個分割項目的運算單元數量,以 50 個運算單元為單位遞增。
按一下「分割」,即可分割承諾。新的承諾會列在「Slot commitments」分頁中。
bq
如要分割承諾,請使用 bq update
指令。
bq update \ --project_id=ADMIN_PROJECT_ID \ --location=LOCATION \ --split \ --slots=SLOTS_TO_SPLIT \ --capacity_commitment=true \ COMMITMENT_ID
更改下列內容:
ADMIN_PROJECT_ID
:專案 IDLOCATION
:承諾位置SLOTS_TO_SPLIT
:從原始承諾分割為新承諾的槽數COMMITMENT_ID
:承諾 ID如要取得 ID,請參閱「查看已購買的承諾使用合約」。
合併兩個承諾使用合約
您可以將多個承諾合併為一項承諾。合併的承諾使用合約必須全為相同類型 (ANNUAL
或 THREE_YEAR
)。合併後的承諾使用合約結束日期,為原始承諾使用合約的最大結束日期。如果承諾使用合約的結束日期較早,系統會將其延長至較晚的日期,並按比例收取這些時段的費用。
主控台
前往 Google Cloud 控制台的「BigQuery」頁面。
在導覽選單中,按一下「Capacity management」(容量管理)。
按一下 [Slot commitments] (運算單元使用承諾) 分頁標籤。
選取要合併的承諾使用合約。
按一下 [Merge] (合併)。
在「Merge commitments」頁面中,查看合併作業的詳細資料,然後按一下「Merge」。新的合併承諾會列在「Slot commitments」分頁中。
bq
如要將兩個承諾合併為一個承諾,請使用 bq update
指令:
bq update \ --project_id=ADMIN_PROJECT_ID \ --location=LOCATION \ --merge=true \ --capacity_commitment=true \ COMMITMENT1,COMMITMENT2
更改下列內容:
ADMIN_PROJECT_ID
:專案 IDLOCATION
:承諾的位置COMMITMENT1
:要合併的第一個版本COMMITMENT2
:要合併的第二個版本
將承諾升級至新版
您無法直接將承諾升級至新版本。舉例來說,您無法將承諾升級至 Enterprise 版本或 Enterprise Plus 版本。請改為按照下列步驟升級承諾:
建立新的承諾使用合約。選擇適當的升級版本。請注意,這份新承諾使用合約的承諾結束日期與現有承諾使用合約不同。
與支援團隊聯絡,要求取消現有承諾。
承諾到期
承諾會在期限結束時到期。您無法刪除仍處於有效狀態的承諾。如果續訂方案設為 NONE
,系統會自動刪除承諾。否則,系統會根據續約方案,以年繳或三年約續約。如要將續約方案變更為 NONE
,請按照「續約承諾」中的步驟操作。
續訂承諾後,開始時間的值不會變更。指的是原始承諾的開始時間。End time 的值是續約承諾的到期時間。舉例來說,假設您在 2022 年 12 月 13 日建立了一項年度承諾,並在 2023 年 12 月 13 日續約。如果您在 2023 年 12 月 14 日查看承諾詳細資料,開始時間的值會是 2022 年 12 月 13 日,結束時間的值則會是 2024 年 12 月 12 日。
系統一律會向您收取基準運算單元的費用。如果容量承諾到期,您可能需要手動調整預留項目中的基準運算單元數量,以免產生不必要的費用。舉例來說,假設您有 100 個運算單元的 1 年承諾,以及 100 個基準運算單元的保留項目。承諾使用合約到期,且沒有續約方案。承諾期滿後,您將以即付即用費率支付 100 個基準運算單元的費用。
控制容量使用承諾的建立
您可以使用 IAM 拒絕政策,進一步控管誰可以建立容量承諾。
您可以為一組使用者或所有使用者建立拒絕政策,並設定例外狀況和條件。
舉例來說,下列政策會拒絕所有使用者建立容量承諾的權限,但主體「lucian@example.com」除外:
{
"deniedPrincipals": [
"principalSet://goog/public:all"
],
"deniedPermissions": [
"bigquery.googleapis.com/capacityCommitments.create"
],
"exceptionPrincipals": [
"principal://goog/subject/lucian@example.com"
]
}
接著,您可以將這項政策附加至機構,以控管可建立承諾的使用者。
請注意,這些政策優先於 IAM 角色,因此即使使用者擁有 bigquery.admin
角色,也無法建立承諾,除非刪除或修改政策。
詳情請參閱「拒絕存取資源」。
排解容量使用承諾問題
本節說明疑難排解步驟,以便解決使用 BigQuery 保留項目時發生的問題。
購買的運算單元處於待處理狀態
運算單元取決於可用容量,如果您購買了運算單元承諾並透過 BigQuery 進行分配,「狀態」欄會顯示勾號。如果 BigQuery 無法立即分配要求的運算單元,則「狀態」欄會持續顯示待處理狀態。您可能需要等待數小時,運算單元才會釋出。如需盡快取得時段,請嘗試下列方法:
- 刪除待處理的承諾。
- 購買較少運算單元的承諾產品。視容量而定,較小的承諾可能會立即生效。
- 以單獨承諾的方式購買剩餘的運算單元。這些時段可能會在「狀態」欄中顯示為待處理,但通常會在幾小時內啟用。
- 選用:如果兩個承諾合約都已生效,只要您購買的方案相同,即可將兩個承諾合約合併為單一承諾合約。
如果預留時段失敗或需要很長的時間才能完成,建議您暫時使用隨選定價。採用這個解決方案時,您可能需要在未指派給任何保留項目的其他專案上執行重要查詢,或者可能需要完全移除專案指派。