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:

  • RESERVATION_ADMIN_PROJECT: il nome del progetto Google Cloud che amministra la prenotazione
  • RESERVATION_LOCATION: la località della prenotazione
  • RESERVATION_NAME: nome della prenotazione
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:

  • inserted_row_count: il numero di righe inserite.
  • deleted_row_count: il numero di righe eliminate.
  • updated_row_count: il numero di righe aggiornate.

Per tutti gli altri job, il valore è NULL.

Questa colonna è presente nelle viste INFORMATION_SCHEMA.JOBS_BY_USER e INFORMATION_SCHEMA.JOBS_BY_PROJECT.

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
Sostituisci quanto segue:

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.JOBS
Sostituisci 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     |
+-------------------------+--------------+