Visualização JOBS_TIMELINE
A visualização INFORMATION_SCHEMA.JOBS_TIMELINE
contém metadados do BigQuery em tempo real por fração de tempo para todos os jobs enviados no projeto atual. Essa visualização contém
jobs em execução e concluídos.
Permissões necessárias
Para consultar a visualização INFORMATION_SCHEMA.JOBS_TIMELINE
, você precisa da
permissão bigquery.jobs.listAll
Identity and Access Management (IAM) do projeto.
Cada um dos seguintes papéis predefinidos do IAM inclui a permissão necessária:
- Proprietário do projeto
- Administrador do BigQuery
Para mais informações sobre as permissões do BigQuery, consulte Controle de acesso com o IAM.
Esquema
Ao consultar as visualizações INFORMATION_SCHEMA.JOBS_TIMELINE_BY_*
, os resultados da
consulta terão uma linha para cada segundo de execução de cada job
do BigQuery. Cada período começa em um intervalo de segundo inteiro e
dura exatamente um segundo.
A visualização INFORMATION_SCHEMA.JOBS_TIMELINE_BY_*
tem o seguinte esquema:
Nome da coluna | Tipo de dados | Valor |
---|---|---|
period_start |
TIMESTAMP |
Horário de início deste período. |
period_slot_ms |
INTEGER |
Milissegundos de slot consumidos neste período. |
period_shuffle_ram_usage_ratio |
FLOAT |
Proporção de uso do embaralhamento no período selecionado. |
project_id |
STRING |
(Coluna de clustering) ID do projeto. |
project_number |
INTEGER |
Número do projeto. |
user_email |
STRING |
(Coluna de clustering) endereço de e-mail ou conta de serviço do usuário que executou o job. |
job_id |
STRING |
ID do job. Por exemplo, bquxjob_1234 . |
job_type |
STRING |
O tipo de job. Pode ser QUERY , LOAD ,
EXTRACT , COPY , ou null . O tipo
de job null indica um job interno, como avaliação da instrução do
job de script ou atualização da visualização materializada. |
statement_type |
STRING |
O tipo de instrução de consulta, se for válido. Por exemplo,
SELECT , INSERT , UPDATE , ou
DELETE . |
job_creation_time |
TIMESTAMP |
(Coluna de particionamento) horário da criação do job. O particionamento é baseado no horário UTC desse carimbo de data/hora. |
job_start_time |
TIMESTAMP |
Horário de início deste job. |
job_end_time |
TIMESTAMP |
Horário de término deste job. |
state |
STRING |
Estado em execução do job 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 job no final deste período, se aplicável. |
edition |
STRING |
A edição associada à reserva atribuída a este job. Para mais informações sobre edições, consulte Introdução às edições do BigQuery. |
total_bytes_processed |
INTEGER |
Total de bytes processados pelo job. |
error_result |
RECORD |
Detalhes do erro (se houver) como um
ErrorProto.
. |
cache_hit |
BOOLEAN |
Se os resultados da consulta deste job eram de um cache. |
period_estimated_runnable_units |
INTEGER |
Unidades de trabalho que podem ser programadas imediatamente nesse período. Os slots adicionais para essas unidades de trabalho aceleram a consulta, contanto que nenhuma outra consulta na reserva precise de slots adicionais. |
Retenção de dados
Essa visualização contém os jobs em execução e o histórico dos últimos 180 dias.
Escopo e sintaxe
As consultas nessa visualização precisam incluir um qualificador de região. Se você não especificar um qualificador regional, os metadados serão recuperados de todas as regiões. A tabela a seguir explica o escopo da região dessa visualização:
Nome da visualização | Escopo do recurso | Escopo 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. Se não for especificado, o projeto padrão será usado.
REGION
: qualquer nome da região do conjunto de dados.
Por exemplo, region-us
.
Exemplos
Para executar a consulta em um projeto diferente do projeto padrão, adicione o ID do projeto no seguinte formato:
`PROJECT_ID`.`region-REGION_NAME`.INFORMATION_SCHEMA.VIEW
`myproject`.`region-us`.INFORMATION_SCHEMA.JOBS_TIMELINE
.
No exemplo a seguir, calculamos a utilização de slots 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 | +---------------------+---------------+
Verifique o uso de uma reserva específica com
WHERE reservation_id = "…"
. Para jobs de script, o job pai também informa o uso total de slots dos jobs filhos. Para evitar a contagem duplicada, use WHERE statement_type != "SCRIPT"
para excluir o job pai.
Exemplo: número de jobs RUNNING
e PENDING
ao longo do tempo
Para executar a consulta em um projeto diferente do projeto padrão, 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 a seguir calcula o número de jobs RUNNING
e PENDING
a cada
segundo no dia anterior:
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 será 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 | +---------------------+---------+---------+
Exemplo: uso de recursos por jobs em um momento específico
Para executar a consulta em um projeto diferente do projeto padrão, adicione o ID do projeto no seguinte formato:
`PROJECT_ID`.`region-REGION_NAME`.INFORMATION_SCHEMA.VIEW
`myproject`.`region-us`.INFORMATION_SCHEMA.JOBS
.
O exemplo a seguir retorna o job_id
de todos os jobs em execução em um momento
específico junto com o uso 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';
O resultado será semelhante ao seguinte:
+------------------+ | job_id | slot_ms | +------------------+ | job_1 | 2415176 | | job_2 | 4417245 | | job_3 | 427416 | | job_4 | 1458122 | +------------------+
Exemplo: corresponder o comportamento de uso de slots em gráficos de recursos administrativos
É possível usar
gráficos de recursos administrativos para
monitorar a integridade da organização, o uso de slots e o desempenho dos jobs do BigQuery
ao longo do tempo. O exemplo a seguir consulta a
visualização INFORMATION_SCHEMA.JOBS_TIMELINE
para uma linha do tempo de uso de slots em intervalos de uma hora, semelhante às informações disponíveis nos gráficos de recursos administrativos.
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 `user_proj.region-US`.INFORMATION_SCHEMA.JOBS_TIMELINE_BY_ORGANIZATION 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, "^user_proj:") ) GROUP BY period_start, time_ms ), data_by_time AS ( SELECT time_ms, SUM(period_slot_ms) / (3600000 * 1) AS submetric_value FROM snapshot_data GROUP BY time_ms ) SELECT time_ms, IFNULL(submetric_value, 0) AS submetric_value, "Slot Usage" AS resource_id, IFNULL(SUM(submetric_value) OVER () / (TIMESTAMP_DIFF(@end_time, @start_time, HOUR) / 1), 0) AS overall_average_slot_count 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;