スロット コミットメントの購入と管理

BigQuery Reservation API を使用すると、専用スロットを購入し(コミットメントと呼ぶ)、スロットのプールを作成し(予約と呼ぶ)、それらの予約にプロジェクト、フォルダ、組織を割り当てることができます。

容量コミットメントは、最小期間の BigQuery コンピューティング容量の購入です。エディションを使用して予約を作成する場合、容量コミットメントの購入は任意ですが、費用を節約できます。

コミットメントは、リージョン リソースです。あるリージョンやマルチリージョンで購入したコミットメントは、他のリージョンやマルチリージョンでは使用できません。コミットメントを、リージョン間や、リージョンとマルチリージョン間で移動することはできません。

Reservations API を有効にする

BigQuery Reservation API は既存の BigQuery API とは異なり、独立して有効にする必要があります。詳細については、API の有効化と無効化をご覧ください。

  • この API の名前は「BigQuery Reservations API」です。
  • BigQuery Reservation API のエンドポイントは bigqueryreservation.googleapis.com です。

API を有効にする

スロットを購入する

容量を最小限に抑えるために、容量コミットメントを購入できます。これにより割引が適用され、費用を節約できます。具体的な費用の詳細については、BigQuery の料金をご覧ください。

必要な権限

容量コミットメントを作成するには、次の Identity and Access Management(IAM)権限が必要です。

この権限は、次の各 IAM 事前定義ロールに含まれています。

  • BigQuery Admin
  • BigQuery Resource Admin

BigQuery での IAM のロールの詳細については、事前定義ロールと権限をご覧ください。

容量コミットメントを作成する

コミットメントは、リージョン リソースです。あるリージョンやマルチリージョンで購入したコミットメントは、他のリージョンやマルチリージョンでは使用できません。コミットメントを、リージョン間や、リージョンとマルチリージョン間で移動することはできません。

コンソール

  1. Google Cloud コンソールで [BigQuery] ページに移動します。

    [BigQuery] に移動

  2. ナビゲーション パネルで [容量管理] セクションに移動します。

  3. [コミットメントを作成] をクリックします。

  4. [構成] で次の操作を行います。

    1. ロケーションを選択します。
    2. [容量モデル] セクションで容量モデルを選択します。
    3. 自動スケーリング(エディション)オプションを選択した場合は、次のようにします。
      1. [エディション] リストでエディションを選択します。容量コミットメントは、Enterprise エディションと Enterprise Plus エディションでのみサポートされています。 自動スケーリングはエディション内でのみ使用できます。エディションの詳細については、BigQuery エディションの概要をご覧ください。
    4. [コミット期間] で、コミットメント プランを指定します。
    5. 年間コミットメントを購入する場合は、[Renewal plan that you want to take effect when the commitment expires] を選択します。

      1. 毎年更新。年間コミットメントの期限が切れると、さらに 1 年間の年間コミットメントとして更新されます。

      詳細については、コミットメントをご覧ください。

    6. 購入するスロット数を入力します。

    7. [次へ] をクリックします。

  5. 購入費用の見積もりを確認します。

  6. [確認して送信] の下で:

    1. CONFIRM」と入力して購入を確定します。
    2. [購入] をクリックして、スロットを購入します。
  7. コミットメントを表示するには、[スロット コミットメントを表示] をクリックします。容量がプロビジョニングされると、リクエストされた容量コミットメントのステータスが緑色になります。

初めて容量を購入する場合は、default 予約が作成されます。

SQL

容量コミットメントを作成するには、CREATE CAPACITY DDL ステートメントを使用します。

  1. Google Cloud コンソールで [BigQuery] ページに移動します。

    [BigQuery] に移動

  2. クエリエディタで次のステートメントを入力します。

    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: プランの種類(例: ANNUALTHREE_YEAR)。

  3. [実行] をクリックします。

クエリの実行方法については、インタラクティブ クエリを実行するをご覧ください。

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: プランの種類(例: ANNUALTHREE_YEAR)。
  • RENEWAL_PLAN_TYPE: 更新プランの種類(例: NONEANNUALTHREE_YEAR
  • NUMBER_OF_SLOTS: 購入するスロットの数。

容量コミットメントを表示する

必要な権限

コミットメントを表示するには、次の Identity and Access Management(IAM)権限が必要です。

この権限は、次の各 IAM 事前定義ロールに含まれています。

  • BigQuery Admin
  • BigQuery Resource Admin
  • BigQuery Resource Editor
  • BigQuery Resource Viewer
  • BigQuery User

BigQuery での IAM のロールの詳細については、事前定義ロールと権限をご覧ください。

プロジェクトごとの容量コミットメントの表示

プロジェクトごとに容量コミットメントを表示するには:

コンソール

  1. Google Cloud コンソールで [BigQuery] ページに移動します。

    [BigQuery] に移動

  2. ナビゲーション パネルで [容量管理] セクションに移動します。

  3. [スロット コミットメント] タブをクリックします。容量コミットメントは、[コミットメント] の下のテーブルに一覧表示されます。

SQL

管理プロジェクトのコミットメントを表示するには、INFORMATION_SCHEMA.CAPACITY_COMMITMENTS_BY_PROJECT ビューに対してクエリを実行します。

  1. Google Cloud コンソールで [BigQuery] ページに移動します。

    [BigQuery] に移動

  2. クエリエディタで次のステートメントを入力します。

    SELECT
      capacity_commitment_id
    FROM
      `region-LOCATION`.INFORMATION_SCHEMA.CAPACITY_COMMITMENTS_BY_PROJECT
    WHERE
      project_id = 'ADMIN_PROJECT_ID'
      AND slot_count = 100;

    次のように置き換えます。

  3. [実行] をクリックします。

クエリの実行方法については、インタラクティブ クエリを実行するをご覧ください。

bq

--capacity_commitment フラグを指定した bq ls コマンドを使用して、管理プロジェクトのコミットメントを一覧表示します。

bq ls \
    --capacity_commitment=true \
    --location=LOCATION \
    --project_id=ADMIN_PROJECT_ID

次のように置き換えます。

容量コミットメントを更新する

容量コミットメントには、次の更新を行うことができます。

  • コミットメントの更新プランを更新する
  • コミットメントをより長い期間のコミットメント プランに変換します。
  • 1 つのコミットメントを 2 つのコミットメントに分割します。
  • 2 つのコミットメントを 1 つのコミットメントに統合します。

必要な権限

容量コミットメントを更新するには、次の Identity and Access Management(IAM)権限が必要です。

この権限は、次の各 IAM 事前定義ロールに含まれています。

  • BigQuery Admin
  • BigQuery Resource Admin

BigQuery での IAM のロールの詳細については、事前定義ロールと権限をご覧ください。

コミットメントを更新する

年間コミットメントには、年間コミットメントを作成、または年間コミットメントに変換するときに指定する更新プランがあります。年間コミットメントの更新プランは、コミットメント終了日より前であればいつでも変更できます。

Console

年間契約の更新プランは、次の手順で変更できます。

  1. Google Cloud コンソールで [BigQuery] ページに移動します。

    [BigQuery] に移動

  2. ナビゲーション パネルで [容量管理] セクションに移動します。

  3. [スロット コミットメント] タブをクリックします。

  4. 編集するコミットメントを見つけます。

  5. [アクション] をクリックし、[更新プランを編集] オプションを選択します。

  6. 新しい更新プランを選択します。

bq

年間コミットメントの更新プランを変更するには、--capacity_commitment フラグおよび --renewal_plan フラグを指定した bq update コマンドを使用します。

bq update \
    --project_id=ADMIN_PROJECT_ID \
    --location=LOCATION \
    --renewal_plan=PLAN_TYPE \
    --capacity_commitment=true \
    COMMITMENT_ID

次のように置き換えます。

コミットメントをより長い期間に変換する

コミットメントはいつでも、長期契約コミットメント タイプに変換できます。

コミットメントを更新するとすぐに、新しいプランに関連付けられたレートが課金され、終了日が再設定されます。

コミットメントを変換するには、--plan フラグを指定した bq update コマンドを使用します。

bq update \
    --project_id=ADMIN_PROJECT_ID \
    --location=LOCATION \
    --plan=PLAN_TYPE \
    --renewal_plan=RENEWAL_PLAN \
    --capacity_commitment=true \
    COMMITMENT_ID

次のように置き換えます。

コミットメントを分割する

コミットメントは、2 つのコミットメントに分割できます。これは、コミットメントの一部を更新する必要がある場合に有用な可能性があります。たとえば、1,000 スロットの年間コミットメントがある場合、300 スロットを新しいコミットメントに分割し、700 スロットを元のコミットメントに残すことができます。そうして、年単位で 700 スロットを更新し、300 スロットを 3 年間のコミットメントに変換できます。

コミットメントを分割すると、新しいコミットメントには、元のコミットメントと同じプランとコミットメント終了日が設定されます。

コンソール

  1. Google Cloud コンソールで [BigQuery] ページに移動します。

    [BigQuery] に移動

  2. ナビゲーション パネルで [容量管理] セクションに移動します。

  3. [スロット コミットメント] タブをクリックします。

  4. 分割するコミットメントを選択します。

  5. [スプリット] をクリックします。

  6. [Split commitment] ページで、[Configure split] スライダーを使用して、各スプリットに含めるスロットの数を 100 単位で増やします。

  7. [スプリット] をクリックして、コミットメントを分割します。新しいコミットメントが [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: プロジェクト ID
  • LOCATION: コミットメントのロケーション
  • SLOTS_TO_SPLIT: 元のコミットメントから新しいコミットメントに分割するスロットの数
  • COMMITMENT_ID: コミットメントの ID

    ID を取得するには、購入したコミットメントを表示するをご覧ください。

2 つのコミットメントを統合する

複数のコミットメントを 1 つのコミットメントに統合できます。コミットメントの統合はすべて同じ種類(ANNUAL または THREE_YEAR)である必要があります。統合されたコミットメントの終了日は、元のコミットメントの終了日のうちの最も遅い終了日です。終了日が他のコミットメントの終了日より早い場合、そのコミットメントは遅い終了日に変更されます。これらのスロットに対しては比例配分された料金が請求されます。

コンソール

  1. Google Cloud コンソールで [BigQuery] ページに移動します。

    [BigQuery] に移動

  2. ナビゲーション パネルで [容量管理] セクションに移動します。

  3. [スロット コミットメント] タブをクリックします。

  4. 統合するコミットメントを選択します。

  5. [Merge] をクリックします。

  6. [Merge commitment] ページで、マージの詳細を確認して、[Merge] をクリックします。新しいマージされたコミットメントが [Slot commitments] タブに表示されます。

bq

2 つのコミットメントを統合して 1 つのコミットメントにするには、bq update コマンドを使用します。

bq update \
    --project_id=ADMIN_PROJECT_ID \
    --location=LOCATION \
    --merge=true \
    --capacity_commitment=true \
    COMMITMENT1,COMMITMENT2

次のように置き換えます。

  • ADMIN_PROJECT_ID: プロジェクト ID
  • LOCATION: コミットメントのロケーション
  • COMMITMENT1: 最初に統合するコミットメント
  • COMMITMENT2: 2 番目に統合するコミットメント

コミットメントの有効期限

コミットメントは、期間が終了すると期限が切れます。アクティブなコミットメントは削除できません。更新プランが NONE に設定されている場合、コミットメントは自動的に削除されます。それ以外の場合は、更新プランに応じて、年間または 3 年間のコミットメントで更新されます。更新プランを NONE に変更するには、コミットメントの更新の手順に沿って操作します。

コミットメントを更新しても、[開始時間] の値は変更されません。これは、元のコミットメントの開始時間を表します。[終了時間] の値は、更新されたコミットメントの有効期限です。たとえば、2022 年 12 月 13 日に作成された 1 年間のコミットメントが 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 Reservations の使用中に問題が発生した場合に役立つトラブルシューティング手順について説明します。

購入したスロットは保留中です

スロットには利用可能な容量が適用されます。スロットを購入して BigQuery で割り振ると、[ステータス] 列にチェックマークが表示されます。BigQuery がリクエストされたスロットをすぐに割り当てられない場合、[ステータス] 列は保留中のままになります。スロットが使用可能になるまで数時間かかることがあります。より早くスロットにアクセスする必要がある場合は、次のことを試してください。

  1. 保留中のコミットメントを削除します。
  2. スロット数を減らす場合は、新しいコミットメントを購入します。容量によっては、小さいコミットメントがすぐに有効になる場合があります。
  3. 残りのスロットは別のコミットメントとして購入します。これらのスロットは [ステータス] 列に保留中として表示されますが、通常は数時間以内にアクティブになります。
  4. 省略可: 両方のコミットメントが使用できる場合、両方を同じプランで購入した場合に限り、単一のコミットメントに統合できます。

スロット コミットメントが失敗した場合、または完了に時間がかかる場合は、一時的にオンデマンド料金の使用を検討してください。その場合、予約に割り当てられていない別のプロジェクトで重要なクエリを実行することが必要になる場合があります。また、プロジェクトの割り当てを完全に削除する必要が生じることもあります。