管理工作負載承諾
透過 BigQuery Reservation API,您可以購買專屬運算單元 (稱為「承諾」)、建立運算單元集區 (稱為「預留項目」),以及將專案、資料夾和機構指派給這些預留項目。
承諾使用容量是指購買 BigQuery 運算資源,但有最短承諾使用期。使用「版本」建立預留項目時,您可以選擇是否購買容量承諾,但這麼做有助於節省費用。
承諾是區域性資源。在某個區域或多區域購買的承諾無法用於其他區域或多區域。承諾無法在區域之間移動,也無法在區域和多區域之間移動。承諾使用合約無法在專案之間轉移。
啟用 Reservations API
BigQuery Reservation API 與現有的 BigQuery API 不同,必須單獨啟用。詳情請參閱「啟用及停用 API」。
- API 名稱為「BigQuery Reservations API」
- BigQuery Reservation API 的端點為
bigqueryreservation.googleapis.com。

購買承諾使用合約
如要預留容量一段時間,可以購買承諾使用容量。這項優惠可節省費用。如要進一步瞭解具體費用,請參閱「BigQuery 定價」一文。
所需權限
如要建立容量承諾,您需要下列 Identity and Access Management (IAM) 權限:
bigquery.capacityCommitments.create,位於維護承諾使用合約擁有權的管理專案。
下列每個預先定義的 IAM 角色都包含這項權限:
BigQuery AdminBigQuery Resource Admin
如要進一步瞭解 BigQuery 中的 IAM 角色,請參閱預先定義的角色和權限。
建立容量承諾
承諾是區域性資源。在某個區域或多區域購買的承諾無法用於其他區域或多區域。承諾無法在區域之間,或區域與多區域之間轉移。承諾使用合約無法在專案之間轉移。
控制台
前往 Google Cloud 控制台的「BigQuery」頁面。
按一下導覽選單中的「Workload management」(工作負載管理)。
按一下「建立承諾」。
在「設定」下方:
查看購買交易的費用估算。
在「確認並提交」下方:
- 輸入「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', renewal_plan = 'RENEWAL_PLAN_TYPE');
請替換下列項目:
ADMIN_PROJECT_ID:管理專案的專案 ID,該專案將保有這項承諾的擁有權LOCATION:承諾的位置COMMITMENT_ID:承諾 ID專案和位置中的名稱均不得重複。開頭和結尾必須為小寫英文字母或數字,且只能包含小寫英文字母、數字和連字號。
NUMBER_OF_SLOTS:要購買的運算單元數量EDITION:與容量承諾相關聯的版本。您只能透過 Enterprise 或 Enterprise Plus 版本建立容量承諾。如要進一步瞭解版本,請參閱「BigQuery 版本簡介」。PLAN_TYPE:方案類型。 選項為ANNUAL或THREE_YEAR。RENEWAL_PLAN_TYPE:續約方案類型。選項包括NONE、ANNUAL或THREE_YEAR。
按一下「執行」。
如要進一步瞭解如何執行查詢,請參閱「執行互動式查詢」。
bq
使用 bq mk 指令,並加上 --capacity_commitment 旗標,即可購買配額。
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:要購買的配額數量。
查看容量承諾
以下各節說明如何查看現有的容量承諾。
所需權限
如要查看約定,您必須具備下列 Identity and Access Management (IAM) 權限:
bigquery.capacityCommitments.list,位於維護承諾使用合約擁有權的管理專案。
下列每個預先定義的 IAM 角色都包含這項權限:
BigQuery AdminBigQuery Resource AdminBigQuery Resource EditorBigQuery Resource ViewerBigQuery User
如要進一步瞭解 BigQuery 中的 IAM 角色,請參閱預先定義的角色和權限。
依專案查看容量承諾
如要依專案查看容量承諾,請按照下列步驟操作:
控制台
前往 Google Cloud 控制台的「BigQuery」頁面。
按一下導覽選單中的「Workload management」(工作負載管理)。
按一下「運算單元使用承諾」分頁標籤。容量承諾會列在「承諾」下方的表格中。
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;
請替換下列項目:
按一下「執行」。
如要進一步瞭解如何執行查詢,請參閱「執行互動式查詢」。
bq
使用 bq ls 指令,並加上 --capacity_commitment 旗標,列出管理專案的約定。
bq ls \
--capacity_commitment=true \
--location=LOCATION \
--project_id=ADMIN_PROJECT_ID
更改下列內容:
可更新容量使用承諾
您可以對容量承諾進行下列更新:
- 更新承諾使用合約的續約方案
- 將承諾轉換為使用期限較長的使用承諾方案。
- 將承諾使用合約分割為兩個承諾使用合約。
- 將兩份承諾使用合約合併為一份。
所需權限
如要更新容量承諾,您需要下列 Identity and Access Management (IAM) 權限:
bigquery.capacityCommitments.update,位於維護承諾使用合約擁有權的管理專案。
下列每個預先定義的 IAM 角色都包含這項權限:
BigQuery AdminBigQuery Resource Admin
如要進一步瞭解 BigQuery 中的 IAM 角色,請參閱預先定義的角色和權限。
續訂承諾使用合約
年約有續約方案,您可以在建立或轉換為年約時指定。您可以在承諾期限結束前,隨時變更年約方案的續訂方案。
控制台
如要變更年約方案的續約方案,請按照下列步驟操作:
前往 Google Cloud 控制台的「BigQuery」頁面。
按一下導覽選單中的「Workload 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」頁面。
按一下導覽選單中的「Workload management」(工作負載管理)。
按一下 [Slot commitments] (運算單元使用承諾) 分頁標籤。
選取要拆分的約定。
按一下「分割」。
在「Split commitment」(拆分承諾) 頁面中,使用「Configure split」(設定拆分) 滑桿,以 50 個運算單元為單位,選取要拆分到每個部分的運算單元數量。
按一下「分割」即可分割約期。新承諾使用合約會列在「運算單元承諾使用合約」分頁中。
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」頁面。
按一下導覽選單中的「Workload management」(工作負載管理)。
按一下 [Slot commitments] (運算單元使用承諾) 分頁標籤。
選取要合併的承諾。
按一下 [Merge] (合併)。
在「合併承諾」頁面中,查看合併詳細資料,然後按一下「合併」。新的合併承諾使用合約會列在「運算單元承諾使用合約」分頁中。
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,請按照「續訂約期」中的步驟操作。
續約後,「開始時間」的值不會變更。這是指原始承諾的開始時間。「結束時間」是續約承諾到期的時間。舉例來說,如果您在 2022 年 12 月 13 日建立了一項年度約期,並在 2023 年 12 月 13 日續約。如果您在 2023 年 12 月 14 日查看約期詳細資料,開始時間的值會是 2022 年 12 月 13 日,結束時間的值會是 2024 年 12 月 12 日。
系統一律會收取基準運算單元費用。如果容量承諾到期,您可能需要手動調整預留項目中的基準運算單元數量,以免產生不必要的費用。舉例來說,假設您有 1 年期方案,其中包含 100 個運算單元,且預訂了 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 無法立即分配要求的運算單元,則「狀態」欄會持續顯示待處理狀態。您可能必須等待數小時,直到有可用的運算單元釋出。如需提早取得空位,請嘗試下列做法:
- 刪除待處理的承諾使用合約。
- 購買運算單元數量較少的新承諾使用合約。視容量而定,較小的承諾使用合約可能會立即生效。
- 以獨立的約期購買剩餘運算單元。這些運算單元可能會在「狀態」欄中顯示為待處理,但通常會在幾小時內啟用。
- 選用:如果兩項承諾使用合約都已啟用,且兩者位於相同區域、版本,並採用相同承諾方案,則可合併為一項承諾使用合約。
如果時段承諾失敗或需要很長時間才能完成,請考慮暫時使用隨選價格。使用這項解決方案,您可以在未指派給任何預留項目的其他專案中執行重要查詢、將專案指派給 None,或完全移除專案指派。