Visualizzazione JOBS_TIMELINE
La visualizzazione INFORMATION_SCHEMA.JOBS_TIMELINE
contiene i metadati BigQuery quasi in tempo reale per intervallo di tempo per tutti i job inviati nel progetto corrente. Questa visualizzazione contiene i job attualmente in esecuzione e completati.
Autorizzazioni obbligatorie
Per eseguire query sulla visualizzazione INFORMATION_SCHEMA.JOBS_TIMELINE
, devi disporre dell'autorizzazione bigquery.jobs.listAll
Identity and Access Management (IAM) per il progetto.
Ciascuno dei seguenti ruoli IAM predefiniti include l'autorizzazione obbligatoria:
- Proprietario progetto
- Amministratore BigQuery
Per ulteriori informazioni sulle autorizzazioni BigQuery, consulta Controllo dell'accesso con IAM.
Schema
Quando esegui una query sulle visualizzazioni INFORMATION_SCHEMA.JOBS_TIMELINE_BY_*
, i risultati della query contengono una riga per ogni secondo di esecuzione di ogni job BigQuery. Ogni periodo inizia con un intervallo di un secondo intero e
dura esattamente un secondo.
La vista INFORMATION_SCHEMA.JOBS_TIMELINE_BY_*
ha lo schema seguente:
Nome colonna | Tipo di dati | Valore |
---|---|---|
period_start |
TIMESTAMP |
Ora di inizio di questo periodo. |
period_slot_ms |
INTEGER |
Millisecondi slot consumati in questo periodo. |
project_id |
STRING |
(Colonna di clustering) ID del progetto. |
project_number |
INTEGER |
Numero del progetto. |
user_email |
STRING |
(Colonna di clustering) Indirizzo email o account di servizio dell'utente che ha eseguito il job. |
job_id |
STRING |
ID del job. Ad esempio, bquxjob_1234 . |
job_type |
STRING |
Il tipo di lavoro. Può essere QUERY , LOAD ,
EXTRACT , COPY o null . Il tipo di job null indica un job interno, ad esempio la valutazione di un'istruzione del job script o l'aggiornamento di una vista materializzata. |
statement_type |
STRING |
Il tipo di istruzione di query, se valido. Ad esempio,
SELECT , INSERT , UPDATE o
DELETE . |
priority |
STRING |
La priorità di questo job. I valori validi includono INTERACTIVE e
BATCH . |
parent_job_id |
STRING |
ID del job principale, se presente. |
job_creation_time |
TIMESTAMP |
(Colonna di partizionamento) Ora di creazione di questo job. La suddivisione in parti si basa sull'ora UTC di questo timestamp. |
job_start_time |
TIMESTAMP |
Ora di inizio del job. |
job_end_time |
TIMESTAMP |
Ora di fine del job. |
state |
STRING |
Stato di esecuzione del job alla fine di questo periodo. Gli stati validi
includono PENDING , RUNNING e
DONE . |
reservation_id |
STRING |
Nome della prenotazione principale assegnata a questo job alla fine di questo periodo, se applicabile. |
edition |
STRING |
La versione associata alla prenotazione assegnata a questo job. Per ulteriori informazioni sulle versioni, consulta Introduzione alle versioni di BigQuery. |
total_bytes_billed |
INTEGER |
Se il progetto è configurato per utilizzare i prezzi on demand, questo campo contiene i byte totali fatturati per il job. Se il progetto è configurato per utilizzare i prezzi fissi, non ti vengono addebitati i byte e questo campo è solo informativo. |
total_bytes_processed |
INTEGER |
Byte totali elaborati dal job. |
error_result |
RECORD |
Dettagli dell'errore (se presenti) sotto forma di
ErrorProto.
|
cache_hit |
BOOLEAN |
Indica se i risultati della query di questo job provengono da una cache. |
period_shuffle_ram_usage_ratio |
FLOAT |
Rapporto di utilizzo dello shuffling nel periodo di tempo selezionato. |
period_estimated_runnable_units |
INTEGER |
Unità di lavoro che possono essere pianificate immediatamente in questo periodo. Gli slot aggiuntivi per queste unità di lavoro accelerano la query, a condizione che nessuna altra query nella prenotazione richieda slot aggiuntivi. |
transaction_id |
STRING |
ID della transazione in cui è stato eseguito questo job, se presente. (Anteprima) |
Conservazione dei dati
Questa visualizzazione contiene i job in esecuzione e la cronologia dei job degli ultimi 180 giorni.
Ambito e sintassi
Le query su questa vista devono includere un qualificatore regione. Se non specifichi un qualificatore regionale, i metadati vengono recuperati da tutte le regioni. La tabella seguente illustra l'ambito della regione per questa visualizzazione:
Nome vista | Ambito risorsa | Ambito regione |
---|---|---|
[PROJECT_ID.]`region-REGION`.INFORMATION_SCHEMA.JOBS_TIMELINE[_BY_PROJECT] |
Livello progetto | REGION |
(Facoltativo) PROJECT_ID
: l'ID del tuo progetto Google Cloud. Se non specificato, viene utilizzato il progetto predefinito.
REGION
: qualsiasi nome della regione del set di dati.
Ad esempio: `region-us`
.
Esempi
Per eseguire la query su un progetto diverso da quello predefinito, aggiungi l'ID progetto nel seguente formato:
`PROJECT_ID`.`region-REGION_NAME`.INFORMATION_SCHEMA.VIEW
`myproject`.`region-us`.INFORMATION_SCHEMA.JOBS_TIMELINE
.
L'esempio seguente calcola l'utilizzo dello slot per ogni secondo dell'ultimo giorno:
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 | +---------------------+---------------+
Puoi controllare l'utilizzo di una determinata prenotazione con
WHERE reservation_id = "…"
. Per i job di script, il job principale registra anche l'utilizzo totale degli slot dei job secondari. Per evitare il conteggio doppio, utilizza
WHERE statement_type != "SCRIPT"
per escludere il job principale.
Esempio: numero di job RUNNING
e PENDING
nel tempo
Per eseguire la query su un progetto diverso da quello predefinito, aggiungi l'ID progetto nel seguente formato:
`PROJECT_ID`.`region-REGION_NAME`.INFORMATION_SCHEMA.VIEW
`myproject`.`region-us`.INFORMATION_SCHEMA.JOBS_TIMELINE
.
Il seguente esempio calcola il numero di job RUNNING
e PENDING
ogni
secondo nell'ultimo giorno:
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;
Il risultato è simile al seguente:
+---------------------+---------+---------+ | 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 | +---------------------+---------+---------+
Esempio: utilizzo delle risorse da parte dei job in un determinato momento
Per eseguire la query su un progetto diverso da quello predefinito, aggiungi l'ID progetto nel seguente formato:
`PROJECT_ID`.`region-REGION_NAME`.INFORMATION_SCHEMA.VIEW
`myproject`.`region-us`.INFORMATION_SCHEMA.JOBS
.
L'esempio seguente restituisce il job_id
di tutti i job in esecuzione in un determinato
punto nel tempo, insieme al relativo utilizzo delle risorse durante il periodo di un secondo:
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';
Il risultato è simile al seguente:
+------------------+ | job_id | slot_ms | +------------------+ | job_1 | 2415176 | | job_2 | 4417245 | | job_3 | 427416 | | job_4 | 1458122 | +------------------+
Esempio: abbinare il comportamento di utilizzo degli slot dai grafici delle risorse amministrative
Puoi utilizzare
i grafici delle risorse di amministrazione per monitorare lo stato, l'utilizzo degli slot e il rendimento dei job BigQuery della tua organizzazione nel tempo. L'esempio seguente esegue una query sulla vista INFORMATION_SCHEMA.JOBS_TIMELINE
per una cronologia dell'utilizzo di uno slot a intervalli di un'ora, in modo simile alle informazioni disponibili nei grafici delle risorse amministrative.
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;