使用预留分配

通过 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 角色,请参阅预定义的角色和权限

将组织分配到预留

控制台

  1. 在 Google Cloud 控制台中,转到 BigQuery 页面。

    转到 BigQuery

  2. 在导航面板中,转到容量管理部分。

  3. 点击预留标签页。

  4. 在预留表中找到预留。

  5. 展开 操作选项。

  6. 点击创建分配

  7. 创建分配部分,点击浏览

  8. 浏览或搜索组织并选中它。

  9. 作业类型部分中,选择要为此预留分配的作业类型。包括以下选项:

    • QUERY
    • CONTINUOUS预览版
    • PIPELINE
    • BACKGROUND
    • ML_EXTERNAL

    如需详细了解作业类型,请参阅预留分配。此默认值为 QUERY

    如需详细了解如何允许用户在企业 Plus 版分配中使用 Gemini in BigQuery,请参阅在 BigQuery 中设置 Gemini

  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:要分配给此预留的作业的类型,例如 QUERYCONTINUOUS预览版)、PIPELINEBACKGROUNDML_EXTERNAL

  3. 点击 运行

如需详细了解如何运行查询,请参阅运行交互式查询

bq

如需将组织的作业分配给预留,请将 bq mk 命令与 --reservation_assignment 标志结合使用:

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

替换以下内容:

  • ADMIN_PROJECT_ID:拥有预留资源的管理项目的 ID
  • LOCATION:预留的位置
  • RESERVATION_NAME:预留的名称
  • ORGANIZATION_ID组织 ID
  • JOB_TYPE:要分配给此预留的作业的类型,例如 QUERYCONTINUOUS预览版)、PIPELINEBACKGROUNDML_EXTERNAL

创建预留分配时,请至少等待 5 分钟再运行查询。否则,该查询可能会采用按需价格方案计费。

将项目或文件夹分配到预留

控制台

  1. 在 Google Cloud 控制台中,转到 BigQuery 页面。

    转到 BigQuery

  2. 在导航面板中,转到容量管理部分。

  3. 点击预留标签页。

  4. 在预留表中找到预留。

  5. 展开 操作选项。

  6. 点击创建分配

  7. 创建分配部分,点击浏览

  8. 浏览或搜索项目或文件夹并选中它。

  9. 作业类型部分中,选择要为此预留分配的作业类型。包括以下选项:

    • QUERY
    • CONTINUOUS预览版
    • PIPELINE
    • BACKGROUND
    • ML_EXTERNAL

    如需详细了解作业类型,请参阅预留分配。此默认值为 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:要分配给此预留的作业的类型,例如 QUERYCONTINUOUS预览版)、PIPELINEBACKGROUNDML_EXTERNAL

  3. 点击 运行

如需详细了解如何运行查询,请参阅运行交互式查询

bq

如需将作业分配给预留,请将 bq mk 命令与 --reservation_assignment 标志结合使用:

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:要分配给此预留的作业的类型,例如 QUERYCONTINUOUS预览版)、PIPELINEBACKGROUNDML_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 项目。

    您只需为每个项目运行一次以下命令,即可在任何目录中运行它。

    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。您只需为每个目录执行一次此操作。
    terraform init

    (可选)如需使用最新的 Google 提供程序版本,请添加 -upgrade 选项:

    terraform init -upgrade

应用更改

  1. 查看配置并验证 Terraform 将创建或更新的资源是否符合您的预期:
    terraform plan

    根据需要更正配置。

  2. 通过运行以下命令并在提示符处输入 yes 来应用 Terraform 配置:
    terraform apply

    等待 Terraform 显示“应用完成!”消息。

  3. 打开您的 Google Cloud 项目以查看结果。在 Google Cloud 控制台的界面中找到资源,以确保 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,请将 bq mk 命令与 --reservation_assignment 标志结合使用:

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 项目。

    您只需为每个项目运行一次以下命令,即可在任何目录中运行它。

    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。您只需为每个目录执行一次此操作。
    terraform init

    (可选)如需使用最新的 Google 提供程序版本,请添加 -upgrade 选项:

    terraform init -upgrade

应用更改

  1. 查看配置并验证 Terraform 将创建或更新的资源是否符合您的预期:
    terraform plan

    根据需要更正配置。

  2. 通过运行以下命令并在提示符处输入 yes 来应用 Terraform 配置:
    terraform apply

    等待 Terraform 显示“应用完成!”消息。

  3. 打开您的 Google Cloud 项目以查看结果。在 Google Cloud 控制台的界面中找到资源,以确保 Terraform 已创建或更新它们。

将槽分配给 BigQuery ML 工作负载

以下部分介绍了 BigQuery ML 模型的预留分配要求。您可以按照将组织分配给预留将项目或文件夹分配给预留中的步骤创建这些预留分配。

外部模型

以下 BigQuery ML 模型类型使用外部服务:

您可以创建使用 ML_EXTERNAL 作业类型的预留分配,为使用这些服务的查询分配预留的槽。如果未找到具有 ML_EXTERNAL 作业类型的预留分配,则查询作业将使用按需价格运行。

对于外部模型训练作业,预留分配中的槽用于预处理、训练和后处理步骤。在训练期间,这些槽无法被抢占,但在预处理和后处理期间,可以使用空闲槽。

矩阵分解模型

如需创建矩阵分解模型,您必须创建预留(使用 BigQuery 企业版或企业 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 角色,请参阅预定义的角色和权限

查找项目的预留分配

如需了解您的项目、文件夹或组织是否已分配到预留,您可以执行以下操作:

控制台

  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:要分配给此预留的作业的类型,例如 QUERYCONTINUOUS预览版)、PIPELINEBACKGROUNDML_EXTERNAL

  3. 点击 运行

如需详细了解如何运行查询,请参阅运行交互式查询

bq

如需找到项目的查询作业分配给的预留,请将 bq show 命令与 --reservation_assignment 标志结合使用:

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:要分配给此预留的作业的类型,例如 QUERYCONTINUOUS预览版)、PIPELINEBACKGROUNDML_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) 权限:

  • 针对管理项目和分配对象的 bigquery.reservationAssignments.delete 权限。

以下每个预定义的 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

如需从预留中移除项目,请将 bq rm 命令与 --reservation_assignment 标志结合使用:

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,请参阅查找项目的预留分配