予約割り当てを操作する
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 を使用できるようにする方法については、BigQuery で Gemini を設定するをご覧ください。
[作成] をクリックします。
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');
以下を置き換えます。
ADMIN_PROJECT_ID
: 予約リソースを所有する管理プロジェクトのプロジェクト IDLOCATION
: 予約のロケーションRESERVATION_NAME
: 予約の名前ASSIGNMENT_ID
: 割り当ての ID。ID はプロジェクトとロケーションごとに一意でなければならず、先頭と末尾を英小文字または数字にする必要があり、英小文字、数字、ダッシュのみを使用できます。
ORGANIZATION_ID
: 組織 IDJOB_TYPE
: この予約に割り当てるジョブの種類。たとえば、QUERY
(プレビュー)、CONTINUOUS
、PIPELINE
、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=ORGANIZATION_ID \ --job_type=JOB_TYPE \ --assignee_type=ORGANIZATION
以下を置き換えます。
予約割り当てを作成する場合は、5 分以上待ってからクエリを実行してください。そうしない場合、クエリはオンデマンド料金で課金される可能性があります。
プロジェクトまたはフォルダを予約に割り当てる
コンソール
Google Cloud コンソールで [BigQuery] ページに移動します。
ナビゲーション パネルで [容量管理] セクションに移動します。
[予約] タブをクリックします。
予約の表で予約を見つけます。
[アクション] オプションを展開します。
[割り当ての作成] をクリックします。
[割り当ての作成] セクションで [参照] をクリックします。
プロジェクトまたはフォルダを参照または検索して選択します。
[ジョブタイプ] セクションで、この予約に割り当てるジョブタイプを選択します。選択できるオプションは次のとおりです。
QUERY
CONTINUOUS
(プレビュー)PIPELINE
BACKGROUND
ML_EXTERNAL
ジョブタイプの詳細については、予約の割り当てをご覧ください。このデフォルト値は
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
: 予約リソースを所有する管理プロジェクトのプロジェクト IDLOCATION
: 予約のロケーションRESERVATION_NAME
: 予約の名前ASSIGNMENT_ID
: 割り当ての ID。ID はプロジェクトとロケーションごとに一意でなければならず、先頭と末尾を英小文字または数字にする必要があり、英小文字、数字、ダッシュのみを使用できます。
PROJECT_ID
: 予約に割り当てるプロジェクトの IDJOB_TYPE
: この予約に割り当てるジョブの種類。たとえば、QUERY
(プレビュー)、CONTINUOUS
、PIPELINE
、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
以下を置き換えます。
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 によって作成または更新されたことを確認します。
スロットを 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
: 予約リソースを所有するプロジェクトの IDLOCATION
: 新しい予約のロケーション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
: 予約リソースを所有する管理プロジェクトのプロジェクト IDLOCATION
: 予約のロケーション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
: 予約リソースを所有するプロジェクトの IDLOCATION
: 予約のロケーションRESERVATION_NAME
: 予約の名前ASSIGNMENT_ID
: 割り当ての ID。割り当て ID を取得するには、プロジェクトの予約割り当てを検索するをご覧ください。