Vista RESERVATIONS_TIMELINE

La vista INFORMATION_SCHEMA.RESERVATIONS_TIMELINE muestra porciones de tiempo de los metadatos de las reservas de cada proyecto de administración de reservas en tiempo real. Además, el array per_second_details muestra los detalles del ajuste automático de escala de cada segundo.

Permiso obligatorio

Para consultar la vista INFORMATION_SCHEMA.RESERVATION_TIMELINE, necesitas el permiso bigquery.reservations.list de gestión de identidades y accesos (IAM) en el proyecto. Cada uno de los siguientes roles de gestión de identidades y accesos predefinidos incluye el permiso necesario:

  • Administrador de recursos de BigQuery (roles/bigquery.resourceAdmin)
  • Editor de recursos de BigQuery (roles/bigquery.resourceEditor)
  • Lector de recursos de BigQuery (roles/bigquery.resourceViewer)
  • Usuario de BigQuery (roles/bigquery.user)
  • Administrador de BigQuery (roles/bigquery.admin)

Para obtener más información sobre los permisos de BigQuery, consulta el artículo sobre los roles y permisos de gestión de identidades y accesos 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 de los últimos 180 días y una fila por cada minuto con cambios en la reserva de cualquier ocurrencia de más de 180 días. Cada periodo empieza en un intervalo de un minuto completo y dura exactamente un minuto.

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 escalado automático de la reserva. Los campos incluyen lo siguiente:

  • current_slots: número de espacios que se han añadido a la reserva mediante el ajuste de escala automático.
  • max_slots: número máximo de espacios que se pueden añadir a la reserva mediante el ajuste de escala automático.
edition STRING 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 Devuelve el valor "false" si la función de compartir espacios está habilitada; de lo contrario, devuelve "true".
labels RECORD Matriz de etiquetas asociadas a la reserva.
period_start TIMESTAMP Hora de inicio de este periodo de un minuto.
per_second_details STRUCT

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

  • start_time: la marca de tiempo exacta del segundo.
  • autoscale_current_slots: el número de espacios que se han añadido a la reserva mediante el ajuste automático de escala en este segundo.
  • autoscale_max_slots: número máximo de espacios que se pueden añadir a la reserva mediante el ajuste automático de escala en este segundo.
  • slots_assigned: número de espacios asignados a esta reserva en este segundo. Es igual a la capacidad de ranuras de referencia de una reserva.
  • slots_max_assigned: la capacidad máxima de espacios publicitarios de esta reserva, incluido el uso compartido de espacios publicitarios en este segundo. Si ignore_idle_slots es true, este campo es igual que slots_assigned. De lo contrario, el campo slots_max_assigned es el número total de ranuras de todos los compromisos de capacidad del proyecto de administración.

Si se produce algún cambio en el escalado automático o en las reservas durante ese minuto, la matriz se rellena con 60 filas. Sin embargo, en el caso de las reservas que no se escalan automáticamente y que no cambian durante este minuto, la matriz está vacía, ya que, de lo contrario, repetiría el mismo número 60 veces.

project_id STRING ID del proyecto de administración de la reserva.
project_number INTEGER Número del proyecto.
reservation_id STRING Para combinar con la tabla jobs_timeline. Tiene el formato project_id:location.reservation_name.
reservation_name STRING El nombre de la reserva.
slots_assigned INTEGER Número de ranuras asignadas a esta reserva.
slots_max_assigned INTEGER La capacidad máxima de ranuras de esta reserva, incluido el uso compartido de ranuras. Si ignore_idle_slots es true, es lo mismo que slots_assigned. De lo contrario, es el número total de ranuras de todos los compromisos de capacidad del proyecto de administración.
max_slots INTEGER El número máximo de ranuras que puede usar esta reserva, incluidas las ranuras de base (slot_capacity), las ranuras inactivas (si ignore_idle_slots es false) y las ranuras de escalado automático. Los usuarios especifican este campo para usar la función de previsibilidad de reservas.
scaling_mode STRING El modo de escalado de la reserva, que determina cómo se escala la reserva desde la línea de base hasta max_slots. Los usuarios especifican este campo para usar la función de previsibilidad de reservas.

Ámbito y sintaxis

Las consultas en esta vista deben incluir un calificador de región. Si no especifica un calificador regional, los metadatos se recuperan de todas las regiones. En la siguiente tabla se explica el ámbito de la región y de los recursos de esta vista:

Nombre de la vista Ámbito de los recursos Ámbito de la región
[PROJECT_ID.]`region-REGION`.INFORMATION_SCHEMA.RESERVATIONS_TIMELINE[_BY_PROJECT] Nivel de proyecto REGION
Sustituye lo siguiente:
  • Opcional: PROJECT_ID: el ID de tu Google Cloud proyecto. 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: ver el uso total de espacios por segundo

Para ejecutar la consulta en un proyecto que no sea el predeterminado, añade 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 los proyectos asignados a YOUR_RESERVATION_ID en todas las tareas:

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 slots por reserva

En el siguiente ejemplo se muestra el uso de las franjas por segundo de cada reserva del ú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             |
+-----------------------+----------------+---------------------+--------------------------+------------------------------+