予約割り当てを操作する

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

予約割り当ての作成

購入したスロットを使用するには、割り当てを作成して、プロジェクト、フォルダ、または組織をスロット予約に割り当てます。

プロジェクトは、割り当てられているリソース階層内で最も明確な単一の予約を使用します。フォルダの割り当ては組織の割り当てをオーバーライドし、プロジェクトの割り当てはフォルダの割り当てをオーバーライドします。フォルダと組織の割り当ては、標準エディションの予約では使用できません。

予約に割り当てを作成するには、予約が次のいずれかの条件を満たしている必要があります。

  • 割り当てられたベースライン スロットがゼロ以外の値に構成されている。

  • 自動スケーリング スロットがゼロ以外の値に構成されている。

  • アイドル スロットを使用するように構成されており、プロジェクトでアイドル スロットが利用可能である。

これらの条件のいずれかを満たさない予約にリソースを割り当てようとすると、次のメッセージが表示されます。Assignment is pending, your project will be executed as on-demand.

リソースをフェイルオーバー予約に割り当てることができますが、割り当てはセカンダリ ロケーションで保留されます。

必要な権限

予約割り当てを作成するには、次の 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. [ジョブタイプ] セクションで、この予約に割り当てるジョブタイプを選択します。選択できるオプションは次のとおりです。

    ジョブタイプの詳細については、予約の割り当てをご覧ください。このデフォルト値は QUERY です。

  10. [作成] をクリックします。

SQL

組織を予約に割り当てるには、CREATE ASSIGNMENT DDL ステートメントを使用します。

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

    [BigQuery] に移動

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

    CREATE ASSIGNMENT
      `ADMIN_PROJECT_ID.region-LOCATION.RESERVATION_NAME.ASSIGNMENT_ID`
    OPTIONS (
      assignee = 'organizations/ORGANIZATION_ID',
      job_type = 'JOB_TYPE');

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

    • ADMIN_PROJECT_ID: 予約リソースを所有する管理プロジェクトのプロジェクト ID
    • LOCATION: 予約のロケーション
    • RESERVATION_NAME: 予約の名前
    • ASSIGNMENT_ID: 割り当ての ID

      ID はプロジェクトとロケーションごとに一意でなければならず、先頭と末尾を英小文字または数字にする必要があり、英小文字、数字、ダッシュのみを使用できます。

    • ORGANIZATION_ID: 組織 ID
    • JOB_TYPE: この予約に割り当てるジョブの種類。たとえば、QUERYプレビュー)、CONTINUOUSPIPELINEBACKGROUNDML_EXTERNAL など。

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

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

bq

組織のジョブを予約に割り当てるには、--reservation_assignment フラグを指定して bq mk コマンドを使用します。

bq mk \
    --project_id=ADMIN_PROJECT_ID \
    --location=LOCATION \
    --reservation_assignment \
    --reservation_id=RESERVATION_NAME \
    --assignee_id=ORGANIZATION_ID \
    --job_type=JOB_TYPE \
    --assignee_type=ORGANIZATION

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

予約割り当てを作成する場合は、5 分以上待ってからクエリを実行してください。そうしない場合、クエリはオンデマンド料金で課金される可能性があります。

プロジェクトまたはフォルダを予約に割り当てる

コンソール

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

    [BigQuery] に移動

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

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

  4. 予約の表で予約を見つけます。

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

  6. [割り当ての作成] をクリックします。

  7. [割り当ての作成] セクションで [参照] をクリックします。

  8. プロジェクトまたはフォルダを参照または検索して選択します。

  9. [ジョブタイプ] セクションで、この予約に割り当てるジョブタイプを選択します。選択できるオプションは次のとおりです。

    ジョブタイプの詳細については、予約の割り当てをご覧ください。このデフォルト値は QUERY です。

  10. [作成] をクリックします。

SQL

プロジェクトを予約に割り当てるには、CREATE ASSIGNMENT DDL ステートメントを使用します。

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

    [BigQuery] に移動

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

    CREATE ASSIGNMENT
      `ADMIN_PROJECT_ID.region-LOCATION.RESERVATION_NAME.ASSIGNMENT_ID`
    OPTIONS(
      assignee="projects/PROJECT_ID",
      job_type="JOB_TYPE");

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

    • ADMIN_PROJECT_ID: 予約リソースを所有する管理プロジェクトのプロジェクト ID
    • LOCATION: 予約のロケーション
    • RESERVATION_NAME: 予約の名前
    • ASSIGNMENT_ID: 割り当ての ID

      ID はプロジェクトとロケーションごとに一意でなければならず、先頭と末尾を英小文字または数字にする必要があり、英小文字、数字、ダッシュのみを使用できます。

    • PROJECT_ID: 予約に割り当てるプロジェクトの ID
    • JOB_TYPE: この予約に割り当てるジョブの種類。たとえば、QUERYプレビュー)、CONTINUOUSPIPELINEBACKGROUNDML_EXTERNAL など。

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

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

bq

予約にジョブを割り当てるには、--reservation_assignment フラグを指定して bq mk コマンドを使用します。

bq mk \
    --project_id=ADMIN_PROJECT_ID \
    --location=LOCATION \
    --reservation_assignment \
    --reservation_id=RESERVATION_NAME \
    --assignee_id=PROJECT_ID \
    --job_type=JOB_TYPE \
    --assignee_type=PROJECT

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

  • ADMIN_PROJECT_ID: 予約リソースを所有する管理プロジェクトのプロジェクト ID
  • LOCATION: 予約のロケーション
  • RESERVATION_NAME: 予約の名前
  • PROJECT_ID: この予約に割り当てるプロジェクトの ID
  • JOB_TYPE: この予約に割り当てるジョブの種類。たとえば、QUERYプレビュー)、CONTINUOUSPIPELINEBACKGROUNDML_EXTERNAL など。

Terraform

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

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

data "google_project" "project" {}

resource "google_bigquery_reservation_assignment" "default" {
  assignee    = "projects/${data.google_project.project.project_id}"
  job_type    = "QUERY"
  reservation = google_bigquery_reservation.default.id
}

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 によって作成または更新されたことを確認します。

予約割り当てを作成する場合は、5 分以上待ってからクエリを実行してください。そうしない場合、クエリはオンデマンド料金で課金される可能性があります。

アイドル スロットのみを使用するプロジェクトを作成するには、0 スロットが割り当てられた予約を作成し、先程の手順に沿ってその予約にプロジェクトを割り当てます。

プロジェクトを none に割り当てる

none への割り当ては、割り当てがないことを表します。none に割り当てられたプロジェクトはオンデマンド料金を使用します。

SQL

プロジェクトを none に割り当てるには、CREATE ASSIGNMENT DDL ステートメントを使用します。

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

    [BigQuery] に移動

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

    CREATE ASSIGNMENT
      `ADMIN_PROJECT_ID.region-LOCATION.none.ASSIGNMENT_ID`
    OPTIONS(
      assignee="projects/PROJECT_ID",
      job_type="QUERY");

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

    • LOCATION: オンデマンド料金を使用するジョブのロケーション
    • ASSIGNMENT_ID: 割り当ての ID

      ID はプロジェクトとロケーションごとに一意でなければならず、先頭と末尾を英小文字または数字にする必要があり、英小文字、数字、ダッシュのみを使用できます。

    • PROJECT_ID: 予約に割り当てるプロジェクトの ID

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

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

bq

プロジェクトを none に割り当てるには、--reservation_assignment フラグを指定して bq mk コマンドを使用します。

bq mk \
    --location=LOCATION \
    --reservation_assignment \
    --reservation_id=none \
    --job_type=QUERY \
    --assignee_id=PROJECT_ID \
    --assignee_type=PROJECT

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

  • LOCATION: オンデマンド料金を使用するジョブのロケーション
  • PROJECT_ID: none に割り当てるプロジェクトの ID

Terraform

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

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

次の例では、プロジェクトを none に割り当てます。

data "google_project" "project" {}

resource "google_bigquery_reservation_assignment" "default" {
  assignee    = "projects/${data.google_project.project.project_id}"
  job_type    = "QUERY"
  reservation = "projects/${data.google_project.project.project_id}/locations/us/reservations/none"
}

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 によって作成または更新されたことを確認します。

スロットを BigQuery ML ワークロードに割り当てる

次の BigQuery ML モデルタイプでは外部サービスを使用します。

ML_EXTERNAL 割り当てタイプを使用することで、これらのサービスを使用するクエリに予約済みスロットを割り当てることができます。ML_EXTERNAL 割り当てタイプが見つからない場合、クエリジョブはオンデマンドとして実行されます。

--reservation_assignment フラグを指定して bq mk コマンドを使用し、--job_type フラグを ML_EXTERNAL に設定します。

bq mk \
    --project_id=ADMIN_PROJECT_ID \
    --location=LOCATION \
    --reservation_assignment \
    --reservation_id=RESERVATION_NAME \
    --job_type=ML_EXTERNAL\
    --assignee_id=PROJECT_ID \
    --assignee_type=PROJECT

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

  • ADMIN_PROJECT_ID: 予約リソースを所有するプロジェクトの ID
  • LOCATION: 予約のロケーション
  • RESERVATION_NAME: 予約の名前
  • PROJECT_ID: この予約に割り当てるプロジェクトの ID

予約割り当ての検索

必要な権限

特定のプロジェクト、フォルダ、または組織の予約割り当てを検索するには、次の Identity and Access Management(IAM)権限が必要です。

  • 管理プロジェクトの bigquery.reservationAssignments.list

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

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

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

プロジェクトの予約割り当てを検索する

プロジェクト、フォルダ、組織が予約に割り当てられているかどうかは、次の手順で確認できます。

コンソール

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

    [BigQuery] に移動

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

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

  4. 予約の表で、予約を展開してその予約に割り当てられているリソースを参照するか、[フィルタ] フィールドを使用してリソース名でフィルタします。

SQL

プロジェクトのクエリジョブがどの予約に割り当てられているかを確認するには、INFORMATION_SCHEMA.ASSIGNMENTS_BY_PROJECT ビューに対してクエリを実行します。

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

    [BigQuery] に移動

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

      SELECT
        assignment_id
      FROM `region-LOCATION`.INFORMATION_SCHEMA.ASSIGNMENTS_BY_PROJECT
      WHERE
        assignee_id = 'PROJECT_ID'
        AND job_type = 'JOB_TYPE';

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

    • LOCATION: 表示する予約のロケーション
    • ADMIN_PROJECT_ID: 予約リソースを所有する管理プロジェクトのプロジェクト ID
    • PROJECT_ID: 予約に割り当てるプロジェクトの ID
    • JOB_TYPE: この予約に割り当てるジョブの種類。たとえば、QUERYプレビュー)、CONTINUOUSPIPELINEBACKGROUNDML_EXTERNAL など。

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

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

bq

プロジェクトのクエリジョブがどの予約に割り当てられているかを確認するには、--reservation_assignment フラグを指定して bq show コマンドを使用します。

bq show \
    --project_id=ADMIN_PROJECT_ID \
    --location=LOCATION \
    --reservation_assignment \
    --job_type=JOB_TYPE \
    --assignee_id=PROJECT_ID \
    --assignee_type=PROJECT

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

  • ADMIN_PROJECT_ID: 予約リソースを所有するプロジェクトの ID
  • LOCATION: 表示する予約のロケーション
  • JOB_TYPE: この予約に割り当てるジョブの種類。たとえば、QUERYプレビュー)、CONTINUOUSPIPELINEBACKGROUNDML_EXTERNAL など。
  • PROJECT_ID: プロジェクトの ID

予約割り当ての更新

割り当てを別の予約に移動する

割り当ては、ある予約から別の予約に移動できます。

予約割り当てを移動するには、管理プロジェクトと割り当て先に対する次の Identity and Access Management(IAM)権限が必要です。

  • bigquery.reservationAssignments.create
  • bigquery.reservationAssignments.delete

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

  • BigQuery Admin
  • BigQuery Resource Admin
  • BigQuery Resource Editor

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

割り当てを移動するには、bq update コマンドを使用します。

bq update \
    --project_id=ADMIN_PROJECT_ID \
    --location=LOCATION \
    --reservation_assignment \
    --destination_reservation_id=DESTINATION_RESERVATION \
    ADMIN_PROJECT_ID:LOCATION.RESERVATION_NAME.ASSIGNMENT_ID

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

  • ADMIN_PROJECT_ID: 予約リソースを所有するプロジェクトの ID
  • LOCATION: 新しい予約のロケーション
  • RESERVATION_NAME: 割り当ての移動元の予約
  • DESTINATION_RESERVATION: 割り当ての移動先の予約
  • ASSIGNMENT_ID: 割り当ての ID

    割り当て ID を取得するには、プロジェクトの予約割り当てを一覧表示するをご覧ください。

予約割り当ての削除

予約割り当てを削除することで、予約からプロジェクトを削除できます。プロジェクトがどの予約にも割り当てられていない場合は、親フォルダまたは組織での割り当てを継承します。または、親割り当てがない場合は、オンデマンド料金を使用します。

予約の割り当てを削除しても、その予約のスロットで実行中のジョブは完了するまで実行されます。

必要な権限

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

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

  • BigQuery Admin
  • BigQuery Resource Admin
  • BigQuery Resource Editor

プロジェクトを予約から削除する

予約からプロジェクトを削除するには:

コンソール

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

    [BigQuery] に移動

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

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

  4. 予約の表で、予約を展開してプロジェクトを見つけます。

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

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

SQL

DROP ASSIGNMENT DDL ステートメントを使用します。

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

    [BigQuery] に移動

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

    DROP ASSIGNMENT
      `ADMIN_PROJECT_ID.region-LOCATION.RESERVATION_NAME.ASSIGNMENT_ID`;

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

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

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

bq

予約からプロジェクトを削除するには、--reservation_assignment フラグを指定して bq rm コマンドを使用します。

bq rm \
    --project_id=ADMIN_PROJECT_ID \
    --location=LOCATION \
    --reservation_assignment RESERVATION_NAME.ASSIGNMENT_ID

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