以前のスロット予約を使用する

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

予約を使用すると、一定数の専用のスロットをワークロードに割り当てることができます。たとえば、本番環境のワークロードがスロット用のテスト ワークロードと競合するのを回避することが必要な場合が考えられます。prod という名前の予約を作成し、本番環境のワークロードをこの予約に割り当てることができます。詳細については、Reservations をご覧ください。

予約を作成

必要な権限

予約を作成するには、次の Identity and Access Management(IAM)権限が必要です。

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

  • BigQuery Admin
  • BigQuery Resource Admin
  • BigQuery Resource Editor

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

専用スロットを使用して予約を作成する

次のオプションのいずれかを選択します。

コンソール

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

    BigQuery に移動

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

  3. [予約を作成] をクリックします。

  4. [予約名] フィールドに、予約の名前を入力します。

  5. [ロケーション] プルダウン リストで、ロケーションを選択します。

  6. [容量モデル] セクションで、容量モデルを選択します。

  7. [フラットレート] オプションを選択した場合は、[ベースライン スロット] に予約用のスロット数を入力します。

    1. [最大予約サイズセレクタ] リストで、最大予約サイズを選択します。
    2. 省略可: [ベースライン スロット] フィールドに、予約用のベースライン スロット数を入力します。指定したスロットの容量のみを使用するには、[アイドル スロットを無視する] 切り替えをクリックします。

      使用可能な自動スケーリング スロットの数は、最大予約サイズの値からベースライン スロットの値を差し引くことで決まります。たとえば、ベースライン スロットを 100 個、最大予約サイズを 400 個として予約を作成した場合、その予約には 300 個の自動スケーリング スロットがあります。ベースライン スロットの詳細については、ベースライン スロットと自動スケーリング スロットを使用した予約の使用をご覧ください。

  8. アイドル スロットの共有を無効にするには、[アイドル スロットを無視する] 切り替えをクリックします。

  9. スロットの内訳は、[費用見積もり] テーブルに表示されます。 予約の概要が [容量の概要] テーブルに表示されます。

  10. [保存] をクリックします。

新しい予約が [予約] タブに表示されます。

SQL

予約を作成するには、DDL ステートメント CREATE RESERVATION を使用します。

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

    BigQuery に移動

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

    CREATE RESERVATION
      `ADMIN_PROJECT_ID.region-LOCATION.RESERVATION_NAME`
    OPTIONS (
      slot_capacity = NUMBER_OF_BASELINE_SLOTS,
    );

    以下を置き換えます。

    • ADMIN_PROJECT_ID: 予約リソースを所有する管理プロジェクトのプロジェクト ID
    • LOCATION: 予約のロケーションBigQuery Omni のロケーションを選択した場合、エディション オプションは Enterprise エディションに限定されます。
    • RESERVATION_NAME: 予約の名前

      先頭と末尾は英小文字または数字にしてください。使用できるのは英小文字、数字、ダッシュのみです。

    • NUMBER_OF_BASELINE_SLOTS: 予約に割り当てるベースライン スロットの数。slot_capacity オプションと edition オプションを同じ予約内で設定することはできません。
    • EDITION: 予約のエディション。予約をエディションに割り当てると、機能と料金が変更されます。詳細については、BigQuery エディションの概要をご覧ください。
    • NUMBER_OF_AUTOSCALING_SLOTS: 予約に割り当てられている自動スケーリング スロットの数。これは、最大予約サイズの値からベースラインのスロット数を差し引いた値に等しくなります。

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

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

bq

予約を作成するには、bq mk コマンドを使用し、--reservation フラグを指定します。

bq mk \
    --project_id=ADMIN_PROJECT_ID \
    --location=LOCATION \
    --reservation \
    --slots=NUMBER_OF_BASELINE_SLOTS \
    --ignore_idle_slots=false \
    RESERVATION_NAME

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

  • ADMIN_PROJECT_ID: プロジェクト ID
  • LOCATION: 予約のロケーションBigQuery Omni のロケーションを選択した場合、エディション オプションは Enterprise エディションに限定されます。
  • NUMBER_OF_BASELINE_SLOTS: 予約に割り当てるベースラインのスロット数。

  • RESERVATION_NAME: 予約の名前

  • EDITION: 予約のエディション。予約をエディションに割り当てると、機能と料金が変更されます。詳細については、BigQuery エディションの概要をご覧ください。

  • NUMBER_OF_AUTOSCALING_SLOTS: 予約に割り当てられている自動スケーリング スロットの数。これは、最大予約サイズの値からベースラインのスロット数を差し引いた値に等しくなります。

--ignore_idle_slots フラグの詳細については、アイドル スロットをご覧ください。デフォルト値は false です。

Python

このコードサンプルを使用する前に、google-cloud-bigquery-reservation パッケージをインストールしてください。 ReservationServiceClient を作成します。Reservation を使用して、作成する予約を記述します。create_reservation メソッドを使用して予約を作成します。
# TODO(developer): Set project_id to the project ID containing the
# reservation.
project_id = "your-project-id"

# TODO(developer): Set location to the location of the reservation.
# See: https://cloud.google.com/bigquery/docs/locations for a list of
# available locations.
location = "US"

# TODO(developer): Set reservation_id to a unique ID of the reservation.
reservation_id = "sample-reservation"

# TODO(developer): Set slot_capicity to the number of slots in the
# reservation.
slot_capacity = 100

# TODO(developer): Choose a transport to use. Either 'grpc' or 'rest'
transport = "grpc"

# ...

from google.cloud.bigquery_reservation_v1.services import reservation_service
from google.cloud.bigquery_reservation_v1.types import (
    reservation as reservation_types,
)

reservation_client = reservation_service.ReservationServiceClient(
    transport=transport
)

parent = reservation_client.common_location_path(project_id, location)

reservation = reservation_types.Reservation(slot_capacity=slot_capacity)
reservation = reservation_client.create_reservation(
    parent=parent,
    reservation=reservation,
    reservation_id=reservation_id,
)

print(f"Created reservation: {reservation.name}")

予約を更新する

予約に対して以下の更新を行うことができます。

  • 予約サイズを変更するには、スロットを追加または削除します。
  • この予約のクエリがアイドル スロットを使用するかどうかを構成します。
  • 予約に割り当てるベースライン スロットまたは自動スケーリング スロットの数を変更する。

必要な権限

予約を更新するには、次の Identity and Access Management(IAM)権限が必要です。

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

  • BigQuery Admin
  • BigQuery Resource Admin
  • BigQuery Resource Editor

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

予約のサイズを変更する

既存の予約に対して、スロットを追加または削除できます。

コンソール

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

    BigQuery に移動

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

  3. [予約] タブをクリックします。

  4. 更新する予約を見つけます。

  5. [アクション] オプションを展開します。

  6. [編集] をクリックします。

  7. [最大予約サイズ セレクタ] ダイアログで、最大予約サイズを入力します。

  8. [ベースライン スロット数] フィールドに、ベースライン スロット数を入力します。

  9. [保存] をクリックします。

SQL

予約のサイズを変更するには、ALTER RESERVATION SET OPTIONS データ定義言語(DDL)ステートメントを使用します。

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

    BigQuery に移動

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

    ALTER RESERVATION
      `ADMIN_PROJECT_ID.region-LOCATION.RESERVATION_NAME`
    SET OPTIONS (
      slot_capacity = NUMBER_OF_BASELINE_SLOTS,
    );

    以下を置き換えます。

    • ADMIN_PROJECT_ID: 予約リソースを所有する管理プロジェクトのプロジェクト ID
    • LOCATION: 予約のロケーション(例: europe-west9)。
    • RESERVATION_NAME: 予約の名前先頭と末尾は英小文字または数字にしてください。使用できるのは英小文字、数字、ダッシュのみです。

    • NUMBER_OF_BASELINE_SLOTS: 予約に割り当てるベースライン スロットの数。

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

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

bq

予約のサイズを更新するには、bq update コマンドを使用し、--reservation フラグを指定します。

bq update \
    --project_id=ADMIN_PROJECT_ID \
    --location=LOCATION \
    --slots=NUMBER_OF_BASELINE_SLOTS \
    --reservation RESERVATION_NAME

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

  • ADMIN_PROJECT_ID: プロジェクト ID
  • LOCATION: 予約のロケーション
  • NUMBER_OF_BASELINE_SLOTS: 予約に割り当てるベースラインのスロット数。
  • RESERVATION_NAME: 予約の名前

Python

このコードサンプルを使用する前に、google-cloud-bigquery-reservation パッケージをインストールしてください。 ReservationServiceClient を作成します。Reservation プロパティと FieldMask.paths プロパティを使用して、更新されたプロパティを記述します。update_reservation メソッドで予約を更新します。
# TODO(developer): Set project_id to the project ID containing the
# reservation.
project_id = "your-project-id"

# TODO(developer): Set location to the location of the reservation.
# See: https://cloud.google.com/bigquery/docs/locations for a list of
# available locations.
location = "US"

# TODO(developer): Set reservation_id to a unique ID of the reservation.
reservation_id = "sample-reservation"

# TODO(developer): Set slot_capicity to the new number of slots in the
# reservation.
slot_capacity = 50

# TODO(developer): Choose a transport to use. Either 'grpc' or 'rest'
transport = "grpc"

# ...

from google.cloud.bigquery_reservation_v1.services import reservation_service
from google.cloud.bigquery_reservation_v1.types import (
    reservation as reservation_types,
)
from google.protobuf import field_mask_pb2

reservation_client = reservation_service.ReservationServiceClient(
    transport=transport
)

reservation_name = reservation_client.reservation_path(
    project_id, location, reservation_id
)
reservation = reservation_types.Reservation(
    name=reservation_name,
    slot_capacity=slot_capacity,
)
field_mask = field_mask_pb2.FieldMask(paths=["slot_capacity"])
reservation = reservation_client.update_reservation(
    reservation=reservation, update_mask=field_mask
)

print(f"Updated reservation: {reservation.name}")
print(f"\tslot_capacity: {reservation.slot_capacity}")

クエリでアイドル スロットを使用するかどうかを構成する

--ignore_idle_slots フラグは、予約で実行中のクエリから他の予約のアイドル スロットを使用できるかどうかを制御します。詳細については、アイドル スロットをご覧ください。この構成は既存の予約で更新できます。

予約を更新するには、bq update コマンドを使用し、--reservation フラグを指定します。次の例では、--ignore_idle_slotstrue に設定しています。つまり、予約は、その予約に割り当てられたスロットのみを使用します。

bq update \
    --project_id=ADMIN_PROJECT_ID \
    --location=LOCATION \
    --ignore_idle_slots=true \
    --reservation RESERVATION_NAME

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

  • ADMIN_PROJECT_ID: プロジェクト ID
  • LOCATION: 予約のロケーション
  • RESERVATION_NAME: 予約の名前

アイドル スロット構成を一覧表示する

予約のアイドル スロットの設定を一覧表示するには、次のようにします。

SQL

INFORMATION_SCHEMA.RESERVATIONS_BY_PROJECT ビューignore_idle_slots 列のクエリを実行します。

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

    BigQuery に移動

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

    SELECT
      reservation_name,
      ignore_idle_slots
    FROM
      `ADMIN_PROJECT_ID.region-LOCATION`.INFORMATION_SCHEMA.RESERVATIONS_BY_PROJECT;

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

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

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

bq

--reservation フラグを指定して bq ls コマンドを使用します。

bq ls --reservation \
    --project_id=ADMIN_PROJECT_ID \
    --location=LOCATION

以下を置き換えます。

ignoreIdleSlots フィールドには、構成設定が含まれています。

予約の削除

予約を削除すると、その予約のスロットで実行中のジョブが失敗します。エラーが発生しないようにするには、実行中のジョブを完了させてから予約を削除してください。

必要な権限

予約を削除するには、次の Identity and Access Management(IAM)権限が必要です。

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

  • BigQuery Admin
  • BigQuery Resource Admin
  • BigQuery Resource Editor

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

予約の削除

コンソール

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

    BigQuery に移動

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

  3. [予約] タブをクリックします。

  4. 削除する予約を見つけます。

  5. [アクション] オプションを展開します。

  6. [削除] をクリックします。

  7. [予約の削除] ダイアログで、[削除] をクリックします。

SQL

予約を削除するには、DDL ステートメント DROP RESERVATION を使用します。

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

    BigQuery に移動

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

    DROP RESERVATION
      `ADMIN_PROJECT_ID.region-LOCATION.RESERVATION_NAME`;

    以下を置き換えます。

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

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

bq

予約を削除するには、bq rm コマンドを使用し、--reservation フラグを指定します。

bq rm \
    --project_id=ADMIN_PROJECT_ID \
    --location=LOCATION \
    --reservation RESERVATION_NAME

以下を置き換えます。

Python

このコードサンプルを使用する前に、google-cloud-bigquery-reservation パッケージをインストールしてください。 ReservationServiceClient を作成します。delete_reservation メソッドを使用して予約を削除します。
# TODO(developer): Set project_id to the project ID containing the
# reservation.
project_id = "your-project-id"

# TODO(developer): Set location to the location of the reservation.
# See: https://cloud.google.com/bigquery/docs/locations for a list of
# available locations.
location = "US"

# TODO(developer): Set reservation_id to a unique ID of the reservation.
reservation_id = "sample-reservation"

# TODO(developer): Choose a transport to use. Either 'grpc' or 'rest'
transport = "grpc"

# ...

from google.cloud.bigquery_reservation_v1.services import reservation_service

reservation_client = reservation_service.ReservationServiceClient(
    transport=transport
)
reservation_name = reservation_client.reservation_path(
    project_id, location, reservation_id
)
reservation_client.delete_reservation(name=reservation_name)

print(f"Deleted reservation: {reservation_name}")

BigQuery Reservation API を VPC Service Controls に追加する

BigQuery Reservation API は VPC Service Controls をサポートしています。 BigQuery Reservation API を VPC Service Controls と統合するには、サービス境界を作成するの手順に沿って、保護されたサービスに BigQuery Reservation API を追加します。

サービス境界は、境界で指定された管理プロジェクト内の予約、コミットメント、割り当てへのアクセスを保護します。割り当てを作成する場合、VPC Service Controls は管理プロジェクトと割り当て先のプロジェクト、フォルダ、組織を保護します。