スロット予約の操作

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

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

予約を作成する

必要な権限

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

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

  • BigQuery Resource Editor
  • BigQuery Resource Admin

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

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

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

コンソール

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

    [BigQuery] に移動

  2. ナビゲーション パネルで [容量管理] セクションに移動し、[予約を作成] をクリックします。

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

  4. [ロケーション] プルダウン リストで、ロケーションを選択します。BigQuery Omni のロケーションを選択した場合、エディション オプションは Enterprise エディションに限定されます。

  5. [エディション] リストでエディションを選択します。自動スケーリングはエディション内でのみ利用可能です。詳細については、BigQuery エディションの概要をご覧ください。

  6. [最大予約サイズセレクタ] リストで、最大予約サイズを選択します。

  7. 省略可: [ベースライン スロット] フィールドに、予約用のベースライン スロット数を入力します。

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

  8. アイドル スロットの共有を無効にして、指定したスロット容量のみを使用するには、[アイドル スロットを無視する] トグルをクリックします。

  9. [詳細設定] セクションを開くには、 展開矢印をクリックします。

  10. 省略可: ターゲット ジョブの同時実行を設定するには、[自動のターゲット ジョブ同時実行をオーバーライドする] トグルをオンに切り替えて、ターゲット ジョブの同時実行を入力します。

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

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

新しい予約が [スロットの予約] タブに表示されます。

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,
      edition = EDITION,
      autoscale_max_slots = NUMBER_OF_AUTOSCALING_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

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

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 \
    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 です。

Terraform

google_bigquery_reservation リソースを使用します。

BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証を設定するをご覧ください。

次の例では、my-reservation という名前の予約を作成します。

resource "google_bigquery_reservation" "default" {
  name              = "my-reservation"
  location          = "us-central1"
  slot_capacity     = 100
  edition           = "ENTERPRISE"
  ignore_idle_slots = false # Use idle slots from other reservations
  concurrency       = 0     # Automatically adjust query concurrency based on available resources
  autoscale {
    max_slots = 200 # Allow the reservation to scale up to 300 slots (slot_capacity + max_slots) if needed
  }
}

Google Cloud プロジェクトで Terraform 構成を適用するには、次のセクションの手順を完了します。

Cloud Shell を準備する

  1. Cloud Shell を起動します。
  2. Terraform 構成を適用するデフォルトの Google Cloud プロジェクトを設定します。

    このコマンドは、プロジェクトごとに 1 回だけ実行する必要があります。これは任意のディレクトリで実行できます。

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

    Terraform 構成ファイルに明示的な値を設定すると、環境変数がオーバーライドされます。

ディレクトリを準備する

Terraform 構成ファイルには独自のディレクトリ(ルート モジュールとも呼ばれます)が必要です。

  1. Cloud Shell で、ディレクトリを作成し、そのディレクトリ内に新しいファイルを作成します。ファイルの拡張子は .tf にする必要があります(例: main.tf)。このチュートリアルでは、このファイルを main.tf とします。
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. チュートリアルを使用している場合は、各セクションまたはステップのサンプルコードをコピーできます。

    新しく作成した main.tf にサンプルコードをコピーします。

    必要に応じて、GitHub からコードをコピーします。Terraform スニペットがエンドツーエンドのソリューションの一部である場合は、この方法をおすすめします。

  3. 環境に適用するサンプル パラメータを確認し、変更します。
  4. 変更を保存します。
  5. Terraform を初期化します。これは、ディレクトリごとに 1 回だけ行います。
    terraform init

    最新バージョンの Google プロバイダを使用する場合は、-upgrade オプションを使用します。

    terraform init -upgrade

変更を適用する

  1. 構成を確認して、Terraform が作成または更新するリソースが想定どおりであることを確認します。
    terraform plan

    必要に応じて構成を修正します。

  2. 次のコマンドを実行します。プロンプトで「yes」と入力して、Terraform 構成を適用します。
    terraform apply

    Terraform に「Apply complete!」というメッセージが表示されるまで待ちます。

  3. Google Cloud プロジェクトを開いて結果を表示します。Google Cloud コンソールの UI でリソースに移動して、Terraform によって作成または更新されたことを確認します。

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. [詳細設定] セクションを開くには、 展開矢印をクリックします。

  10. 省略可: ターゲット ジョブの同時実行を設定するには、[自動のターゲット ジョブ同時実行をオーバーライドする] トグルをオンに切り替えて、ターゲット ジョブの同時実行を入力します。

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

SQL

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

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

    [BigQuery] に移動

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

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

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

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

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

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

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

bq

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

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

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

予約を更新するには、--reservation フラグを指定して bq update コマンドを使用します。次の例では、--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

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

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}")