Vista RESERVATIONS_TIMELINE

A vista INFORMATION_SCHEMA.RESERVATIONS_TIMELINE mostra intervalos de tempo dos metadados de reservas para cada projeto de administração de reservas para cada minuto em tempo real. Além disso, a matriz per_second_details mostra os detalhes da escala automática para cada segundo.

Autorização necessária

Para consultar a vista INFORMATION_SCHEMA.RESERVATION_TIMELINE, precisa da autorização de gestão de identidade e de acesso (IAM) no projeto.bigquery.reservations.list Cada uma das seguintes funções de IAM predefinidas inclui a autorização necessária:

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

Para mais informações acerca das autorizações do BigQuery, consulte o artigo Funções e autorizações do IAM do BigQuery.

Esquema

Quando consulta as vistas INFORMATION_SCHEMA.RESERVATIONS_TIMELINE_BY_*, os resultados da consulta contêm uma linha por cada minuto de cada reserva do BigQuery nos últimos 180 dias e uma linha por cada minuto com alterações de reserva para ocorrências com mais de 180 dias. Cada período começa num intervalo de um minuto completo e dura exatamente um minuto.

A vista INFORMATION_SCHEMA.RESERVATIONS_TIMELINE_BY_PROJECT tem o seguinte esquema:

Nome da coluna Tipo de dados Valor
autoscale STRUCT

Contém informações sobre a capacidade de ajuste automático da reserva. Os campos incluem o seguinte:

  • current_slots: o número de espaços adicionados à reserva pelo ajuste automático.
  • max_slots: o número máximo de espaços que podem ser adicionados à reserva através do ajuste automático da escala.
edition STRING A edição associada a esta reserva. Para mais informações sobre as edições, consulte o artigo Introdução às edições do BigQuery.
ignore_idle_slots BOOL Falso se a partilha de ranhuras estiver ativada, caso contrário, verdadeiro.
labels RECORD Matriz de etiquetas associadas à reserva.
period_start TIMESTAMP Hora de início deste período de um minuto.
per_second_details STRUCT

Contém informações sobre a capacidade de reserva e a utilização a cada segundo. Os campos incluem o seguinte:

  • start_time: a data/hora exata do segundo.
  • autoscale_current_slots: o número de vagas adicionadas à reserva pelo ajuste de escala automático neste segundo.
  • autoscale_max_slots: o número máximo de vagas que podem ser adicionadas à reserva através do ajuste de escala automático neste segundo.
  • slots_assigned: o número de espaços atribuídos a esta reserva neste segundo. É igual à capacidade de espaço base de uma reserva.
  • slots_max_assigned: a capacidade máxima de espaços para esta reserva, incluindo a partilha de espaços neste segundo. Se ignore_idle_slots for verdadeiro, este campo é igual a slots_assigned. Caso contrário, o campo slots_max_assigned é o número total de espaços em todos os compromissos de capacidade no projeto de administração.

Se existirem alterações de dimensionamento automático ou de reserva durante este minuto, a matriz é preenchida com 60 linhas. No entanto, para reservas sem ajuste automático que permaneçam inalteradas durante este minuto, a matriz está vazia porque, caso contrário, repetiria o mesmo número 60 vezes.

project_id STRING ID do projeto de administração de reservas.
project_number INTEGER Número do projeto.
reservation_id STRING Para juntar com a tabela jobs_timeline. Tem o formato project_id:location.reservation_name.
reservation_name STRING O nome da reserva.
slots_assigned INTEGER O número de espaços atribuídos a esta reserva.
slots_max_assigned INTEGER A capacidade máxima de espaços para esta reserva, incluindo a partilha de espaços. Se ignore_idle_slots for verdadeiro, é o mesmo que slots_assigned. Caso contrário, é o número total de espaços em todos os compromissos de capacidade no projeto de administração.
max_slots INTEGER O número máximo de espaços que esta reserva pode usar, que inclui espaços de base (slot_capacity), espaços inativos (se ignore_idle_slots for falso) e espaços de dimensionamento automático. Este campo é especificado pelos utilizadores para usar a funcionalidade de previsibilidade de reservas.
scaling_mode STRING O modo de dimensionamento da reserva, que determina como a reserva é dimensionada a partir da base até max_slots. Este campo é especificado pelos utilizadores para usar a funcionalidade de previsibilidade de reservas.

Âmbito e sintaxe

As consultas nesta vista têm de incluir um qualificador de região. Se não especificar um qualificador regional, os metadados são obtidos de todas as regiões. A tabela seguinte explica o âmbito da região e dos recursos para esta vista:

Nome da visualização de propriedade Âmbito do recurso Âmbito da região
[PROJECT_ID.]`region-REGION`.INFORMATION_SCHEMA.RESERVATIONS_TIMELINE[_BY_PROJECT] Nível do projeto REGION
Substitua o seguinte:
  • Opcional: PROJECT_ID: o ID do seu projeto do Google Cloud Google Cloud. Se não for especificado, é usado o projeto predefinido.
  • REGION: qualquer nome da região do conjunto de dados. Por exemplo, `region-us`.

Exemplos

Exemplo: veja a utilização total de espaços por segundo

Para executar a consulta num projeto que não seja o seu projeto predefinido, adicione o ID do projeto no seguinte formato:

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

O exemplo seguinte mostra a utilização de slots por segundo de projetos atribuídos a YOUR_RESERVATION_ID em todas as tarefas:

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;

O resultado é semelhante ao seguinte:

+-----------------------+---------------------+--------------------------+------------------------------+
|     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                |
+-----------------------+---------------------+--------------------------+------------------------------+

Exemplo: utilização de slots por reserva

O exemplo seguinte mostra a utilização de espaços por segundo para cada reserva no último dia:

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;

O resultado é semelhante ao seguinte:

+-----------------------+----------------+---------------------+--------------------------+------------------------------+
|     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             |
+-----------------------+----------------+---------------------+--------------------------+------------------------------+