RESERVATIONS 视图

INFORMATION_SCHEMA.RESERVATIONS 视图包含管理项目中所有当前预留的近乎实时列表。每一行代表一个当前预留。当前预留是指尚未删除的预留。如需详细了解预留,请参阅预留简介

所需权限

要查询 INFORMATION_SCHEMA.RESERVATIONS 视图,您需要拥有项目的 bigquery.reservations.list Identity and Access Management (IAM) 权限。以下每个预定义的 IAM 角色均可提供所需的权限:

  • roles/bigquery.resourceAdmin
  • roles/bigquery.resourceEditor
  • roles/bigquery.resourceViewer
  • roles/bigquery.user
  • roles/bigquery.admin

如需详细了解 BigQuery 权限,请参阅使用 IAM 进行访问权限控制

架构

INFORMATION_SCHEMA.RESERVATIONS 视图具有如下架构:

列名 数据类型
ddl STRING 用于创建此预留的 DDL 语句。
project_id STRING 管理项目的 ID。
project_number INTEGER 管理项目的编号。
reservation_name STRING 用户提供的预留名称。
ignore_idle_slots BOOL 如果为 false,则使用此预留的任何查询都可以使用其他容量承诺中未被使用的空闲槽。
slot_capacity INTEGER 预留的基准。
target_job_concurrency INTEGER 可以同时执行的查询的目标数量,受可用资源的限制。如果为零,则系统会根据可用资源自动计算此值。
autoscale STRUCT

有关预留的自动扩缩容量的信息。包括以下字段:

  • current_slots:通过自动扩缩添加到预留的槽数。
  • max_slots:可通过自动扩缩添加到预留的槽数上限。
edition STRING 与此预留关联的版本。如需详细了解版本,请参阅 BigQuery 版本简介

范围和语法

针对此视图的查询必须包含区域限定符。如果您未指定区域限定符,则会从所有区域检索元数据。下表说明了此视图的区域范围:

视图名称 资源范围 区域范围
[PROJECT_ID.]`region-REGION`.INFORMATION_SCHEMA.RESERVATIONS[_BY_PROJECT] 项目级 REGION
替换以下内容:

  • 可选:PROJECT_ID:您的 Google Cloud 项目的 ID。如果未指定,则使用默认项目。

  • REGION:任何数据集区域名称。例如 `region-us`

  • 在预留视图和作业视图之间执行联接

    作业视图包含 reservation_id 列。如果作业在已分配预留的项目中运行,reservation_id 将采用以下格式:reservation-admin-project:reservation-location.reservation-name

    如需在预留视图和作业视图之间执行联接,您可以在作业视图列 reservation_id 和预留视图列 project_idreservation_name 之间执行联接。以下示例展示了在预留视图和作业视图之间使用 JOIN 子句的示例。

    示例

    以下示例显示了过去一个小时内某个具有预留分配的项目的槽用量、槽容量和分配的预留。槽用量以槽每秒的毫秒数为单位。

    WITH
      job_data AS (
      SELECT
        job.period_start,
        job.reservation_id,
        job.period_slot_ms,
        job.job_id,
        job.job_type
      FROM
        `my-project.region-us`.INFORMATION_SCHEMA.JOBS_TIMELINE AS job
      WHERE
        job.period_start > TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 HOUR))
    SELECT
      reservation.reservation_name AS reservation_name,
      job.period_start,
      reservation.slot_capacity,
      job.period_slot_ms,
      job.job_id,
      job.job_type
    FROM
      job_data AS job
    INNER JOIN
      `reservation-admin-project.region-us`.INFORMATION_SCHEMA.RESERVATIONS AS reservation
    ON
      (job.reservation_id = CONCAT(reservation.project_id, ":", "US", ".", reservation.reservation_name));

    输出内容类似如下:

    +------------------+---------------------+---------------+----------------+------------------+----------+
    | reservation_name |    period_start     | slot_capacity | period_slot_ms |           job_id | job_type |
    +------------------+---------------------+---------------+----------------+------------------+----------+
    | my_reservation   | 2021-04-30 17:30:54 |           100 |          11131 | bquxjob_66707... | QUERY    |
    | my_reservation   | 2021-04-30 17:30:55 |           100 |          49978 | bquxjob_66707... | QUERY    |
    | my_reservation   | 2021-04-30 17:30:56 |           100 |           9038 | bquxjob_66707... | QUERY    |
    | my_reservation   | 2021-04-30 17:30:57 |           100 |          17237 | bquxjob_66707... | QUERY    |
    

    此查询使用 RESERVATIONS 视图获取预留信息。如果预留在过去一小时内发生了变化,reservation_slot_capacity 列可能不准确。

    该查询将 RESERVATIONSJOBS_TIMELINE 联接,以将作业时间片与预留信息相关联。