Visualizzazione JOBS_TIMELINE

La vista INFORMATION_SCHEMA.JOBS_TIMELINE contiene metadati BigQuery quasi in tempo reale suddivisi 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 una query sulla vista INFORMATION_SCHEMA.JOBS_TIMELINE, devi disporre dell'autorizzazione Identity and Access Management (IAM) di bigquery.jobs.listAll per il progetto. Ciascuno dei seguenti ruoli IAM predefiniti include l'autorizzazione richiesta:

  • 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_*, i risultati della query contengono una riga per ogni secondo di esecuzione di ogni job BigQuery. Ogni ciclo inizia con un intervallo di un secondo intero e 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 dell'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. Il tipo di job null indica un job interno, come la valutazione dell'istruzione di job dello script 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. Il 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. 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.
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 tutte le 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 di progetto REGION
Sostituisci quanto segue:

  • (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
; ad esempio, `myproject`.`region-us`.INFORMATION_SCHEMA.JOBS_TIMELINE.

L'esempio seguente calcola l'utilizzo degli 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;
Nota: i nomi delle viste "INFORMATION_SCHEMA" sono sensibili alle maiuscole. Il risultato è simile al seguente:
+---------------------+---------------+
|    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 l'utilizzo totale degli slot da parte dei job figlio. Per evitare il 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 l'ID progetto nel seguente formato:

`PROJECT_ID`.`region-REGION_NAME`.INFORMATION_SCHEMA.VIEW
; ad esempio, `myproject`.`region-us`.INFORMATION_SCHEMA.JOBS_TIMELINE.

L'esempio seguente calcola il numero di RUNNING e PENDING job 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 l'ID progetto nel seguente formato:

`PROJECT_ID`.`region-REGION_NAME`.INFORMATION_SCHEMA.VIEW
; ad esempio, `myproject`.`region-us`.INFORMATION_SCHEMA.JOBS.

L'esempio seguente restituisce il valore job_id di tutti i job in esecuzione in un 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 i grafici delle risorse amministrative per monitorare l'integrità della tua organizzazione, l'utilizzo degli slot e le prestazioni dei job BigQuery nel tempo. L'esempio seguente esegue query nella vista INFORMATION_SCHEMA.JOBS_TIMELINE per una sequenza temporale di utilizzo degli slot a intervalli di un'ora, in modo simile alle informazioni disponibili nei grafici delle risorse amministrative.

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;