Visualizzazione JOBS_TIMELINE
La visualizzazione INFORMATION_SCHEMA.JOBS_TIMELINE
contiene dati quasi in tempo reale
Metadati BigQuery per intervallo di tempo per tutti i job inviati in
progetto attuale. Questa visualizzazione contiene i job attualmente in esecuzione e completati.
Autorizzazioni obbligatorie
Per eseguire query sulla vista INFORMATION_SCHEMA.JOBS_TIMELINE
, è necessario il
bigquery.jobs.listAll
Autorizzazione Identity and Access Management (IAM) per il progetto.
Ciascuno dei seguenti ruoli IAM predefiniti include
autorizzazione:
- Proprietario progetto
- Amministratore BigQuery
Per ulteriori informazioni sulle autorizzazioni BigQuery, consulta Controllo dell'accesso con IAM.
Schema
Quando esegui una query sulle viste INFORMATION_SCHEMA.JOBS_TIMELINE_BY_*
, la query
contengono una riga per ogni secondo di esecuzione di ogni
del job BigQuery. Ogni ciclo inizia su un intervallo di un secondo intero
dura esattamente un secondo.
La vista INFORMATION_SCHEMA.JOBS_TIMELINE_BY_*
ha il seguente schema:
Nome colonna | Tipo di dati | Valore |
---|---|---|
period_start |
TIMESTAMP |
Ora di inizio di questo periodo. |
period_slot_ms |
INTEGER |
Millisecondi di slot utilizzati in questo periodo. |
period_shuffle_ram_usage_ratio |
FLOAT |
Rapporto di utilizzo casuale nel periodo di tempo selezionato. |
project_id |
STRING |
ID (colonna clustering) del progetto. |
project_number |
INTEGER |
Numero del progetto. |
user_email |
STRING |
(Colonna clustering) Indirizzo email o account di servizio di l'utente che ha eseguito il job. |
job_id |
STRING |
ID del job. Ad esempio, bquxjob_1234 . |
job_type |
STRING |
Il tipo di job. Può essere QUERY , LOAD ,
EXTRACT , COPY o null . Qualifica
il tipo null indica un job interno, come un job di script
la valutazione delle istruzioni
o l'aggiornamento della vista materializzata. |
statement_type |
STRING |
Il tipo di istruzione della query, se valido. Ad esempio:
SELECT , INSERT , UPDATE o
DELETE . |
job_creation_time |
TIMESTAMP |
(Colonna Partitioning) Ora di creazione del job. Partizionamento si basa sull'ora UTC di questo timestamp. |
job_start_time |
TIMESTAMP |
Ora di inizio di questo job. |
job_end_time |
TIMESTAMP |
Ora di fine di questo job. |
state |
STRING |
Stato in esecuzione del job al termine di questo periodo. 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 saperne di più sulle versioni, consulta Introduzione alle versioni di BigQuery. |
total_bytes_processed |
INTEGER |
Byte totali elaborati dal job. |
error_result |
RECORD |
Dettagli di un errore (se presente) come
ErrorProto.
|
cache_hit |
BOOLEAN |
Se i risultati della query per questo job provengono da una cache. |
period_estimated_runnable_units |
INTEGER |
Unità di lavoro che possono essere pianificate immediatamente in questo periodo. Slot aggiuntivi per queste unità di lavoro accelerano la query, a condizione che nessun'altra query nella prenotazione richieda slot aggiuntivi. |
Conservazione dei dati
Questa visualizzazione contiene i job attualmente in esecuzione e la cronologia dei job degli ultimi 180 giorni.
Ambito e sintassi
Le query relative a questa vista devono includere un qualificatore regione. Se non specifichi un qualificatore regionale, i metadati vengono recuperati da tutti regioni. La tabella seguente spiega l'ambito della regione per questa visualizzazione:
Nome vista | Ambito risorsa | Ambito della 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 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 degli slot per ogni secondo nella 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 per una determinata prenotazione con
WHERE reservation_id = "…"
. Per i job di script, il job padre segnala anche
utilizzo totale degli slot dai job figlio. Per evitare un doppio conteggio, utilizza
WHERE statement_type != "SCRIPT"
per escludere il job padre.
Esempio: numero di RUNNING
e PENDING
job nel tempo
Per eseguire la query su un progetto diverso da quello predefinito, aggiungi ID progetto nel seguente formato:
`PROJECT_ID`.`region-REGION_NAME`.INFORMATION_SCHEMA.VIEW
`myproject`.`region-us`.INFORMATION_SCHEMA.JOBS_TIMELINE
.
L'esempio seguente calcola il numero di job RUNNING
e PENDING
a 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 momento specifico
Per eseguire la query su un progetto diverso da quello predefinito, aggiungi ID progetto nel seguente formato:
`PROJECT_ID`.`region-REGION_NAME`.INFORMATION_SCHEMA.VIEW
`myproject`.`region-us`.INFORMATION_SCHEMA.JOBS
.
L'esempio seguente restituisce il valore job_id
di tutti i job in esecuzione in uno specifico
momento specifico insieme all'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: corrispondenza del comportamento di utilizzo degli slot dai grafici delle risorse amministrative
Puoi utilizzare la modalità
grafici delle risorse amministrative per
monitora l'integrità, l'utilizzo degli slot e i job BigQuery della tua organizzazione
le prestazioni nel tempo. L'esempio seguente esegue query
INFORMATION_SCHEMA.JOBS_TIMELINE
visualizzazione per una sequenza temporale di utilizzo degli slot a un'ora
gli intervalli di tempo, in modo simile alle informazioni disponibili
e i grafici delle risorse.
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;