予約割り当てを操作する
BigQuery Reservation API を使用すると、専用スロットを購入し(コミットメントと呼ぶ)、スロットのプールを作成し(予約と呼ぶ)、それらの予約にプロジェクト、フォルダ、組織を割り当てることができます。
予約割り当ての作成
購入したスロットを使用するには、割り当てを作成して、プロジェクト、フォルダ、または組織をスロット予約に割り当てます。割り当てレベルで特定のスロット数を割り当てたり、割り振ったりすることはできません。スロットは予約レベルで管理および割り当てされます。
プロジェクトは、割り当てられているリソース階層内で最も明確な単一の予約を使用します。フォルダの割り当ては組織の割り当てをオーバーライドし、プロジェクトの割り当てはフォルダの割り当てをオーバーライドします。フォルダと組織の割り当ては、標準エディションの予約では使用できません。
予約に割り当てを作成するには、予約が次のいずれかの条件を満たしている必要があります。
- 割り当てられたベースライン スロットがゼロ以外の値に構成されている。 
- 自動スケーリング スロットがゼロ以外の値に構成されている。 
- アイドル スロットを使用するように構成されており、プロジェクトでアイドル スロットが利用可能である。 
これらの条件のいずれかを満たさない予約にリソースを割り当てようとすると、次のメッセージが表示されます。Assignment is pending, your project will be executed as on-demand.
リソースをフェイルオーバー予約に割り当てることができますが、割り当てはセカンダリ ロケーションで保留されます。
必要な権限
予約割り当てを作成するには、次の Identity and Access Management(IAM)権限が必要です。
- 管理プロジェクトと割り当て先に対する bigquery.reservationAssignments.create。
この権限は、次の各 IAM 事前定義ロールに含まれています。
- BigQuery Admin
- BigQuery Resource Admin
- BigQuery Resource Editor
BigQuery での IAM のロールの詳細については、事前定義ロールと権限をご覧ください。
組織を予約に割り当てる
コンソール
- Google Cloud コンソールで、[BigQuery] ページに移動します。 
- ナビゲーション メニューで、[容量管理] をクリックします。 
- [予約] タブをクリックします。 
- 予約の表で予約を見つけます。 
- [アクション] オプションを展開します。 
- [割り当ての作成] をクリックします。 
- [割り当ての作成] セクションで [参照] をクリックします。 
- 組織を参照または検索して選択します。 
- [ジョブタイプ] セクションで、この予約に割り当てるジョブタイプを選択します。選択できるオプションは次のとおりです: - QUERY
- CONTINUOUS
- PIPELINE
- BACKGROUND
- ML_EXTERNAL
 - ジョブタイプの詳細については、予約の割り当てをご覧ください。このデフォルト値は - QUERYです。- Enterprise Plus エディションの割り当てでユーザーが Gemini in BigQuery を使用できるようにする方法については、Gemini in BigQuery を設定するをご覧ください。 
- [作成] をクリックします。 
SQL
組織を予約に割り当てるには、CREATE ASSIGNMENT DDL ステートメントを使用します。
- Google Cloud コンソールで、[BigQuery] ページに移動します。 
- クエリエディタで次のステートメントを入力します。 - CREATE ASSIGNMENT `ADMIN_PROJECT_ID.region-LOCATION.RESERVATION_NAME.ASSIGNMENT_ID` OPTIONS ( assignee = 'organizations/ORGANIZATION_ID', job_type = 'JOB_TYPE'); - 次のように置き換えます。 
- [実行] をクリックします。 
クエリの実行方法については、インタラクティブ クエリを実行するをご覧ください。
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 分以上待ってからクエリを実行してください。そうしない場合、クエリはオンデマンド料金で課金される可能性があります。
プロジェクトまたはフォルダを予約に割り当てる
コンソール
- Google Cloud コンソールで、[BigQuery] ページに移動します。 
- ナビゲーション メニューで、[容量管理] をクリックします。 
- [予約] タブをクリックします。 
- 予約の表で予約を見つけます。 
- [アクション] オプションを展開します。 
- [割り当ての作成] をクリックします。 
- [割り当ての作成] セクションで [参照] をクリックします。 
- プロジェクトまたはフォルダを参照または検索して選択します。 
- [ジョブタイプ] セクションで、この予約に割り当てるジョブタイプを選択します。選択できるオプションは次のとおりです: - QUERY
- CONTINUOUS
- PIPELINE
- BACKGROUND
- ML_EXTERNAL
 - コンソールでは、 - BACKGROUND_COLUMN_METADATA_INDEXなどのより詳細なバックグラウンド ジョブタイプの作成と変更はまだサポートされていません。- ジョブタイプの詳細については、予約の割り当てをご覧ください。このデフォルト値は - QUERYです。
- [作成] をクリックします。 
SQL
プロジェクトを予約に割り当てるには、CREATE ASSIGNMENT DDL ステートメントを使用します。
- Google Cloud コンソールで、[BigQuery] ページに移動します。 
- クエリエディタで次のステートメントを入力します。 - 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、- CONTINUOUS、- PIPELINE、- BACKGROUND_CHANGE_DATA_CAPTURE、- BACKGROUND_COLUMN_METADATA_INDEX、- BACKGROUND_SEARCH_INDEX_REFRESH、- BACKGROUND、- ML_EXTERNALなど)
 
- [ 実行] をクリックします。 
クエリの実行方法については、インタラクティブ クエリを実行するをご覧ください。
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、- CONTINUOUS、- PIPELINE、- BACKGROUND_CHANGE_DATA_CAPTURE、- BACKGROUND_COLUMN_METADATA_INDEX、- BACKGROUND_SEARCH_INDEX_REFRESH、- BACKGROUND、- ML_EXTERNALなど)
Terraform
google_bigquery_reservation_assignment リソースを使用します。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証を設定するをご覧ください。
次の例では、プロジェクトを my-reservation という名前の予約に割り当てます。
Google Cloud プロジェクトで Terraform 構成を適用するには、次のセクションの手順を完了します。
Cloud Shell を準備する
- Cloud Shell を起動します。
- 
    Terraform 構成を適用するデフォルトの Google Cloud プロジェクトを設定します。 このコマンドは、プロジェクトごとに 1 回だけ実行する必要があります。これは任意のディレクトリで実行できます。 export GOOGLE_CLOUD_PROJECT=PROJECT_ID Terraform 構成ファイルに明示的な値を設定すると、環境変数がオーバーライドされます。 
ディレクトリを準備する
Terraform 構成ファイルには独自のディレクトリ(ルート モジュールとも呼ばれます)が必要です。
- 
    Cloud Shell で、ディレクトリを作成し、そのディレクトリ内に新しいファイルを作成します。ファイルの拡張子は .tfにする必要があります(例:main.tf)。このチュートリアルでは、このファイルをmain.tfとします。mkdir DIRECTORY && cd DIRECTORY && touch main.tf 
- 
    チュートリアルを使用している場合は、各セクションまたはステップのサンプルコードをコピーできます。 新しく作成した main.tfにサンプルコードをコピーします。必要に応じて、GitHub からコードをコピーします。Terraform スニペットがエンドツーエンドのソリューションの一部である場合は、この方法をおすすめします。 
- 環境に適用するサンプル パラメータを確認し、変更します。
- 変更を保存します。
- 
    Terraform を初期化します。これは、ディレクトリごとに 1 回だけ行います。terraform init 最新バージョンの Google プロバイダを使用する場合は、 -upgradeオプションを使用します。terraform init -upgrade 
変更を適用する
- 
    構成を確認して、Terraform が作成または更新するリソースが想定どおりであることを確認します。terraform plan 必要に応じて構成を修正します。 
- 
    次のコマンドを実行します。プロンプトで「yes」と入力して、Terraform 構成を適用します。terraform apply Terraform に「Apply complete!」というメッセージが表示されるまで待ちます。 
- Google Cloud プロジェクトを開いて結果を表示します。 Google Cloud コンソールの UI でリソースに移動して、Terraform によって作成または更新されたことを確認します。
予約割り当てを作成する場合は、5 分以上待ってからクエリを実行してください。そうしない場合、クエリはオンデマンド料金で課金される可能性があります。
アイドル スロットのみを使用するプロジェクトを作成するには、0 スロットが割り当てられた予約を作成し、先程の手順に沿ってその予約にプロジェクトを割り当てます。
プロジェクトを none に割り当てる
none への割り当ては、割り当てがないことを表します。none に割り当てられたプロジェクトはオンデマンド料金を使用します。
SQL
プロジェクトを none に割り当てるには、CREATE ASSIGNMENT DDL ステートメントを使用します。
- Google Cloud コンソールで、[BigQuery] ページに移動します。 
- クエリエディタで次のステートメントを入力します。 - 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
 
- [実行] をクリックします。 
クエリの実行方法については、インタラクティブ クエリを実行するをご覧ください。
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 に割り当てます。
Google Cloud プロジェクトで Terraform 構成を適用するには、次のセクションの手順を完了します。
Cloud Shell を準備する
- Cloud Shell を起動します。
- 
    Terraform 構成を適用するデフォルトの Google Cloud プロジェクトを設定します。 このコマンドは、プロジェクトごとに 1 回だけ実行する必要があります。これは任意のディレクトリで実行できます。 export GOOGLE_CLOUD_PROJECT=PROJECT_ID Terraform 構成ファイルに明示的な値を設定すると、環境変数がオーバーライドされます。 
ディレクトリを準備する
Terraform 構成ファイルには独自のディレクトリ(ルート モジュールとも呼ばれます)が必要です。
- 
    Cloud Shell で、ディレクトリを作成し、そのディレクトリ内に新しいファイルを作成します。ファイルの拡張子は .tfにする必要があります(例:main.tf)。このチュートリアルでは、このファイルをmain.tfとします。mkdir DIRECTORY && cd DIRECTORY && touch main.tf 
- 
    チュートリアルを使用している場合は、各セクションまたはステップのサンプルコードをコピーできます。 新しく作成した main.tfにサンプルコードをコピーします。必要に応じて、GitHub からコードをコピーします。Terraform スニペットがエンドツーエンドのソリューションの一部である場合は、この方法をおすすめします。 
- 環境に適用するサンプル パラメータを確認し、変更します。
- 変更を保存します。
- 
    Terraform を初期化します。これは、ディレクトリごとに 1 回だけ行います。terraform init 最新バージョンの Google プロバイダを使用する場合は、 -upgradeオプションを使用します。terraform init -upgrade 
変更を適用する
- 
    構成を確認して、Terraform が作成または更新するリソースが想定どおりであることを確認します。terraform plan 必要に応じて構成を修正します。 
- 
    次のコマンドを実行します。プロンプトで「yes」と入力して、Terraform 構成を適用します。terraform apply Terraform に「Apply complete!」というメッセージが表示されるまで待ちます。 
- Google Cloud プロジェクトを開いて結果を表示します。 Google Cloud コンソールの UI でリソースに移動して、Terraform によって作成または更新されたことを確認します。
クエリの予約をオーバーライドする
クエリで特定の予約を使用するには、次の Identity and Access Management(IAM)権限が必要です。
- 予約またはその管理プロジェクトに対する bigquery.reservations.use。
特定の予約で実行するクエリを割り当てるには、次のいずれかを行います。
コンソール
- [BigQuery] ページに移動します。 
- [ SQL クエリ] をクリックします。 
- クエリエディタで、有効な GoogleSQL のクエリを入力します。 
- [ 展開] をクリックして、[クエリの設定] をクリックします。 
- [自動ロケーション設定] チェックボックスをオフにして、予約が存在するリージョンまたはマルチリージョンを選択します。 
- [予約] リストで、クエリを実行する予約を選択します。 
- [保存] をクリックします。 
- エディタタブでクエリを記述して実行します。クエリは、指定した予約で実行されます。 
SQL
@@reservation システム変数を使用して、クエリが実行される予約を割り当てることができます。
- Google Cloud コンソールで、[BigQuery] ページに移動します。 
- クエリエディタで次のステートメントを入力します。 - SET @@reservation='RESERVATION'; SELECT QUERY; - 次のように置き換えます。 - RESERVATION: クエリを実行する予約。
- QUERY: 実行するクエリ。
 
- [実行] をクリックします。 
クエリの実行方法については、インタラクティブ クエリを実行するをご覧ください。
たとえば、次のクエリでは、SET ステートメントを使用して、US マルチリージョンの test-reservation に予約を設定し、基本クエリを呼び出します。
SET @@reservation='projects/project1/locations/US/reservations/test-reservation'; SELECT 42;
bq
- 
  
   
   
     
   
  
 
   
 
 
 
  
    
    In the Google Cloud console, activate Cloud Shell. At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize. 
- Cloud Shell で、 - --reservation_idフラグを指定して- bq queryコマンドを使用し、クエリを実行します。- bq query --use_legacy_sql=false --reservation_id=RESERVATION_ID 'QUERY' - 次のように置き換えます。 - RESERVATION_ID: クエリを実行する予約。
- QUERY: クエリの SQL ステートメント。
 - たとえば、次のクエリは - USマルチリージョンの- test-reservation予約で実行されます。- bq query --reservation_id=project1.US:test-reservation 'SELECT 42;' 
API
API を使用して予約を指定するには、新しいジョブを挿入して query ジョブ構成プロパティに値を設定します。reservation フィールドで予約を指定します。
スロットを BigQuery ML ワークロードに割り当てる
以降のセクションでは、BigQuery ML モデルの予約割り当て要件について説明します。これらの予約割り当ては、組織を予約に割り当てるまたはプロジェクトまたはフォルダを予約に割り当てるの手順に沿って作成できます。
外部モデル
次の BigQuery ML モデルタイプでは外部サービスを使用します。
ML_EXTERNAL ジョブタイプを使用した予約割り当てを作成することで、これらのサービスを使用するクエリに予約済みスロットを割り当てることができます。ML_EXTERNAL ジョブタイプの予約割り当てが見つからない場合、クエリジョブはオンデマンド料金を使用して実行されます。
外部モデル トレーニング ジョブの場合、予約割り当てのスロットは、前処理、トレーニング、後処理のステップに使用されます。トレーニング中、スロットはプリエンプティブではありませんが、前処理と後処理ではアイドル スロットを使用できます。
行列分解モデル
行列分解モデルを作成するには、BigQuery の Enterprise エディションまたは Enterprise Plus エディションを使用した予約を作成し、QUERY ジョブタイプを使用した予約割り当てを作成する必要があります。
その他のモデルタイプ
外部モデルまたは行列分解モデルではない BigQuery ML モデルの場合、QUERY ジョブタイプを使用した予約割り当てを作成することで、これらのサービスを使用するクエリに予約済みスロットを割り当てることができます。QUERY ジョブタイプの予約割り当てが見つからない場合、クエリジョブはオンデマンド料金を使用して実行されます。
予約割り当てを検索する
必要な権限
特定のプロジェクト、フォルダ、または組織の予約割り当てを検索するには、次の Identity and Access Management(IAM)権限が必要です。
- 管理プロジェクトの bigquery.reservationAssignments.list。
この権限は、次の各 IAM 事前定義ロールに含まれています。
- BigQuery Admin
- BigQuery Resource Admin
- BigQuery Resource Editor
- BigQuery Resource Viewer
- BigQuery User
BigQuery での IAM のロールの詳細については、事前定義ロールと権限をご覧ください。
プロジェクトの予約割り当てを検索する
プロジェクト、フォルダ、組織が予約に割り当てられているかどうかは、次の手順で確認できます。
コンソール
- Google Cloud コンソールで、[BigQuery] ページに移動します。 
- ナビゲーション メニューで、[容量管理] をクリックします。 
- [予約] タブをクリックします。 
- 予約の表で、予約を展開してその予約に割り当てられているリソースを参照するか、[フィルタ] フィールドを使用してリソース名でフィルタします。 
SQL
プロジェクトのクエリジョブがどの予約に割り当てられているかを確認するには、INFORMATION_SCHEMA.ASSIGNMENTS_BY_PROJECT ビューに対してクエリを実行します。
- Google Cloud コンソールで、[BigQuery] ページに移動します。 
- クエリエディタで次のステートメントを入力します。 - SELECT assignment_id FROM `region-LOCATION`.INFORMATION_SCHEMA.ASSIGNMENTS_BY_PROJECT WHERE assignee_id = 'PROJECT_ID' AND job_type = 'JOB_TYPE'; - 次のように置き換えます。 
- [実行] をクリックします。 
クエリの実行方法については、インタラクティブ クエリを実行するをご覧ください。
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
次のように置き換えます。
予約割り当ての更新
割り当てを別の予約に移動する
割り当ては、ある予約から別の予約に移動できます。
予約割り当てを移動するには、管理プロジェクトと割り当て先に対する次の 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)権限が必要です。
- 管理プロジェクトと割り当て先に対する bigquery.reservationAssignments.delete。
この権限は、次の各 IAM 事前定義ロールに含まれています。
- BigQuery Admin
- BigQuery Resource Admin
- BigQuery Resource Editor
プロジェクトを予約から削除する
予約からプロジェクトを削除するには:
コンソール
- Google Cloud コンソールで、[BigQuery] ページに移動します。 
- ナビゲーション メニューで、[容量管理] をクリックします。 
- [予約] タブをクリックします。 
- 予約の表で、予約を展開してプロジェクトを見つけます。 
- [アクション] オプションを展開します。 
- [削除] をクリックします。 
SQL
DROP ASSIGNMENT DDL ステートメントを使用します。
- Google Cloud コンソールで、[BigQuery] ページに移動します。 
- クエリエディタで次のステートメントを入力します。 - DROP ASSIGNMENT `ADMIN_PROJECT_ID.region-LOCATION.RESERVATION_NAME.ASSIGNMENT_ID`; - 次のように置き換えます。 - ADMIN_PROJECT_ID: 予約リソースを所有する管理プロジェクトのプロジェクト ID
- LOCATION: 予約のロケーション
- RESERVATION_NAME: 予約の名前
- ASSIGNMENT_ID: 割り当ての ID。- 割り当て ID を確認するには、プロジェクトの予約割り当てを一覧表示するをご覧ください。 
 
- [実行] をクリックします。 
クエリの実行方法については、インタラクティブ クエリを実行するをご覧ください。
bq
予約からプロジェクトを削除するには、--reservation_assignment フラグを指定して bq rm コマンドを使用します。
bq rm \
    --project_id=ADMIN_PROJECT_ID \
    --location=LOCATION \
    --reservation_assignment RESERVATION_NAME.ASSIGNMENT_ID
次のように置き換えます。
- ADMIN_PROJECT_ID: 予約リソースを所有するプロジェクトの ID
- LOCATION: 予約のロケーション
- RESERVATION_NAME: 予約の名前
- ASSIGNMENT_ID: 割り当ての ID。- 割り当て ID を取得するには、プロジェクトの予約割り当てを検索するをご覧ください。