Vista RESERVATIONS_TIMELINE

En la vista INFORMATION_SCHEMA.RESERVATIONS_TIMELINE, se muestran fragmentos de tiempo de los metadatos de reserva para cada proyecto de administración de reservas en tiempo real y por minuto. Además, el array per_second_details muestra detalles del ajuste automático para cada segundo.

Permiso necesario

Para consultar la vista INFORMATION_SCHEMA.RESERVATION_TIMELINE, necesitas el permiso bigquery.reservations.list de Identity and Access Management (IAM) en el proyecto. Cada uno de los siguientes roles predefinidos de IAM incluye el permiso requerido:

  • Administrador de recursos de BigQuery (roles/bigquery.resourceAdmin)
  • Editor de recursos de BigQuery (roles/bigquery.resourceEditor)
  • Visualizador de recursos de BigQuery (roles/bigquery.resourceViewer)
  • BigQuery User (roles/bigquery.user)
  • BigQuery Admin (roles/bigquery.admin)

Para obtener más información sobre los permisos de BigQuery, consulta Roles y permisos de IAM de BigQuery.

Esquema

Cuando consultas las vistas INFORMATION_SCHEMA.RESERVATIONS_TIMELINE_BY_*, los resultados de la consulta contienen una fila por cada minuto de cada reserva de BigQuery en los últimos 180 días y una fila por cada minuto con cambios de reserva para cualquier ocurrencia de más de 180 días. Cada período comienza en un intervalo de un minuto y dura un minuto exacto.

La vista INFORMATION_SCHEMA.RESERVATIONS_TIMELINE_BY_PROJECT tiene el siguiente esquema:

Nombre de la columna Tipo de datos Valor
autoscale STRUCT

Contiene información sobre la capacidad de ajuste de escala automático de la reserva. Los campos incluyen lo siguiente:

  • current_slots es la cantidad de ranuras que se agregaron a la reserva mediante el ajuste de escala automático.
  • max_slots es la cantidad máxima de ranuras que se pueden agregar a la reserva mediante el ajuste de escala automático.
edition STRING Es la edición asociada a esta reserva. Para obtener más información sobre las ediciones, consulta Introducción a las ediciones de BigQuery.
ignore_idle_slots BOOL Falso si el uso compartido de ranuras está habilitado; de lo contrario, es verdadero.
labels RECORD Es un array de etiquetas asociadas con la reserva.
period_start TIMESTAMP Es la hora de inicio de este período de un minuto.
per_second_details STRUCT

Contiene información sobre la capacidad y el uso de la reserva en cada segundo. Los campos incluyen lo siguiente:

  • start_time: Es la marca de tiempo exacta del segundo.
  • autoscale_current_slots: Es la cantidad de ranuras que se agregaron a la reserva mediante el ajuste de escala automático en este segundo.
  • autoscale_max_slots: Es la cantidad máxima de ranuras que se podrían agregar a la reserva mediante el ajuste de escala automático en este segundo.
  • slots_assigned: Es la cantidad de ranuras asignadas a esta reserva en este segundo. Equivale a la capacidad de ranura de referencia de una reserva.
  • slots_max_assigned: Es la capacidad máxima de la ranura para esta reserva, incluido el uso compartido de ranuras en este segundo. Si ignore_idle_slots es verdadero, este campo es igual a slots_assigned. De lo contrario, el campo slots_max_assigned es la cantidad total de ranuras en todos los compromisos de capacidad del proyecto de administración.

Si hay cambios en el ajuste de escala automático o en las reservas durante este minuto, el array se completará con 60 filas. Sin embargo, para las reservas que no se ajustan automáticamente y que permanecen sin cambios durante este minuto, el array está vacío, ya que, de lo contrario, repetiría el mismo número 60 veces.

project_id STRING Es el ID del proyecto de administración de reservas.
project_number INTEGER Es el número del proyecto.
reservation_id STRING Para unirse con la tabla jobs_timeline. Tiene el formato project_id:location.reservation_name.
reservation_name STRING Es el nombre de la reserva.
slots_assigned INTEGER La cantidad de ranuras asignadas a esta reserva.
slots_max_assigned INTEGER La capacidad máxima de la ranura para esta reserva, incluido el uso compartido de ranuras. Si ignore_idle_slots es verdadero, es igual a slots_assigned; de lo contrario, es la cantidad total de ranuras en todos los compromisos de capacidad del proyecto de administración.
max_slots INTEGER Cantidad máxima de ranuras que puede usar esta reserva, incluidas las ranuras de modelo de referencia (slot_capacity), las ranuras inactivas (si ignore_idle_slots es falso) y las ranuras de ajuste de escala automático. Los usuarios especifican este campo para usar la función de previsibilidad de reservas.
scaling_mode STRING Es el modo de ajuste de escala de la reserva, que determina cómo se ajusta la escala de la reserva desde el modelo de referencia hasta max_slots. Los usuarios especifican este campo para usar la función de previsibilidad de reservas.

Permiso y sintaxis

Las consultas realizadas a esta vista deben incluir un calificador de región. Si no especificas un calificador regional, los metadatos se recuperan de todas las regiones. En la siguiente tabla, se explica el alcance de la región y los recursos para esta vista:

Nombre de la vista Permiso del recurso Permiso de la región
[PROJECT_ID.]`region-REGION`.INFORMATION_SCHEMA.RESERVATIONS_TIMELINE[_BY_PROJECT] Nivel de proyecto REGION
Reemplaza lo siguiente:
  • Opcional: PROJECT_ID: Es el ID de tu proyecto de Google Cloud . Si no se especifica, se usa el proyecto predeterminado.
  • REGION: Cualquier nombre de región del conjunto de datos. Por ejemplo, `region-us`.

Ejemplos

Ejemplo: Consulta el uso total de ranuras por segundo

Para ejecutar la consulta en un proyecto que no sea el predeterminado, agrega el ID del proyecto con el siguiente formato:

`PROJECT_ID`.`region-REGION_NAME`.INFORMATION_SCHEMA.JOBS_TIMELINE_BY_ORGANIZATION
. Por ejemplo, `myproject`.`region-us`.INFORMATION_SCHEMA.JOBS_TIMELINE_BY_ORGANIZATION.

En el siguiente ejemplo, se muestra el uso de ranuras por segundo de proyectos asignados a YOUR_RESERVATION_ID en todos los trabajos:

SELECT
  s.start_time AS period_start,
  SUM(jobs.period_slot_ms) / 1000 AS period_slot_seconds,
  ANY_VALUE(s.slots_assigned) AS estimated_slots_assigned,
  ANY_VALUE(s.slots_max_assigned) AS estimated_slots_max_assigned
FROM `region-us`.INFORMATION_SCHEMA.JOBS_TIMELINE_BY_ORGANIZATION jobs
JOIN `region-us`.INFORMATION_SCHEMA.RESERVATIONS_TIMELINE res
    ON jobs.reservation_id = res.reservation_id
 JOIN res.per_second_details s
    ON jobs.period_start = s.start_time
WHERE
  jobs.job_creation_time
    BETWEEN TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 DAY)
        AND CURRENT_TIMESTAMP()
  AND res.period_start
    BETWEEN TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 DAY)
        AND CURRENT_TIMESTAMP()
  AND res.reservation_id = 'YOUR_RESERVATION_ID'
  AND (jobs.statement_type != "SCRIPT" OR jobs.statement_type IS NULL)  -- Avoid duplicate byte counting in parent and children jobs.
GROUP BY
  period_start
ORDER BY
  period_start DESC;

El resultado es similar al siguiente:

+-----------------------+---------------------+--------------------------+------------------------------+
|     period_start      | period_slot_seconds | estimated_slots_assigned | estimated_slots_max_assigned |
+-----------------------+---------------------+--------------------------+------------------------------+
|2021-06-08 21:33:59 UTC|       100.000       |         100              |           100                |
|2021-06-08 21:33:58 UTC|        96.753       |         100              |           100                |
|2021-06-08 21:33:57 UTC|        41.668       |         100              |           100                |
+-----------------------+---------------------+--------------------------+------------------------------+

Ejemplo: Uso de ranuras por reserva

En el siguiente ejemplo, se muestra el uso de ranuras por segundo para cada reserva en el último día:

SELECT
  s.start_time AS period_start,
  res.reservation_id,
  SUM(jobs.period_slot_ms) / 1000 AS period_slot_seconds,
  ANY_VALUE(res.slots_assigned) AS estimated_slots_assigned,
  ANY_VALUE(res.slots_max_assigned) AS estimated_slots_max_assigned,
FROM `region-us`.INFORMATION_SCHEMA.JOBS_TIMELINE_BY_ORGANIZATION jobs
JOIN `region-us`.INFORMATION_SCHEMA.RESERVATIONS_TIMELINE res
  ON jobs.reservation_id = res.reservation_id
JOIN res.per_second_details s
  ON jobs.period_start = s.start_time
WHERE
  jobs.job_creation_time
      BETWEEN TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 DAY)
          AND CURRENT_TIMESTAMP()
  AND res.period_start
      BETWEEN TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 DAY)
          AND CURRENT_TIMESTAMP()
  AND (jobs.statement_type != "SCRIPT" OR jobs.statement_type IS NULL)  -- Avoid duplicate byte counting in parent and children jobs.
GROUP BY
  period_start,
  reservation_id
ORDER BY
  period_start DESC,
  reservation_id;

El resultado es similar al siguiente:

+-----------------------+----------------+---------------------+--------------------------+------------------------------+
|     period_start      | reservation_id | period_slot_seconds | estimated_slots_assigned | estimated_slots_max_assigned |
+-----------------------+----------------+---------------------+--------------------------+------------------------------+
|2021-06-08 21:33:59 UTC|     prod01     |       100.000       |             100          |              100             |
|2021-06-08 21:33:58 UTC|     prod02     |       177.201       |             200          |              500             |
|2021-06-08 21:32:57 UTC|     prod01     |        96.753       |             100          |              100             |
|2021-06-08 21:32:56 UTC|     prod02     |       182.329       |             200          |              500             |
+-----------------------+----------------+---------------------+--------------------------+------------------------------+