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