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 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 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 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. 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 di partizionamento) Ora di creazione di questo job. Partizionamento si basa sull'ora UTC di questo timestamp.
job_start_time TIMESTAMP Ora di inizio del job.
job_end_time TIMESTAMP Ora di fine di questo 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_processed INTEGER Byte totali elaborati dal job.
error_result RECORD Dettagli di eventuali errori 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 illustra 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
Sostituisci quanto segue:

  • Facoltativo: PROJECT_ID: l'ID del tuo progetto Google Cloud. Se non specificato, viene utilizzato il progetto predefinito.

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 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;
Nota: i nomi delle visualizzazioni "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 di 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 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
; ad esempio, `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 determinato momento

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
; ad esempio `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: 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 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.

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;