购买和管理槽用量承诺

通过 BigQuery Reservation API,您可以购买专用槽(称为承诺)、创建槽池(称为预留),以及将项目、文件夹和组织分配给这些预留。

容量承诺是在一段最短的时间内购买的 BigQuery 计算容量。创建某个版本的预留时,购买容量承诺是可选操作,但可以节省费用。

承诺使用合约属于区域性资源。在一个单区域或多区域购买的承诺无法在任何其他单区域或多区域使用。承诺无法在单地区之间或单地区与多地区之间移动。

启用 Reservations API

BigQuery Reservations API 与现有的 BigQuery API 不同,必须单独启用。如需了解详情,请参阅启用和停用 API

  • API 的名称为“BigQuery Reservations API”
  • BigQuery Reservations API 的端点为 bigqueryreservation.googleapis.com

启用 API。

购买槽

如需将容量预留一段最短的时间,您可以购买容量承诺。这可以享受折扣并节省费用。如需详细了解具体费用,请参阅 BigQuery 价格

所需权限

如需创建容量承诺,您需要以下 Identity and Access Management (IAM) 权限:

  • 对维持承诺所有权的管理项目拥有 bigquery.capacityCommitments.create 权限。

以下每个预定义的 IAM 角色都具有此权限:

  • BigQuery Admin
  • BigQuery Resource Admin

如需详细了解 BigQuery 中的 IAM 角色,请参阅预定义的角色和权限

创建容量承诺

承诺使用合约属于区域性资源。在一个单区域或多区域购买的承诺无法在任何其他单区域或多区域使用。 承诺无法在单区域之间或单区域与多区域之间移动。

控制台

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

    转到 BigQuery

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

  3. 点击创建承诺

  4. 配置下:

    1. 选择该地点。
    2. 容量模型部分中,选择容量模型。
    3. 如果选择“自动扩缩(版本)”选项:
      1. 版本列表中,选择版本。容量承诺仅在企业版和企业 Plus 版中受支持。自动扩缩仅在版本内可用。如需详细了解版本,请参阅 BigQuery 版本简介
    4. 选择承诺期限,它指定了您的承诺方案
    5. 如果您要购买年度承诺,请选择您希望在承诺到期时生效的续订方案 (Renewal plan that you want to take effect):

      1. 每年续订。年度承诺到期后,将作为年度承诺再续订一年。

      如需了解详情,请参阅承诺

    6. 输入要购买的槽数

    7. 点击下一步

  5. 检查购买的估算费用

  6. 确认并提交下:

    1. 输入 CONFIRM 以确认购买。
    2. 点击购买以购买槽。
  7. 如需查看承诺,请点击查看槽用量承诺。预配了容量之后,申请的容量承诺将变为绿色状态。

首次购买容量时,系统会创建“default”预留。

SQL

如需创建容量承诺,请使用 CREATE CAPACITY DDL 语句

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

    转到 BigQuery

  2. 在查询编辑器中,输入以下语句:

    CREATE CAPACITY
      `ADMIN_PROJECT_ID.region-LOCATION.COMMITMENT_ID`
    OPTIONS (
      slot_count = NUMBER_OF_SLOTS,
      edition = EDITION,
      plan = 'PLAN_TYPE');

    请替换以下内容:

    • ADMIN_PROJECT_ID:保持此承诺所有权的管理项目的项目 ID
    • LOCATION:承诺的位置
    • COMMITMENT_ID:承诺的 ID

      每个项目和位置的该字段必须唯一。该字段必须以小写字母或数字开头和结尾,并且只能包含小写字母、数字和短划线。

    • NUMBER_OF_SLOTS:要购买的槽数
    • EDITION:与容量承诺关联的版本。您只能使用企业版或企业 Plus 版创建容量承诺。如需详细了解版本,请参阅 BigQuery 版本简介
    • PLAN_TYPE方案类型,例如 ANNUALTHREE_YEAR

  3. 点击 运行

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

bq

使用带有 --capacity_commitment 标志bq mk 命令购买槽。

bq mk \
    --project_id=ADMIN_PROJECT_ID \
    --location=LOCATION \
    --capacity_commitment=true \
    --edition=EDITION \
    --plan=PLAN_TYPE \
    --renewal_plan=RENEWAL_PLAN_TYPE \
    --slots=NUMBER_OF_SLOTS

替换以下内容:

  • ADMIN_PROJECT_ID:将保持此承诺所有权的管理项目的项目 ID。
  • LOCATION:承诺的位置
  • EDITION:与容量承诺关联的版本。您只能使用企业版或企业 Plus 版创建容量承诺。如需详细了解版本,请参阅 BigQuery 版本简介
  • PLAN_TYPE方案类型,例如 ANNUALTHREE_YEAR
  • RENEWAL_PLAN_TYPE续订方案类型,例如 NONEANNUALTHREE_YEAR
  • NUMBER_OF_SLOTS:要购买的槽数。

查看容量承诺

所需权限

如需查看承诺,您需要以下 Identity and Access Management (IAM) 权限:

  • 对维持承诺所有权的管理项目拥有 bigquery.capacityCommitments.list 权限。

以下每个预定义的 IAM 角色都具有此权限:

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

如需详细了解 BigQuery 中的 IAM 角色,请参阅预定义的角色和权限

按项目查看容量承诺

要按项目查看容量承诺,请执行以下操作:

控制台

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

    转到 BigQuery

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

  3. 点击槽承诺 (Slot commitments) 标签页。 您的容量承诺列在承诺下的表格中。

SQL

如需查看管理项目的承诺,请查询 INFORMATION_SCHEMA.CAPACITY_COMMITMENTS_BY_PROJECT 视图

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

    转到 BigQuery

  2. 在查询编辑器中,输入以下语句:

    SELECT
      capacity_commitment_id
    FROM
      `region-LOCATION`.INFORMATION_SCHEMA.CAPACITY_COMMITMENTS_BY_PROJECT
    WHERE
      project_id = 'ADMIN_PROJECT_ID'
      AND slot_count = 100;

    请替换以下内容:

  3. 点击 运行

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

bq

使用带有 --capacity_commitment 标志bq ls 命令列出管理项目的承诺。

bq ls \
    --capacity_commitment=true \
    --location=LOCATION \
    --project_id=ADMIN_PROJECT_ID

请替换以下内容:

更新容量承诺

您可以对容量承诺进行以下更新:

  • 更新承诺的续订方案
  • 将承诺转换为期限更长的承诺方案。
  • 将一个承诺拆分为两个承诺。
  • 将两个承诺合并为一个承诺。

所需权限

如需更新容量承诺,您需要以下 Identity and Access Management (IAM) 权限:

  • 对维持承诺所有权的管理项目拥有 bigquery.capacityCommitments.update 权限。

以下每个预定义的 IAM 角色都具有此权限:

  • BigQuery Admin
  • BigQuery Resource Admin

如需详细了解 BigQuery 中的 IAM 角色,请参阅预定义的角色和权限

续订承诺

年度承诺具有续订方案,您可以在创建年度承诺或转换为年度承诺时指定该方案。您可以在承诺结束日期之前随时更改年度承诺的续订方案

控制台

您可以按以下方式更改年度承诺的续订方案:

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

    转到 BigQuery

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

  3. 点击槽承诺 (Slot commitments) 标签页。

  4. 找到要修改的承诺。

  5. 点击 操作,然后选择修改续订方案选项。

  6. 选择新的续订方案。

bq

如需更改年度承诺的续订方案,请使用带有 --capacity_commitment 标志--renewal_plan 标志bq update 命令

bq update \
    --project_id=ADMIN_PROJECT_ID \
    --location=LOCATION \
    --renewal_plan=PLAN_TYPE \
    --capacity_commitment=true \
    COMMITMENT_ID

替换以下内容:

将承诺使用合约转换为较长的持续时间

您可以随时选择将承诺转换为期限更长的承诺类型。

在您更新承诺使用合约后,系统会立即向您收取与新方案关联的费率,并重置结束日期。

如需转换承诺,请使用带有 --plan 标志bq update 命令

bq update \
    --project_id=ADMIN_PROJECT_ID \
    --location=LOCATION \
    --plan=PLAN_TYPE \
    --renewal_plan=RENEWAL_PLAN \
    --capacity_commitment=true \
    COMMITMENT_ID

替换以下内容:

  • ADMIN_PROJECT_ID:项目 ID
  • LOCATION:承诺的位置
  • PLAN_TYPE方案类型,例如 ANNUALTHREE_YEAR
  • RENEWAL_PLAN续订方案

    这仅在 PLAN_TYPEANNUAL 时适用。

  • COMMITMENT_ID:承诺的 ID

    如需获取 ID,请参阅 查看已购买的承诺

拆分承诺使用合约

您可以将您的承诺拆分为两个承诺。如果您想续订承诺的一部分,此选项会非常有用。例如,如果您有一个包含 1000 个槽的年度承诺,则可以将 300 个槽拆分到新的承诺中,将 700 个槽留在原始承诺中。然后,您可以按年费率续订 700 个槽,将 300 个槽转换为三年期承诺。

当您拆分承诺时,新承诺的方案和承诺结束日期与原始承诺相同。

控制台

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

    转到 BigQuery

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

  3. 点击槽承诺 (Slot commitments) 标签页。

  4. 选择您要拆分的承诺。

  5. 点击拆分

  6. 拆分承诺页面中,使用配置拆分滑块选择每个分片的槽数(以 100 个槽为增量)。

  7. 点击拆分以拆分承诺。槽用量承诺标签页中将列出新的承诺。

bq

如需拆分承诺,请使用 bq update 命令。

bq update \
    --project_id=ADMIN_PROJECT_ID \
    --location=LOCATION \
    --split \
    --slots=SLOTS_TO_SPLIT \
    --capacity_commitment=true \
    COMMITMENT_ID

替换以下内容:

  • ADMIN_PROJECT_ID:项目 ID
  • LOCATION:承诺的位置
  • SLOTS_TO_SPLIT:从原始承诺使用合约拆分到新承诺使用合约的槽数
  • COMMITMENT_ID:承诺的 ID

    如需获取 ID,请参阅 查看已购买的承诺

合并两个承诺使用合约

您可以将多项承诺合并为一项承诺。合并承诺必须全部属于相同类型(ANNUALTHREE_YEAR)。合并承诺的结束日期就是原始承诺的结束日期上限。如果任何承诺有更早的结束日期,那么这些承诺将延期至较晚的那个日期,这些承诺中的槽将按比例收费。

控制台

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

    转到 BigQuery

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

  3. 点击槽承诺 (Slot commitments) 标签页。

  4. 选择您要合并的承诺。

  5. 点击 Merge

  6. Merge commitments 页面中,查看合并详情,然后点击合并槽用量承诺标签页中将列出新的合并后承诺。

bq

如需将两个承诺使用合约合并为一个承诺使用合约,请使用 bq update 命令:

bq update \
    --project_id=ADMIN_PROJECT_ID \
    --location=LOCATION \
    --merge=true \
    --capacity_commitment=true \
    COMMITMENT1,COMMITMENT2

替换以下内容:

  • ADMIN_PROJECT_ID:项目 ID
  • LOCATION:承诺的位置
  • COMMITMENT1:第一个合并承诺
  • COMMITMENT2:要合并的第二个承诺使用合约

承诺到期

承诺会在其时长结束时到期。承诺仍有效时,您无法将其删除。如果续订方案设为 NONE,系统会自动删除承诺。否则,系统会根据续订方案续订包年承诺或三年期承诺。如需将续订方案更改为 NONE,请按照续订包年方案中的步骤操作。

续订承诺后,开始时间的值不会更改。它是指原始承诺的开始时间。结束时间的值是续订的承诺到期的时间。例如,如果您有一个在 2022 年 12 月 13 日创建的包年承诺,则该承诺将于 2023 年 12 月 13 日续订。如果您在 2023 年 12 月 14 日查看合约详情,开始时间的值将为 2022 年 12 月 13 日,结束时间的值将为 2024 年 12 月 12 日。

基准槽始终都会收费。如果容量承诺到期,您可能需要手动调整预留中的基准槽数,以免产生任何不必要的费用。例如,假设您的 1 年期承诺包含 100 个槽,一个预留包含 100 个基准槽。承诺会到期,并且没有续订方案。承诺到期后,您需要按随用随付费率支付 100 个基准槽的费用。

控制容量承诺的创建

您可以使用 IAM 拒绝政策,进一步控制哪些人可以创建容量承诺。

您可以为部分或所有用户创建拒绝政策,并可通过例外情况和条件对其进行配置。

例如,以下政策会拒绝所有用户(主账号“lucian@example.com”除外)创建容量承诺:

{
  "deniedPrincipals": [
    "principalSet://goog/public:all"
  ],
  "deniedPermissions": [
    "bigquery.googleapis.com/capacityCommitments.create"
  ],
  "exceptionPrincipals": [
    "principal://goog/subject/lucian@example.com"
  ]
}

然后,您可以将此政策附加到组织,以控制哪些人可以创建承诺。

请注意,这些政策优先于 IAM 角色,因此除非删除或修改相应政策,否则即使具有 bigquery.admin 角色的用户也无法创建承诺。

如需了解详情,请参阅拒绝对资源的访问

排查容量承诺问题

本部分介绍了在使用 BigQuery 预留时遇到问题的情况下可能会有帮助的问题排查步骤。

已购买的槽待处理

槽受到可用容量的限制。在您购买槽用量承诺并且 BigQuery 分配承诺后,状态列会显示对勾标记。如果 BigQuery 无法立即分配请求的槽,则状态列会保持待处理状态。您可能需要等待几小时才能使用这些槽。如果您需要更快地访问槽,请尝试以下操作:

  1. 删除待处理的承诺。
  2. 购买数量更少的槽的新承诺。规模较小的承诺可能会立即生效,具体取决于容量。
  3. 以单独的承诺购买其余的槽。这些槽可能会在状态列中显示为待处理,但通常在几个小时内变为有效。
  4. 可选:当两个承诺都可用时,只要您为它们购买同一方案,就可以合并它们。

如果槽承诺失败或需要很长时间才能完成,请考虑暂时使用按需价格。如果使用此解决方案,您可能需要在未分配给任何预留的其他项目上运行关键型查询,或者您可能需要完全移除项目分配。