スロット予約の操作

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 エディションの機能は、エディション内でのみ使用できます。詳細については、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

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

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

予約のサイズを変更するには、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,
      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

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

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

予約を更新するには、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}")