JOB
La vista INFORMATION_SCHEMA.JOBS
contiene i metadati in tempo reale di tutti i job BigQuery nel progetto corrente.
Autorizzazione obbligatoria
Per eseguire una query sulla vista INFORMATION_SCHEMA.JOBS
, 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:
- Amministratore BigQuery
- Amministratore risorse BigQuery
- Editor risorse BigQuery
- Visualizzatore risorse BigQuery
Per ulteriori informazioni sulle autorizzazioni BigQuery, consulta Controllo dell'accesso con IAM.
Schema
I dati sottostanti sono partizionati dalla colonna creation_time
e raggruppati in project_id
e user_email
.
La vista INFORMATION_SCHEMA.JOBS
ha il seguente schema:
Nome colonna | Tipo di dati | Valore |
---|---|---|
creation_time |
TIMESTAMP |
(Colonna partizionamento) Ora di creazione di questo job. Il partizionamento è basato sul fuso orario UTC di questo timestamp. |
project_id |
STRING |
(Colonna di clustering) dell'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 valutazione di un'istruzione di script o aggiornamento materializzato della vista. |
statement_type |
STRING |
Il tipo di istruzione di query, se valida. Ad esempio,
SELECT , INSERT , UPDATE ,
DELETE o SCRIPT .
Consulta la sezione QueryStatementType
per un elenco dei valori validi. |
priority |
STRING |
La priorità di questo job. I valori validi sono INTERACTIVE
e BATCH . |
start_time |
TIMESTAMP |
Ora di inizio del job. |
end_time |
TIMESTAMP |
Ora di fine di questo job. |
query |
STRING |
Testo della query SQL. Nota: solo la vista JOBS_BY_PROJECT contiene
la colonna query . |
state |
STRING |
Stato in esecuzione del job. Gli stati validi includono PENDING ,
RUNNING e DONE . |
reservation_id |
STRING |
Nome della prenotazione principale assegnata al job, se
applicabile. Se il tuo job è stato eseguito in un progetto assegnato a una prenotazione, avrà il seguente formato:
RESERVATION_ADMIN_PROJECT:RESERVATION_LOCATION.RESERVATION_NAME
In questo output:
|
total_bytes_processed |
INTEGER |
Byte totali elaborati dal job. |
total_slot_ms |
INTEGER |
Slot per millisecondi per il job nel corso della sua intera durata. |
error_result |
RECORD |
Dettagli dell'errore, se presenti, come ErrorProto . |
cache_hit |
BOOLEAN |
Indica se i risultati della query di questo job provengono da una cache. |
destination_table |
RECORD |
Tabella di destinazione per gli eventuali risultati. |
referenced_tables |
RECORD |
Array di tabelle a cui fa riferimento il job. Completato solo per i job di query. |
labels |
RECORD |
Array di etichette applicate al job come stringhe key , value . |
timeline |
RECORD |
Cronologia delle query del job. Contiene snapshot dell'esecuzione della query. |
job_stages |
RECORD |
Fasi delle query del job. |
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 il modello a costo fisso, non ti sarà addebitato alcun costo per i byte e questo campo sarà solo informativo. |
parent_job_id |
STRING |
ID del job principale, se presente. |
transaction_id |
STRING |
ID della transazione in cui è stato eseguito questo job, se presente. (Anteprima) |
session_info |
RECORD |
Dettagli sulla sessione in cui è stato eseguito il job, se presente. (Anteprima) |
dml_statistics |
RECORD |
Se il job è una query con un'istruzione DML, il valore è un record con i seguenti campi:
Per tutti gli altri job, il valore è Questa colonna è presente nelle viste
|
bi_engine_statistics |
RECORD |
Se il progetto è configurato per utilizzare l'interfaccia SQL di BI Engine, questo campo contiene BiEngineStatistiche. In caso contrario, NULL .
|
total_modified_partitions |
INTEGER |
Numero totale di partizioni modificate dal job. Questo campo viene compilato per i job LOAD e QUERY .
|
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 rispetto a questa visualizzazione devono includere un qualificatore per area geografica. Se non specifichi un qualificatore regionale, i metadati vengono recuperati da tutte le aree geografiche. La tabella seguente illustra l'ambito della regione per questa visualizzazione:
Nome visualizzazione | Ambito delle risorse | Ambito per area geografica |
---|---|---|
[PROJECT_ID.]`region-REGION`.INFORMATION_SCHEMA.JOBS[_BY_PROJECT] |
A livello di progetto | REGION |
- Facoltativo:
PROJECT_ID
: l'ID del tuo progetto Cloud. Se non è specificato, viene utilizzato il progetto predefinito. REGION
: qualsiasi nome dell'area geografica del set di dati. Ad esempio:region-us
.
Quando esegui una query su INFORMATION_SCHEMA.JOBS
per trovare un costo di riepilogo dei job di query, escludi il tipo di istruzione SCRIPT
, altrimenti alcuni valori potrebbero essere conteggiati due volte. La riga SCRIPT
include valori di riepilogo per tutti i job secondari eseguiti nell'ambito di questo job.
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.JOBSSostituisci quanto segue:
PROJECT_ID
: l'ID del progetto.REGION_NAME
: l'area geografica per il tuo progetto.
Ad esempio, `myproject`.`region-us`.INFORMATION_SCHEMA.JOBS_BY_PROJECT
.
L'esempio seguente calcola l'utilizzo medio dell'area annuncio per tutte le query negli ultimi 7 giorni per un determinato progetto. Tieni presente che questo calcolo è più accurato per i progetti con un utilizzo dello slot coerente nell'arco della settimana. Se il tuo progetto non ha un utilizzo dello slot coerente, questo numero potrebbe essere inferiore al previsto.
Per eseguire la query:
SELECT SUM(total_slot_ms) / (1000 * 60 * 60 * 24 * 7) AS avg_slots FROM `region-us`.INFORMATION_SCHEMA.JOBS WHERE -- Filter by the partition column first to limit the amount of data scanned. -- Eight days allows for jobs created before the 7 day end_time filter. creation_time BETWEEN TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 8 DAY) AND CURRENT_TIMESTAMP() AND job_type = 'QUERY' AND end_time BETWEEN TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 7 DAY) AND CURRENT_TIMESTAMP();
Il risultato è simile al seguente:
+------------+ | avg_slots | +------------+ | 3879.1534 | +------------+
Puoi controllare l'utilizzo di una determinata prenotazione con
WHERE reservation_id = "…"
. Questo può essere utile per determinare l'utilizzo percentuale di una prenotazione per un determinato periodo di tempo. Per i job script, il job padre segnala anche l'utilizzo totale dello slot dai suoi job secondari. Per evitare un doppio conteggio, utilizza WHERE statement_type != "SCRIPT"
per escludere il job principale.
Se invece vuoi controllare l'utilizzo medio dello slot per i singoli job, utilizza total_slot_ms / TIMESTAMP_DIFF(end_time, start_time, MILLISECOND)
.
Esempio: cronologia dei job di caricamento
L'esempio seguente elenca tutti gli utenti o gli account di servizio che hanno inviato un job di caricamento collettivo per un determinato progetto. Poiché non è specificato alcun limite di tempo, questa query esegue la scansione di tutta la cronologia disponibile, ad esempio gli ultimi 30 giorni.
SELECT DISTINCT(user_email) AS user FROM `region-us`.INFORMATION_SCHEMA.JOBS WHERE job_type = 'LOAD';
Il risultato è simile al seguente:
+--------------+ | user | +--------------+ | abc@xyz.com | +--------------+ | def@xyz.com | +--------------+
Esempio: byte elaborati per identità utente
L'esempio seguente mostra i byte totali fatturati per i job di query per utente.
SELECT
user_email,
SUM(total_bytes_billed) AS bytes_billed
FROM
`region-us.INFORMATION_SCHEMA.JOBS`
WHERE
job_type = 'QUERY'
AND statement_type != 'SCRIPT'
GROUP BY
user_email;
Il risultato dovrebbe essere simile all'esempio seguente:
+---------------------+--------------+
| user_email | bytes_billed |
+---------------------+--------------+
| bob@example.com | 2847932416 |
| alice@example.com | 1184890880 |
| charles@example.com | 10485760 |
+---------------------+--------------+
Esempio: suddivisione oraria dei byte elaborati
L'esempio seguente mostra i byte totali fatturati per i job di query, in intervalli orari:
SELECT TIMESTAMP_TRUNC(end_time, HOUR) AS time_window, SUM(total_bytes_billed) AS bytes_billed FROM `region-us`.INFORMATION_SCHEMA.JOBS WHERE job_type = 'QUERY' AND statement_type != 'SCRIPT' GROUP BY time_window ORDER BY time_window DESC
Il risultato è simile al seguente:
+-------------------------+--------------+ | time_window | bytes_billed | +-------------------------+--------------+ | 2022-05-17 20:00:00 UTC | 1967128576 | | 2022-05-10 21:00:00 UTC | 0 | | 2022-04-15 20:00:00 UTC | 10485760 | | 2022-04-15 17:00:00 UTC | 41943040 | +-------------------------+--------------+