使用预留分配

通过 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
    • 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 = 'organizations/ORGANIZATION_ID',
      job_type = 'JOB_TYPE');

    请替换以下内容:

    • ADMIN_PROJECT_ID:拥有预留资源的管理项目的 ID
    • LOCATION:预留的位置
    • RESERVATION_NAME:预留的名称
    • ASSIGNMENT_ID:分配的 ID

      此 ID 对项目和位置来说必须是唯一的,以小写字母或数字开头和结尾,并且只能包含小写字母、数字和短划线。

    • ORGANIZATION_ID组织 ID
    • JOB_TYPE:要分配给此预留的作业的类型,例如 QUERYPIPELINEBACKGROUNDML_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:要分配给此预留的作业的类型,例如 QUERYPIPELINEBACKGROUNDML_EXTERNAL

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

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

控制台

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

    转到 BigQuery

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

  3. 点击预留标签页。

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

  5. 展开 操作选项。

  6. 点击创建分配

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

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

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

    • QUERY
    • 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:要分配给此预留的作业的类型,例如 QUERYPIPELINEBACKGROUNDML_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:要分配给此预留的作业的类型,例如 QUERYPIPELINEBACKGROUNDML_EXTERNAL

创建预留分配时,请至少等待 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="JOB_TYPE");

    请替换以下内容:

    • 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

将槽分配给 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:要分配给此预留的作业的类型,例如 QUERYPIPELINEBACKGROUNDML_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:要分配给此预留的作业的类型,例如 QUERYPIPELINEBACKGROUNDML_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,请参阅查找项目的预留分配