Vista JOBS_TIMELINE

A vista INFORMATION_SCHEMA.JOBS_TIMELINE contém metadados do BigQuery praticamente em tempo real por intervalo de tempo para todas as tarefas enviadas no projeto atual. Esta vista contém tarefas em execução e concluídas.

Autorizações necessárias

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

  • Proprietário do projeto
  • Administrador do BigQuery

Para mais informações sobre as autorizações do BigQuery, consulte o artigo Controlo de acesso com a IAM.

Esquema

Quando consulta as visualizações INFORMATION_SCHEMA.JOBS_TIMELINE_BY_*, os resultados da consulta contêm uma linha para cada segundo de execução de cada tarefa do BigQuery. Cada período começa num intervalo de um segundo inteiro e dura exatamente um segundo.

A vista INFORMATION_SCHEMA.JOBS_TIMELINE_BY_* tem o seguinte esquema:

Nome da coluna Tipo de dados Valor
period_start TIMESTAMP Hora de início deste período.
period_slot_ms INTEGER Milissegundos de intervalo consumidos neste período.
project_id STRING ID do projeto (coluna de agrupamento).
project_number INTEGER Número do projeto.
user_email STRING (Coluna de agrupamento) Endereço de email ou conta de serviço do utilizador que executou a tarefa.
job_id STRING ID da tarefa. Por exemplo, bquxjob_1234.
job_type STRING O tipo de trabalho. Pode ser QUERY, LOAD, EXTRACT, COPY ou NULL. Um valor de NULL indica uma tarefa em segundo plano.
statement_type STRING O tipo de declaração de consulta, se for válida. Por exemplo, SELECT, INSERT, UPDATE ou DELETE.
priority STRING A prioridade desta tarefa. Os valores válidos incluem INTERACTIVE e BATCH.
parent_job_id STRING ID da tarefa principal, se existir.
job_creation_time TIMESTAMP (Coluna de partição) Hora da criação desta tarefa. A partição baseia-se na hora UTC desta data/hora.
job_start_time TIMESTAMP Hora de início desta tarefa.
job_end_time TIMESTAMP Hora de fim desta tarefa.
state STRING Estado de execução da tarefa no final deste período. Os estados válidos incluem PENDING, RUNNING e DONE.
reservation_id STRING Nome da reserva principal atribuída a este trabalho no final deste período, se aplicável.
edition STRING A edição associada à reserva atribuída a esta tarefa. Para mais informações sobre as edições, consulte o artigo Introdução às edições do BigQuery.
total_bytes_billed INTEGER Se o projeto estiver configurado para usar preços a pedido, este campo contém o total de bytes faturados para a tarefa. Se o projeto estiver configurado para usar preços de taxa fixa, não lhe é faturado o número de bytes, e este campo é apenas informativo. Este campo só é preenchido para tarefas concluídas e contém o número total de bytes faturados durante toda a duração da tarefa.
total_bytes_processed INTEGER Total de bytes processados pela tarefa. Este campo só é preenchido para tarefas concluídas e contém o número total de bytes processados durante toda a duração da tarefa.
error_result RECORD Detalhes do erro (se existir) como um ErrorProto.
cache_hit BOOLEAN Se os resultados da consulta deste trabalho foram provenientes de uma cache.
period_shuffle_ram_usage_ratio FLOAT Rácio de utilização da funcionalidade Shuffle no período selecionado.
period_estimated_runnable_units INTEGER Unidades de trabalho que podem ser agendadas imediatamente neste período. Os slots adicionais para estas unidades de trabalho aceleram a sua consulta, desde que nenhuma outra consulta na reserva precise de slots adicionais.
transaction_id STRING ID da transação em que esta tarefa foi executada, se existir. (Pré-visualizar)

Retenção de dados

Esta vista contém tarefas em execução e o histórico de tarefas dos últimos 180 dias.

Â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 para esta vista:

Nome da visualização de propriedade Âmbito do recurso Âmbito da região
[PROJECT_ID.]`region-REGION`.INFORMATION_SCHEMA.JOBS_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

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.VIEW
; por exemplo, `myproject`.`region-us`.INFORMATION_SCHEMA.JOBS_TIMELINE.

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

SELECT
  period_start,
  SUM(period_slot_ms) AS total_slot_ms,
FROM
  `reservation-admin-project.region-us`.INFORMATION_SCHEMA.JOBS_TIMELINE
WHERE
  period_start BETWEEN TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 DAY) AND CURRENT_TIMESTAMP()
GROUP BY
  period_start
ORDER BY
  period_start DESC;
Nota: os nomes das vistas `INFORMATION_SCHEMA` são sensíveis a maiúsculas e minúsculas. O resultado é semelhante ao seguinte:
+---------------------+---------------+
|    period_start     | total_slot_ms |
+---------------------+---------------+
| 2020-07-29 03:52:14 |     122415176 |
| 2020-07-29 03:52:15 |     141107048 |
| 2020-07-29 03:52:16 |     173335142 |
| 2020-07-28 03:52:17 |     131107048 |
+---------------------+---------------+

Pode verificar a utilização de uma reserva específica com WHERE reservation_id = "…". Para tarefas de scripts, a tarefa principal também comunica a utilização total de ranhuras das respetivas tarefas secundárias. Para evitar a contagem dupla, use WHERE statement_type != "SCRIPT" para excluir a tarefa principal.

Número de tarefas de RUNNING e PENDING ao longo do tempo

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.VIEW
; por exemplo, `myproject`.`region-us`.INFORMATION_SCHEMA.JOBS_TIMELINE.

O exemplo seguinte calcula o número de tarefas RUNNING e PENDING a cada segundo no último dia:

SELECT
  period_start,
  SUM(IF(state = "PENDING", 1, 0)) as PENDING,
  SUM(IF(state = "RUNNING", 1, 0)) as RUNNING
FROM
  `reservation-admin-project.region-us`.INFORMATION_SCHEMA.JOBS_TIMELINE
WHERE
  period_start BETWEEN TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 DAY) AND CURRENT_TIMESTAMP()
GROUP BY
  period_start;

O resultado é semelhante ao seguinte:

+---------------------+---------+---------+
|    period_start     | PENDING | RUNNING |
+---------------------+---------+---------+
| 2020-07-29 03:52:14 |       7 |      27 |
| 2020-07-29 03:52:15 |       1 |      21 |
| 2020-07-29 03:52:16 |       5 |      21 |
| 2020-07-29 03:52:17 |       4 |      22 |
+---------------------+---------+---------+

Utilização de recursos por tarefas num ponto específico no tempo

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.VIEW
; por exemplo, `myproject`.`region-us`.INFORMATION_SCHEMA.JOBS.

O exemplo seguinte devolve o job_id de todas as tarefas em execução num ponto específico no tempo, juntamente com a respetiva utilização de recursos durante esse período de um segundo:

SELECT
  job_id,
  period_slot_ms
FROM
  `reservation-admin-project.region-us`.INFORMATION_SCHEMA.JOBS_TIMELINE_BY_PROJECT
WHERE
  period_start = '2020-07-29 03:52:14'
  AND (statement_type != 'SCRIPT' OR statement_type IS NULL);

O resultado é semelhante ao seguinte:

+------------------+
| job_id | slot_ms |
+------------------+
| job_1  | 2415176 |
| job_2  | 4417245 |
| job_3  |  427416 |
| job_4  | 1458122 |
+------------------+

Faça corresponder o comportamento de utilização de slots a partir dos gráficos de recursos administrativos

Pode usar gráficos de recursos administrativos para monitorizar o estado da sua organização, a utilização de slots e o desempenho dos trabalhos do BigQuery ao longo do tempo. O exemplo seguinte consulta a vista INFORMATION_SCHEMA.JOBS_TIMELINE para uma cronologia de utilização de espaços publicitários em intervalos de uma hora, semelhante às informações disponíveis nos gráficos de recursos administrativos.

DECLARE
  start_time timestamp DEFAULT TIMESTAMP(START_TIME);
DECLARE
  end_time timestamp DEFAULT TIMESTAMP(END_TIME);

WITH
  snapshot_data AS (
  SELECT
    UNIX_MILLIS(period_start) AS period_start,
    IFNULL(SUM(period_slot_ms), 0) AS period_slot_ms,
    DIV(UNIX_MILLIS(period_start), 3600000 * 1) * 3600000 * 1 AS time_ms
  FROM (
    SELECT
      *
    FROM
      `PROJECT_ID.region-US`.INFORMATION_SCHEMA.JOBS_TIMELINE_BY_PROJECT
    WHERE
      ((job_creation_time >= TIMESTAMP_SUB(start_time, INTERVAL 1200 MINUTE)
          AND job_creation_time < TIMESTAMP(end_time))
        AND period_start >= TIMESTAMP(start_time)
        AND period_start < TIMESTAMP(end_time))
      AND (statement_type != "SCRIPT"
        OR statement_type IS NULL)
      AND REGEXP_CONTAINS(reservation_id, "^PROJECT_ID:") )
  GROUP BY
    period_start,
    time_ms ),
  converted_percentiles_data AS (
  SELECT
    time_ms,
    100 - CAST(SAFE_DIVIDE(3600000 * 1 * 1 / 1000, COUNT(*)) AS INT64) AS converted_percentiles,
  FROM
    snapshot_data
  GROUP BY
    time_ms ),
  data_by_time AS (
  SELECT
    time_ms,
  IF
    (converted_percentiles <= 0, 0, APPROX_QUANTILES(period_slot_ms, 100)[SAFE_OFFSET(converted_percentiles)] / 1000) AS p99_slots,
    SUM(period_slot_ms) / (3600000 * 1) AS avg_slots
  FROM
    snapshot_data
  JOIN
    converted_percentiles_data AS c
  USING
    (time_ms)
  GROUP BY
    time_ms,
    converted_percentiles )
SELECT
  time_ms,
  TIMESTAMP_MILLIS(time_ms) AS time_stamp,
  IFNULL(avg_slots, 0) AS avg_slots,
  IFNULL(p99_slots, 0) AS p99_slots,
FROM (
  SELECT
    time_ms * 3600000 * 1 AS time_ms
  FROM
    UNNEST(GENERATE_ARRAY(DIV(UNIX_MILLIS(start_time), 3600000 * 1), DIV(UNIX_MILLIS(end_time), 3600000 * 1) - 1, 1)) AS time_ms )
LEFT JOIN
  data_by_time
USING
  (time_ms)
ORDER BY
  time_ms DESC;

Calcular a percentagem do tempo de execução que teve trabalho pendente

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.VIEW
por exemplo, `myproject`.`region-us`.INFORMATION_SCHEMA.JOBS.

O exemplo seguinte devolve um valor de vírgula flutuante que representa a percentagem da duração total da execução da tarefa em que o valor de period_estimated_runnable_units era diferente de zero, o que significa que a tarefa estava a pedir mais espaços. Um valor elevado indica que a tarefa sofreu contenção de espaços, enquanto um valor baixo indica que a tarefa não estava a pedir espaços durante a maior parte do tempo de execução, o que significa que houve pouca ou nenhuma contenção de espaços.

Se o valor resultante for elevado, pode tentar adicionar mais ranhuras para ver o impacto e compreender se a contenção de ranhuras é o único gargalo.

SELECT ROUND(COUNTIF(period_estimated_runnable_units > 0) / COUNT(*) * 100, 1) as execution_duration_percentage
FROM `myproject`.`region-us`.INFORMATION_SCHEMA.JOBS_TIMELINE
WHERE job_id = 'my_job_id'
GROUP BY job_id

Se souber a data de execução da consulta, adicione uma cláusula DATE(period_start) = 'YYYY-MM-DD' à consulta para reduzir a quantidade de bytes processados e acelerar a execução. Por exemplo, DATE(period_start) = '2025-08-22'.

INFORMATION_SCHEMA

O resultado é semelhante ao seguinte:

+-------------------------------+
| execution_duration_percentage |
+-------------------------------+
|                          96.7 |
+-------------------------------+