Visualizzazione JOBS_TIMELINE

La visualizzazione INFORMATION_SCHEMA.JOBS_TIMELINE contiene i metadati BigQuery quasi in tempo reale 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 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 slot consumati in questo periodo.
project_id STRING (Colonna di clustering) 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 la valutazione di un'istruzione del job script o l'aggiornamento di una vista materializzata.
statement_type STRING Il tipo di istruzione di query, se valido. Ad esempio, SELECT, INSERT, UPDATE o DELETE.
priority STRING La priorità di questo job. I valori validi includono INTERACTIVE e BATCH.
parent_job_id STRING ID del job principale, se presente.
job_creation_time TIMESTAMP (Colonna di partizionamento) Ora di creazione di questo job. La suddivisione in parti si basa sull'ora UTC di questo timestamp.
job_start_time TIMESTAMP Ora di inizio del job.
job_end_time TIMESTAMP Ora di fine del 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_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 i prezzi fissi, non ti vengono addebitati i byte e questo campo è solo informativo.
total_bytes_processed INTEGER Byte totali elaborati dal job.
error_result RECORD Dettagli dell'errore (se presenti) sotto forma di ErrorProto.
cache_hit BOOLEAN Indica se i risultati della query di questo job provengono da una cache.
period_shuffle_ram_usage_ratio FLOAT Rapporto di utilizzo dello shuffling nel periodo di tempo selezionato.
period_estimated_runnable_units INTEGER Unità di lavoro che possono essere pianificate immediatamente in questo periodo. Gli slot aggiuntivi per queste unità di lavoro accelerano la query, a condizione che nessuna altra query nella prenotazione richieda slot aggiuntivi.
transaction_id STRING ID della transazione in cui è stato eseguito questo job, se presente. (Anteprima)

Conservazione dei dati

Questa visualizzazione contiene i job in esecuzione e la cronologia dei job degli ultimi 180 giorni.

Ambito e sintassi

Le query su 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 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.

  • 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 dello 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 di una determinata prenotazione con WHERE reservation_id = "…". Per i job di script, il job principale registra anche l'utilizzo totale degli slot dei job secondari. 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.

    Il seguente esempio calcola il numero di job RUNNING e PENDING 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 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 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: abbinare il comportamento di utilizzo degli slot dai grafici delle risorse amministrative

    Puoi utilizzare i grafici delle risorse di amministrazione per monitorare lo stato, l'utilizzo degli slot e il rendimento dei job BigQuery della tua organizzazione 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.

    DECLARE
      start_time timestamp DEFAULT TIMESTAMP(START_TIME);
    DECLARE
      end_time timestamp DEFAULT TIMESTAMP(END_TIME);
    
    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
          `PROJECT_ID.region-US`.INFORMATION_SCHEMA.JOBS_TIMELINE_BY_PROJECT
        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, "^PROJECT_ID:") )
      GROUP BY
        period_start,
        time_ms ),
      converted_percentiles_data AS (
      SELECT
        time_ms,
        100 - CAST(SAFE_DIVIDE(3600000 * 1 * 1 / 1000, COUNT(*)) AS INT64) AS converted_percentiles,
      FROM
        snapshot_data
      GROUP BY
        time_ms ),
      data_by_time AS (
      SELECT
        time_ms,
      IF
        (converted_percentiles <= 0, 0, APPROX_QUANTILES(period_slot_ms, 100)[SAFE_OFFSET(converted_percentiles)] / 1000) AS p99_slots,
        SUM(period_slot_ms) / (3600000 * 1) AS avg_slots
      FROM
        snapshot_data
      JOIN
        converted_percentiles_data AS c
      USING
        (time_ms)
      GROUP BY
        time_ms,
        converted_percentiles )
    SELECT
      time_ms,
      TIMESTAMP_MILLIS(time_ms) AS time_stamp,
      IFNULL(avg_slots, 0) AS avg_slots,
      IFNULL(p99_slots, 0) AS p99_slots,
    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;