Vue JOBS_TIMELINE

La vue INFORMATION_SCHEMA.JOBS_TIMELINE contient les métadonnées BigQuery en temps quasi réel par tranche horaire pour tous les jobs envoyés dans le projet en cours. Cette vue contient les tâches en cours et terminées.

Autorisations requises

Pour interroger la vue INFORMATION_SCHEMA.JOBS_TIMELINE, vous devez disposer de l'autorisation IAM (Identity and Access Management) bigquery.jobs.listAll pour le projet. Chacun des rôles IAM prédéfinis suivants inclut l'autorisation requise :

  • Propriétaire du projet
  • BigQuery Admin

Pour plus d'informations sur les autorisations BigQuery, consultez la page Contrôle des accès avec IAM.

Schéma

Lorsque vous lancez une requête sur les vues INFORMATION_SCHEMA.JOBS_TIMELINE_BY_*, les résultats de la requête contiennent une ligne pour chaque seconde d'exécution de chaque tâche BigQuery. Chaque période commence à un intervalle d'une seconde et dure exactement une seconde.

La vue INFORMATION_SCHEMA.JOBS_TIMELINE_BY_* présente le schéma suivant :

Nom de la colonne Type de données Valeur
period_start TIMESTAMP Heure de début de la période.
period_slot_ms INTEGER Emplacements de millisecondes consommés au cours de la période.
project_id STRING (Colonne de mise en cluster) ID du projet.
project_number INTEGER Numéro du projet.
user_email STRING (Colonne de mise en cluster) Adresse e-mail ou compte de service de l'utilisateur ayant exécuté la tâche.
job_id STRING ID de la tâche. Par exemple, bquxjob_1234.
job_type STRING Type de la tâche. Il peut s'agir de QUERY, LOAD, EXTRACT, COPY ou null. Le type de tâche null indique une tâche interne, telle que l'évaluation d'une instruction de tâche de script ou l'actualisation d'une vue matérialisée.
statement_type STRING Type d'instruction de requête, si celui-ci est valide. Par exemple, SELECT, INSERT, UPDATE ou DELETE.
priority STRING Priorité de cette tâche. Les valeurs autorisées sont INTERACTIVE et BATCH.
parent_job_id STRING ID de la tâche parente (le cas échéant).
job_creation_time TIMESTAMP (Colonne de partitionnement) Heure de création de la tâche. Le partitionnement est basé sur l'heure UTC de l'horodatage.
job_start_time TIMESTAMP Heure de début de la tâche.
job_end_time TIMESTAMP Heure de fin de la tâche.
state STRING État d'exécution de la tâche à la fin de la période. Les états valides sont les suivants : PENDING, RUNNING et DONE.
reservation_id STRING Nom de la réservation principale attribuée à la tâche à la fin de la période, le cas échéant.
edition STRING Édition associée à la réservation attribuée à ce job. Pour en savoir plus sur les éditions, consultez la page Présentation des éditions BigQuery.
total_bytes_billed INTEGER Si le projet est configuré pour utiliser la tarification à la demande, ce champ contient le nombre total d'octets facturés pour le job. Si le projet est configuré pour utiliser la tarification forfaitaire, le nombre d'octets ne vous est pas facturé, et ce champ est fourni à titre d'information seulement.
total_bytes_processed INTEGER Nombre total d'octets traités par la tâche.
error_result RECORD Détails de l'erreur (le cas échéant) en tant que ErrorProto. .
cache_hit BOOLEAN Indique si les résultats de requête de cette tâche ont été mis en cache.
period_shuffle_ram_usage_ratio FLOAT Taux d'utilisation du brassage au cours de la période sélectionnée.
period_estimated_runnable_units INTEGER Unités de travail pouvant être planifiées immédiatement dans cette période. Des emplacements supplémentaires pour ces unités de travail accélèrent votre requête, à condition qu'aucune autre requête de la réservation n'ait besoin d'emplacements supplémentaires.
transaction_id STRING ID de la transaction dans laquelle ce job a été exécuté, le cas échéant. (Aperçu)

Conservation des données

Cette vue contient les tâches en cours d'exécution et l'historique des tâches des 180 derniers jours.

Champ d'application et syntaxe

Les requêtes exécutées sur cette vue doivent inclure un qualificatif de région. Si vous ne spécifiez pas de qualificatif de région, les métadonnées sont extraites de toutes les régions. Le tableau suivant explique le champ d'application de la région pour cette vue :

Nom de la vue Champ d'application de la ressource Champ d'application de la région
[PROJECT_ID.]`region-REGION`.INFORMATION_SCHEMA.JOBS_TIMELINE[_BY_PROJECT] Niveau Projet REGION
Remplacez l'élément suivant :
  • Facultatif: PROJECT_ID: ID de votre projet Google Cloud. Si non spécifié, le projet par défaut est utilisé.
  • REGION : tout nom de région d'ensemble de données. Par exemple, `region-us`.

Examples

Pour exécuter la requête sur un projet autre que celui par défaut, ajoutez l'ID du projet en respectant le format suivant :

`PROJECT_ID`.`region-REGION_NAME`.INFORMATION_SCHEMA.VIEW
 ; Par exemple, `myproject`.`region-us`.INFORMATION_SCHEMA.JOBS_TIMELINE.

L'exemple suivant calcule l'utilisation des emplacements pour chaque seconde au cours du dernier jour.

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;
Remarque : Les noms des vues "INFORMATION_SCHEMA" sont sensibles à la casse. Le résultat ressemble à ce qui suit :
+---------------------+---------------+
|    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 |
+---------------------+---------------+

Vous pouvez vérifier l'utilisation d'une réservation spécifique à l'aide de WHERE reservation_id = "…". Pour les tâches de script, la tâche parente indique également l'utilisation totale des emplacements par ses tâches enfants. Pour éviter de comptabiliser deux fois, utilisez WHERE statement_type != "SCRIPT" pour exclure la tâche parente.

Exemple : Nombre de tâches RUNNING et PENDING au fil du temps

Pour exécuter la requête sur un projet autre que celui par défaut, ajoutez l'ID du projet en respectant le format suivant :

`PROJECT_ID`.`region-REGION_NAME`.INFORMATION_SCHEMA.VIEW
 ; Par exemple, `myproject`.`region-us`.INFORMATION_SCHEMA.JOBS_TIMELINE.

L'exemple suivant calcule le nombre de tâches RUNNING et PENDING à chaque seconde au cours du dernier jour.

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;

Le résultat ressemble à ce qui suit :

+---------------------+---------+---------+
|    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 |
+---------------------+---------+---------+

Exemple : Utilisation des ressources par tâches à un moment précis

Pour exécuter la requête sur un projet autre que celui par défaut, ajoutez l'ID du projet en respectant le format suivant :

`PROJECT_ID`.`region-REGION_NAME`.INFORMATION_SCHEMA.VIEW
 ; Par exemple, `myproject`.`region-us`.INFORMATION_SCHEMA.JOBS.

L'exemple suivant renvoie l'ID (job_id) de toutes les tâches exécutées à un moment spécifique, ainsi que leur utilisation des ressources au cours de cette période d'une seconde :

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';

Le résultat ressemble à ce qui suit :

+------------------+
| job_id | slot_ms |
+------------------+
| job_1  | 2415176 |
| job_2  | 4417245 |
| job_3  |  427416 |
| job_4  | 1458122 |
+------------------+

Exemple : établir le comportement d'utilisation des emplacements à partir des graphiques de ressources d'administration

Vous pouvez utiliser des graphiques de ressources d'administration pour surveiller l'état de votre organisation, l'utilisation des emplacements et les performances des jobs BigQuery au fil du temps. L'exemple suivant interroge la vue INFORMATION_SCHEMA.JOBS_TIMELINE afin d'obtenir la chronologie d'utilisation des emplacements, par intervalles d'une heure, soit des informations similaires à celles disponibles dans les graphiques de ressources d'administration.

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;