Partager via


Informations de référence sur la table système de travaux

Note

Le schéma lakeflow était auparavant connu sous le nom de workflow. Le contenu des deux schémas est identique.

Cet article est une référence relative aux tables système lakeflow qui enregistrent l’activité des travaux dans votre compte. Ces tables incluent des enregistrements de tous les espaces de travail de votre compte déployés dans la même région cloud. Pour afficher les enregistrements d’une autre région, vous devez afficher les tables d’un espace de travail déployé dans cette région.

Requirements

  • Pour accéder à ces tables système, les utilisateurs doivent :
    • Être à la fois un administrateur de metastore et un administrateur de compte, ou
    • Disposer des autorisations USE et SELECT sur les schémas système. Consultez Octroyer un accès aux tables système.

Tables de travaux disponibles

Toutes les tables système liées au travail résident dans le schéma system.lakeflow. Actuellement, le schéma héberge quatre tables :

Table Description Prend en charge la diffusion en continu Période de rétention gratuite Inclut des données globales ou régionales
travaux (préversion publique) Effectue le suivi de tous les travaux créés dans le compte Yes 365 jours Regional
job_tasks (préversion publique) Effectue le suivi de toutes les tâches de travail qui s’exécutent dans le compte Yes 365 jours Regional
job_run_timeline (préversion publique) Effectue le suivi des exécutions du travail et des métadonnées associées Yes 365 jours Regional
job_task_run_timeline (préversion publique) Effectue le suivi des exécutions des tâches de travail et des métadonnées associées Yes 365 jours Regional
pipelines (préversion publique) Effectue le suivi de tous les pipelines créés dans le compte Yes 365 jours Regional
pipeline_update_timeline (préversion publique) Effectue le suivi des mises à jour du pipeline et des métadonnées associées Yes 365 jours Regional

Informations de référence détaillées sur le schéma

Les sections suivantes fournissent des références de schéma pour chacune des tables système liées aux travaux.

Schéma de la table des travaux

La table jobs est une table de dimension à variation lente (SCD2). Lorsqu’une ligne change, une nouvelle ligne est émise, remplaçant logiquement la ligne précédente.

Chemin d’accès de la table : system.lakeflow.jobs

Nom de colonne Type de données Description Notes
account_id string ID du compte auquel appartient ce travail
workspace_id string ID de l’espace de travail auquel appartient ce travail
job_id string L'ID de la tâche Unique au sein d’un seul espace de travail
name string Nom de la tâche fourni par l’utilisateur
description string Description fournie par l’utilisateur du travail Ce champ est vide si vous avez configuré des clés gérées par le client .
creator_id string ID du principal qui a créé le travail
tags map Balises personnalisées fournies par l’utilisateur associées à ce travail
change_time timestamp Heure de la dernière modification du travail Fuseau horaire enregistré en tant que +00:00 (UTC)
delete_time timestamp Heure à laquelle le travail a été supprimé par l’utilisateur Fuseau horaire enregistré en tant que +00:00 (UTC)
run_as string ID de l’utilisateur ou du principal de service dont les autorisations sont utilisées pour la mise à jour du pipeline
trigger struct Configuration du déclencheur pour le travail Non renseigné pour les lignes émises avant début décembre 2025
trigger_type string Type de déclencheur pour la tâche Non renseigné pour les lignes émises avant début décembre 2025
run_as_user_name string E-mail de l’utilisateur ou de l’ID du principal de service dont les autorisations sont utilisées pour l’exécution du travail Non renseigné pour les lignes émises avant début décembre 2025
creator_user_name string E-mail de l’utilisateur ou de l’ID du principal de service qui a créé le travail Non renseigné pour les lignes émises avant début décembre 2025
paused boolean Indique si le travail est suspendu Non renseigné pour les lignes émises avant début décembre 2025
timeout_seconds long Durée du délai d’expiration de la tâche en secondes Non renseigné pour les lignes émises avant début décembre 2025
health_rules array Ensemble de règles d’intégrité définies pour ce travail Non renseigné pour les lignes émises avant début décembre 2025
deployment struct Informations de déploiement pour les travaux gérés par des sources externes Non renseigné pour les lignes émises avant début décembre 2025
create_time timestamp Heure à laquelle cette tâche a été créée. Fuseau horaire enregistré en tant que +00:00 (UTC). Non renseigné pour les lignes émises avant début décembre 2025

Exemple de requête

-- Get the most recent version of a job
SELECT
  *,
  ROW_NUMBER() OVER(PARTITION BY workspace_id, job_id ORDER BY change_time DESC) as rn
FROM
  system.lakeflow.jobs QUALIFY rn=1

Schéma de la table des tâches

La table tâches de travail est une table de dimensions à variation lente (SCD2). Lorsqu’une ligne change, une nouvelle ligne est émise, remplaçant logiquement la ligne précédente.

Chemin d’accès de la table : system.lakeflow.job_tasks

Nom de colonne Type de données Description Notes
account_id string ID du compte auquel appartient ce travail
workspace_id string ID de l’espace de travail auquel appartient ce travail
job_id string L'ID de la tâche Unique au sein d’un seul espace de travail
task_key string Clé de référence pour une tâche dans un travail Unique au sein d'une seule mission
depends_on_keys array Les clés des tâches de toutes les dépendances en amont de cette tâche
change_time timestamp Heure de la dernière modification de la tâche Fuseau horaire enregistré en tant que +00:00 (UTC)
delete_time timestamp Heure à laquelle une tâche a été supprimée par l’utilisateur Fuseau horaire enregistré en tant que +00:00 (UTC)
timeout_seconds long Durée du délai d’expiration de la tâche en secondes Non renseigné pour les lignes émises avant début décembre 2025
health_rules array Ensemble de règles d’intégrité définies pour cette tâche de travail Non renseigné pour les lignes émises avant début décembre 2025

Exemple de requête

-- Get the most recent version of a job task
SELECT
  *,
  ROW_NUMBER() OVER(PARTITION BY workspace_id, job_id ORDER BY change_time DESC) as rn
FROM
  system.lakeflow.job_tasks QUALIFY rn=1

Schéma de la table de chronologie d'exécution de la tâche

La table de chronologie d'exécution de la tâche est immuable et terminée au moment où elle est produite.

Chemin d’accès de la table : system.lakeflow.job_run_timeline

Nom de colonne Type de données Description Notes
account_id string ID du compte auquel appartient ce travail
workspace_id string ID de l’espace de travail auquel appartient ce travail
job_id string L'ID de la tâche Cette clé n’est unique qu’au sein d’un seul espace de travail
run_id string L'ID d'exécution de la tâche
period_start_time timestamp L'heure de début de l’exécution ou de la période Les informations sur le fuseau horaire sont enregistrées à la fin de la valeur, où +00:00 représente le fuseau horaire UTC. Pour plus d’informations sur la façon dont Databricks découpe les longues exécutions en intervalles horaires, consultez la logique de découpage de la chronologie.
period_end_time timestamp Heure de fin de l’exécution d'un programme ou de la période Les informations sur le fuseau horaire sont enregistrées à la fin de la valeur, où +00:00 représente le fuseau horaire UTC. Pour plus d’informations sur la façon dont Databricks découpe les longues exécutions en intervalles horaires, consultez la logique de découpage de la chronologie.
trigger_type string Type de déclencheur pouvant déclencher une exécution Pour connaître les valeurs possibles, consultez Valeurs du type de déclencheur
run_type string Type d’exécution du travail Pour connaître les valeurs possibles, consultez Valeurs de type d’exécution
run_name string Nom d’exécution fourni par l’utilisateur associé à cette exécution de travail
compute_ids array Tableau contenant les ID de calcul du travail pour l’exécution du travail parent. Utilisé pour identifier le cluster de travaux utilisé par les types d’exécution WORKFLOW_RUN. Pour d’autres informations de calcul, reportez-vous à la table job_task_run_timeline.
result_state string Résultat de l’exécution du travail Pour les exécutions de plus d’une heure réparties sur plusieurs lignes, cette colonne est remplie uniquement dans la ligne qui représente la fin de l’exécution. Pour connaître les valeurs possibles, consultez les valeurs d’état de résultat.
termination_code string Code de terminaison de l'exécution de la tâche Pour les exécutions de plus d’une heure réparties sur plusieurs lignes, cette colonne est remplie uniquement dans la ligne qui représente la fin de l’exécution. Pour connaître les valeurs possibles, consultez Valeurs de code d’arrêt.
job_parameters map Paramètres au niveau du travail utilisés dans l’exécution du travail Contient uniquement les valeurs de job_parameters. Les champs de paramètre déconseillés (notebook_params, , python_params, python_named_paramsspark_submit_paramset sql_params) ne sont pas inclus.
source_task_run_id string ID de la tâche source exécutée. Utilisez cette colonne pour identifier l’exécution de la tâche qui a déclenché cette exécution de travail. Non renseigné pour les lignes émises avant début décembre 2025
root_task_run_id string ID de la tâche racine exécutée. Utilisez cette colonne pour identifier l’exécution de la tâche qui a déclenché cette exécution de travail. Non renseigné pour les lignes émises avant début décembre 2025
compute array Détails sur les ressources de calcul utilisées dans l’exécution du travail Non renseigné pour les lignes émises avant début décembre 2025
termination_type string Type de fin pour l’exécution de tâche Non renseigné pour les lignes émises avant début décembre 2025
setup_duration_seconds long Durée de la phase d’installation pour l'exécution de la tâche en secondes Non renseigné pour les lignes émises avant début décembre 2025
queue_duration_seconds long Durée passée dans la file d’attente pour l’exécution du travail en secondes Non renseigné pour les lignes émises avant début décembre 2025
run_duration_seconds long Durée totale de l’exécution du travail en secondes Non renseigné pour les lignes émises avant début décembre 2025
cleanup_duration_seconds long Durée de la phase de nettoyage de l’exécution du travail en secondes Non renseigné pour les lignes émises avant début décembre 2025
execution_duration_seconds long Durée de la phase d’exécution du travail en secondes Non renseigné pour les lignes émises avant début décembre 2025

Exemple de requête

-- This query gets the daily job count for a workspace for the last 7 days:
SELECT
  workspace_id,
  COUNT(DISTINCT run_id) as job_count,
  to_date(period_start_time) as date
FROM system.lakeflow.job_run_timeline
WHERE
  period_start_time > CURRENT_TIMESTAMP() - INTERVAL 7 DAYS
GROUP BY ALL

-- This query returns the daily job count for a workspace for the last 7 days, distributed by the outcome of the job run.
SELECT
  workspace_id,
  COUNT(DISTINCT run_id) as job_count,
  result_state,
  to_date(period_start_time) as date
FROM system.lakeflow.job_run_timeline
WHERE
  period_start_time > CURRENT_TIMESTAMP() - INTERVAL 7 DAYS
  AND result_state IS NOT NULL
GROUP BY ALL

-- This query returns the average time of job runs, measured in seconds. The records are organized by job. A top 90 and a 95 percentile column show the average lengths of the job's longest runs.
with job_run_duration as (
    SELECT
        workspace_id,
        job_id,
        run_id,
        CAST(SUM(period_end_time - period_start_time) AS LONG) as duration
    FROM
        system.lakeflow.job_run_timeline
    WHERE
      period_start_time > CURRENT_TIMESTAMP() - INTERVAL 7 DAYS
    GROUP BY ALL
)
SELECT
    t1.workspace_id,
    t1.job_id,
    COUNT(DISTINCT t1.run_id) as runs,
    MEAN(t1.duration) as mean_seconds,
    AVG(t1.duration) as avg_seconds,
    PERCENTILE(t1.duration, 0.9) as p90_seconds,
    PERCENTILE(t1.duration, 0.95) as p95_seconds
FROM
    job_run_duration t1
GROUP BY ALL
ORDER BY mean_seconds DESC
LIMIT 100

-- This query provides a historical runtime for a specific job based on the `run_name` parameter. For the query to work, you must set the `run_name`.
SELECT
  workspace_id,
  run_id,
  SUM(period_end_time - period_start_time) as run_time
FROM system.lakeflow.job_run_timeline
WHERE
  run_type="SUBMIT_RUN"
  AND run_name = :run_name
  AND period_start_time > CURRENT_TIMESTAMP() - INTERVAL 60 DAYS
GROUP BY ALL

-- This query collects a list of retried job runs with the number of retries for each run.
with repaired_runs as (
    SELECT
    workspace_id, job_id, run_id, COUNT(*) - 1 as retries_count
    FROM system.lakeflow.job_run_timeline
    WHERE result_state IS NOT NULL
    GROUP BY ALL
    HAVING retries_count > 0
    )
SELECT
    *
FROM repaired_runs
ORDER BY retries_count DESC
    LIMIT 10;

Schéma de la table de chronologie d'exécution de la tâche de travail

La table de chronologie d'exécution de la tâche de travail est immuable et terminée au moment où elle est produite.

Chemin d’accès de la table : system.lakeflow.job_task_run_timeline

Nom de colonne Type de données Description Notes
account_id string ID du compte auquel appartient ce travail
workspace_id string ID de l’espace de travail auquel appartient ce travail
job_id string L'ID de la tâche Unique au sein d’un seul espace de travail
run_id string L'ID de l’exécution de la tâche.
job_run_id string L'ID d'exécution de la tâche
parent_run_id string L'ID de l’exécution parente.
period_start_time timestamp Heure de début de la tâche ou de la période Les informations sur le fuseau horaire sont enregistrées à la fin de la valeur, où +00:00 représente le fuseau horaire UTC. Pour plus d’informations sur la façon dont Databricks découpe les longues exécutions en intervalles horaires, consultez la logique de découpage de la chronologie.
period_end_time timestamp Heure de fin de la tâche ou de la période Les informations sur le fuseau horaire sont enregistrées à la fin de la valeur, où +00:00 représente le fuseau horaire UTC. Pour plus d’informations sur la façon dont Databricks découpe les longues exécutions en intervalles horaires, consultez la logique de découpage de la chronologie.
task_key string Clé de référence pour une tâche dans un travail Cette clé n’est unique qu’au sein d’un seul travail
compute_ids array Le tableau compute_ids contient des ID de clusters de travaux, de clusters interactifs et d’entrepôts SQL utilisés par la tâche de travail
result_state string Résultat de l’exécution de la tâche de travail Pour les exécutions de tâches supérieures à une heure réparties sur plusieurs lignes, cette colonne est remplie uniquement dans la ligne qui représente la fin de l’exécution. Pour connaître les valeurs possibles, consultez les valeurs d’état de résultat.
termination_code string Code d’arrêt de l’exécution de la tâche Pour les exécutions de tâches supérieures à une heure réparties sur plusieurs lignes, cette colonne est remplie uniquement dans la ligne qui représente la fin de l’exécution. Pour connaître les valeurs possibles, consultez Valeurs de code d’arrêt.
compute array Détails sur les ressources de calcul utilisées dans l’exécution de la tâche de travail Non renseigné pour les lignes émises avant début décembre 2025
termination_type string Type de fin pour l’exécution de la tâche Non renseigné pour les lignes émises avant début décembre 2025
task_parameters map Paramètres de niveau tâche utilisés dans l’exécution de la tâche de travail Non renseigné pour les lignes émises avant début décembre 2025
setup_duration_seconds long Durée de la phase d’installation de la tâche exécutée en secondes Non renseigné pour les lignes émises avant début décembre 2025
cleanup_duration_seconds long Durée de la phase de nettoyage de la tâche exécutée en secondes Non renseigné pour les lignes émises avant début décembre 2025
execution_duration_seconds long Durée de la phase d’exécution de la tâche en secondes Non renseigné pour les lignes émises avant début décembre 2025

Schéma de la table des pipelines

La table pipelines est une table de dimension à variation lente (SCD2). Lorsqu’une ligne change, une nouvelle ligne est émise, remplaçant logiquement la ligne précédente.

Chemin d’accès de la table : system.lakeflow.pipelines

Nom de colonne Type de données Description Notes
account_id string ID du compte auquel appartient ce pipeline
workspace_id string L'ID de l’espace de travail auquel appartient ce pipeline
pipeline_id string L'ID du pipeline Unique au sein d’un seul espace de travail
pipeline_type string Type du pipeline Pour connaître les valeurs possibles, consultez valeurs de type de pipeline
name string Nom fourni par l’utilisateur du pipeline
created_by string E-mail de l’utilisateur ou de l’ID du principal de service qui a créé le pipeline
run_as string E-mail de l’utilisateur ou de l’ID du principal de service dont les autorisations sont utilisées pour l’exécution du pipeline
tags map Balises personnalisées fournies par l’utilisateur associées à ce travail
settings struct Les paramètres du pipeline Afficher les paramètres du pipeline
configuration map Configuration fournie par l’utilisateur du pipeline
change_time timestamp Heure de la dernière modification du pipeline Fuseau horaire enregistré en tant que +00:00 (UTC)
delete_time timestamp Heure à laquelle le pipeline a été supprimé par l’utilisateur Fuseau horaire enregistré en tant que +00:00 (UTC)
create_time timestamp Heure à laquelle un pipeline a été créé par l’utilisateur. Fuseau horaire enregistré en tant que +00:00 (UTC). Non renseigné pour les lignes émises avant début décembre 2025

Exemple de requête

-- Get the most recent version of a pipeline
SELECT
  *,
  ROW_NUMBER() OVER(PARTITION BY workspace_id, pipeline_id ORDER BY change_time DESC) as rn
FROM
  system.lakeflow.pipelines QUALIFY rn=1

-- Enrich billing logs with pipeline metadata
with latest_pipelines AS (
  SELECT
    *,
    ROW_NUMBER() OVER(PARTITION BY workspace_id, pipeline_id ORDER BY change_time DESC) as rn
  FROM
    system.lakeflow.pipelines QUALIFY rn=1
)
SELECT
  usage.*,
  pipelines.*
FROM system.billing.usage
LEFT JOIN latest_pipelines
  ON (usage.workspace_id = pipelines.workspace_id
    AND usage.usage_metadata.dlt_pipeline_id = pipelines.pipeline_id)
WHERE
  usage.usage_metadata.dlt_pipeline_id IS NOT NULL

Schéma de la table des délais de mise à jour du pipeline

La table de mise à jour du calendrier du pipeline est immuable et complète au moment où elle est produite.

Chemin d’accès de la table : system.lakeflow.pipeline_update_timeline

Nom de colonne Type de données Description Notes
account_id string ID du compte auquel appartient ce pipeline
workspace_id string L'ID de l’espace de travail auquel appartient ce pipeline
pipeline_id string L'ID du pipeline Unique au sein d’un seul espace de travail
update_id string L'ID de la mise à jour du pipeline Unique au sein d’un seul espace de travail
update_type string Type de la mise à jour du pipeline Pour connaître les valeurs possibles, consultez les valeurs de type de mise à jour du pipeline
request_id string ID de la requête. Permet de comprendre combien de fois une mise à jour a dû être retentée/redémarrée
run_as_user_name string E-mail de l’utilisateur ou de l’ID du principal de service dont les autorisations sont utilisées pour la mise à jour du pipeline
trigger_type string Ce qui a déclenché cette mise à jour Pour connaître les valeurs possibles, consultez les valeurs de type de déclencheur de pipeline
trigger_details struct Détails du déclencheur du pipeline Pour connaître les valeurs possibles, consultez les détails du type de déclencheur de pipeline
result_state string Résultat final de la mise à jour du pipeline Pour les mises à jour exécutées sur plus de 1 heure réparties sur plusieurs lignes, cette colonne est renseignée uniquement dans la ligne qui représente la fin de la mise à jour. Pour connaître les valeurs possibles, consultez référence des résultats du pipeline.
compute struct Détails sur la ressource de calcul utilisée dans la mise à jour du pipeline
period_start_time timestamp Heure de début de la mise à jour du pipeline ou de l’heure. La valeur est stockée en tant qu’horodatage UTC. Les informations sur le fuseau horaire sont enregistrées à la fin de la valeur, où +00:00 représente le fuseau horaire UTC. Pour plus d’informations sur la façon dont Databricks découpe les longues exécutions en intervalles horaires, consultez la logique de découpage de la chronologie.
period_end_time timestamp Heure de fin de la mise à jour du pipeline ou de l’heure. La valeur est stockée en tant qu’horodatage UTC. Les informations sur le fuseau horaire sont enregistrées à la fin de la valeur, où +00:00 représente le fuseau horaire UTC. Pour plus d’informations sur la façon dont Databricks découpe les longues exécutions en intervalles horaires, consultez la logique de découpage de la chronologie.
refresh_selection array Une liste des tables à mettre à jour sans fullRefresh
full_refresh_selection array Liste des tables à mettre à jour avec fullRefresh
reset_checkpoint_selection array Liste des flux de streaming afin d'effacer les points de contrôle.

Exemple de requête

-- This query gets the daily pipeline update count for a workspace for the last 7 days:
SELECT
    workspace_id,
    COUNT(DISTINCT update_id) as update_count,
    to_date(period_start_time) as date
FROM system.lakeflow.pipeline_update_timeline
WHERE
    period_start_time > CURRENT_TIMESTAMP() - INTERVAL 7 DAYS
GROUP BY ALL

-- This query returns the daily pipeline update count for a workspace for the last 7 days, distributed by the outcome of the pipeline update.
SELECT
    workspace_id,
    COUNT(DISTINCT update_id) as update_count,
    result_state,
    to_date(period_start_time) as date
FROM system.lakeflow.pipeline_update_timeline
WHERE
    period_start_time > CURRENT_TIMESTAMP() - INTERVAL 7 DAYS
  AND result_state IS NOT NULL
GROUP BY ALL

-- This query returns the average time of pipeline updates, measured in seconds. The records are organized by pipeline. A top 90 and a 95 percentile column show the average lengths of the pipeline's longest updates.
with pipeline_update_duration as (
    SELECT
      workspace_id,
      pipeline_id,
      update_id,
      CAST(SUM(period_end_time - period_start_time) AS LONG) as duration
    FROM
        system.lakeflow.pipeline_update_timeline
    WHERE
        period_start_time > CURRENT_TIMESTAMP() - INTERVAL 7 DAYS
    GROUP BY ALL
)
SELECT
    t1.workspace_id,
    t1.pipeline_id,
    COUNT(DISTINCT t1.update_id) as update_count,
    MEAN(t1.duration) as mean_seconds,
    AVG(t1.duration) as avg_seconds,
    PERCENTILE(t1.duration, 0.9) as p90_seconds,
    PERCENTILE(t1.duration, 0.95) as p95_seconds
FROM
    pipeline_update_duration t1
GROUP BY ALL
ORDER BY mean_seconds DESC
    LIMIT 100

modèles de jointure courants

Les sections suivantes fournissent des exemples de requêtes qui mettent en évidence les modèles de jointure couramment utilisés pour les tables système de travaux.

Joindre les tables des travaux et des chronologies d’exécution des travaux

Enrichir l’exécution d’un travail avec un nom de travail

with jobs as (
    SELECT
        *,
        ROW_NUMBER() OVER (PARTITION BY workspace_id, job_id ORDER BY change_time DESC) as rn
    FROM system.lakeflow.jobs QUALIFY rn=1
)
SELECT
    job_run_timeline.*
    jobs.name
FROM system.lakeflow.job_run_timeline
    LEFT JOIN jobs USING (workspace_id, job_id)

Joindre les tables d'utilisation et des chronologies d’exécution des travaux

Enrichir chaque journal de facturation avec les métadonnées d’exécution du travail

La requête suivante enrichit les journaux de facturation avec les métadonnées d’exécution de travaux classiques et sans serveur :

with aggregated_job_runs AS (
  SELECT
    j.workspace_id,
    COALESCE(t.job_id, j.job_id) as origin_job_id,
    COALESCE(t.job_run_id, j.run_id) AS origin_job_run_id,
    j.job_id as billing_job_id,
    j.run_id as billing_run_id,
    CASE WHEN j.root_task_run_id IS NOT NULL THEN true ELSE false END AS is_workflow_run
  FROM
    system.lakeflow.job_run_timeline j
  LEFT JOIN
    system.lakeflow.job_task_run_timeline t
  ON
    j.workspace_id = t.workspace_id
    AND j.root_task_run_id = t.run_id
  WHERE j.period_start_time >= CURRENT_DATE() - INTERVAL 7 DAYS
  GROUP BY ALL
),
billing_logs_enriched AS (
  SELECT
      t2.origin_job_id,
      t2.origin_job_run_id,
      t1.*
  FROM system.billing.usage t1
      INNER JOIN aggregated_job_runs t2
          ON t1.workspace_id = t2.workspace_id
              AND t1.usage_metadata.job_id = t2.billing_job_id
              AND t1.usage_metadata.job_run_id = t2.billing_run_id
  WHERE
      billing_origin_product="JOBS" AND usage_date >= CURRENT_DATE() - INTERVAL 7 DAYS
)
SELECT
  workspace_id,
  origin_job_id AS job_id,
  origin_job_run_id AS run_id,
  sku_name,
  SUM(usage_quantity) as total_usage_quantity,
  SUM(CASE WHEN usage_metadata.job_run_id != origin_job_run_id THEN usage_quantity ELSE 0 END) AS workflow_run_usage_quantity,
  COUNT(DISTINCT usage_metadata.job_run_id) - 1 AS workflow_runs
FROM billing_logs_enriched
GROUP BY ALL

Calculer le coût par exécution du travail

Cette requête se joint à la table système billing.usage pour calculer un coût par exécution de tâche.

with jobs_usage AS (
  SELECT
    *,
    usage_metadata.job_id,
    usage_metadata.job_run_id as run_id,
    identity_metadata.run_as as run_as
  FROM system.billing.usage
  WHERE billing_origin_product="JOBS"
),
jobs_usage_with_usd AS (
  SELECT
    jobs_usage.*,
    usage_quantity * pricing.default as usage_usd
  FROM jobs_usage
    LEFT JOIN system.billing.list_prices pricing ON
      jobs_usage.sku_name = pricing.sku_name
      AND pricing.price_start_time <= jobs_usage.usage_start_time
      AND (pricing.price_end_time >= jobs_usage.usage_start_time OR pricing.price_end_time IS NULL)
      AND pricing.currency_code="USD"
),
jobs_usage_aggregated AS (
  SELECT
    workspace_id,
    job_id,
    run_id,
    FIRST(run_as, TRUE) as run_as,
    sku_name,
    SUM(usage_usd) as usage_usd,
    SUM(usage_quantity) as usage_quantity
  FROM jobs_usage_with_usd
  GROUP BY ALL
)
SELECT
  t1.*,
  MIN(period_start_time) as run_start_time,
  MAX(period_end_time) as run_end_time,
  FIRST(result_state, TRUE) as result_state
FROM jobs_usage_aggregated t1
  LEFT JOIN system.lakeflow.job_run_timeline t2 USING (workspace_id, job_id, run_id)
GROUP BY ALL
ORDER BY usage_usd DESC
LIMIT 100

Obtenir les journaux d’utilisation d’un travail SUBMIT_RUN

SELECT
  *
FROM system.billing.usage
WHERE
  EXISTS (
      SELECT 1
      FROM system.lakeflow.job_run_timeline
      WHERE
        job_run_timeline.job_id = usage_metadata.job_id
        AND run_name = :run_name
        AND workspace_id = :workspace_id
  )

Joindre les tables de chronologie d’exécution de tâches de travaux et de clusters

Enrichir les exécutions de tâches avec les métadonnées des clusters

with clusters as (
    SELECT
        *,
        ROW_NUMBER() OVER (PARTITION BY workspace_id, cluster_id ORDER BY change_time DESC) as rn
    FROM system.compute.clusters QUALIFY rn=1
),
exploded_task_runs AS (
  SELECT
    *,
    EXPLODE(compute_ids) as cluster_id
  FROM system.lakeflow.job_task_run_timeline
  WHERE array_size(compute_ids) > 0
)
SELECT
  *
FROM exploded_task_runs t1
  LEFT JOIN clusters t2
    USING (workspace_id, cluster_id)

Rechercher les travaux en cours d’exécution sur le calcul à usage général

Cette requête s’associe à la table système compute.clusters pour renvoyer les travaux récents exécutés sur le calcul à usage général au lieu du calcul des travaux.

with clusters AS (
  SELECT
    *,
    ROW_NUMBER() OVER(PARTITION BY workspace_id, cluster_id ORDER BY change_time DESC) as rn
  FROM system.compute.clusters
  WHERE cluster_source="UI" OR cluster_source="API"
  QUALIFY rn=1
),
job_tasks_exploded AS (
  SELECT
    workspace_id,
    job_id,
    EXPLODE(compute_ids) as cluster_id
  FROM system.lakeflow.job_task_run_timeline
  WHERE period_start_time >= CURRENT_DATE() - INTERVAL 30 DAY
  GROUP BY ALL
),
all_purpose_cluster_jobs AS (
  SELECT
    t1.*,
    t2.cluster_name,
    t2.owned_by,
    t2.dbr_version
  FROM job_tasks_exploded t1
    INNER JOIN clusters t2 USING (workspace_id, cluster_id)
)
SELECT * FROM all_purpose_cluster_jobs LIMIT 10;

Rechercher des travaux qui n’ont pas été exécutés au cours des 30 derniers jours

Cette requête joint les tables système et lakeflow.jobs les lakeflow.job_run_timeline tables système pour retourner des travaux qui n’ont pas été exécutés au cours des 30 derniers jours.

with latest_jobs AS (
    SELECT
        *,
        ROW_NUMBER() OVER (PARTITION BY workspace_id, job_id ORDER BY change_time DESC) as rn
    FROM system.lakeflow.jobs QUALIFY rn=1
),
latest_not_deleted_jobs AS (
    SELECT
        workspace_id,
        job_id,
        name,
        change_time,
        tags
    FROM latest_jobs WHERE delete_time IS NULL
),
last_seen_job_timestamp AS (
    SELECT
        workspace_id,
        job_id,
        MAX(period_start_time) as last_executed_at
    FROM system.lakeflow.job_run_timeline
    WHERE
        run_type="JOB_RUN"
    GROUP BY ALL
)
SELECT
    t1.workspace_id,
    t1.job_id,
    t1.name,
    t1.change_time as last_modified_at,
    t2.last_executed_at,
    t1.tags
FROM latest_not_deleted_jobs t1
    LEFT JOIN last_seen_job_timestamp t2
        USING (workspace_id, job_id)
WHERE
    (t2.last_executed_at <= CURRENT_DATE() - INTERVAL 30 DAYS) OR (t2.last_executed_at IS NULL)
ORDER BY last_executed_at ASC

Tableau de bord de surveillance des emplois

Le tableau de bord ci-après utilise des tables système pour vous aider à débuter la surveillance de vos travaux et de la santé opérationnelle. Il inclut des cas d’usage courants tels que le suivi des performances des travaux, la surveillance des défaillances et l’utilisation des ressources.

Tableau de bord d’observabilité Lakeflow

Vue d’ensemble des travaux du tableau de bord d’observabilité Lakeflow

Pour plus d’informations sur le téléchargement du tableau de bord, consultez Surveiller les coûts & les performances des travaux avec les tables système

Troubleshooting

La tâche n'est pas consignée dans la table lakeflow.jobs

Si un travail n’est pas visible dans les tables système :

  • Le travail n’a pas été modifié au cours des 365 derniers jours
    • Modifier tous les champs du travail présents dans le schéma afin d'émettre un nouvel enregistrement.
  • Le travail a été créé dans une autre région
  • Création récente d’emploi (décalage dans les données)

Impossible de trouver un travail affiché dans la job_run_timeline table

Toutes les exécutions des travaux ne sont pas visibles partout. Bien que les entrées JOB_RUN apparaissent dans toutes les tables liées aux travaux, les WORKFLOW_RUN (exécutions de workflows de notebooks) sont enregistrées seulement dans job_run_timeline et les SUBMIT_RUN (exécutions soumises une seule fois) sont enregistrées seulement dans les deux tables de chronologie. Ces exécutions ne sont pas renseignées dans d’autres tables système des travaux, comme jobs ou job_tasks.

Consultez le tableau Des types d’exécution ci-dessous pour obtenir une répartition détaillée des emplacements où chaque type d’exécution est visible et accessible.

Exécution de travail non visible dans la table billing.usage

Dans system.billing.usage, le usage_metadata.job_id est renseigné seulement pour les tâches qui s’exécutent sur le calcul des travaux ou sur le calcul serverless.

En outre, les travaux WORKFLOW_RUN n’ont pas leur propre attribution de usage_metadata.job_id ou de usage_metadata.job_run_id dans system.billing.usage. Au lieu de cela, leur utilisation des ressources de calcul est attribuée au bloc-notes parent qui l'a déclenchée. Cela signifie que lorsqu’un notebook lance une exécution de flux de travail, tous les coûts de calcul apparaissent sous l’utilisation du notebook parent, et non en tant que travail de flux de travail distinct.

Pour plus d’informations, consultez la référence d'utilisation des métadonnées .

Calculer le coût d’un travail s'exécutant sur un calculateur polyvalent

Le calcul précis des coûts pour les travaux exécutés sur un calcul dédié n’est pas possible avec une précision de 100 %. Lorsqu’un travail s’exécute sur un calcul interactif (à usage unique), plusieurs charges de travail telles que des notebooks, des requêtes SQL ou d’autres travaux s’exécutent souvent simultanément sur cette même ressource de calcul. Étant donné que les ressources de cluster sont partagées, il n’existe aucun mappage direct 1:1 entre les coûts de calcul et les exécutions de travaux individuelles.

Pour un suivi précis des coûts des travaux, Databricks recommande d’exécuter les travaux sur des calculs de travaux dédiés ou sur un calcul serverless, où le usage_metadata.job_id et le usage_metadata.job_run_id permettent une attribution précise des coûts.

Si vous devez utiliser le calcul à usage unique, vous pouvez :

  • Surveillez l’utilisation globale du cluster et les coûts dans system.billing.usage en fonction de usage_metadata.cluster_id.
  • Suivez séparément les métriques de temps d'exécution des tâches.
  • Considérez que toute estimation des coûts sera approximative en raison des ressources partagées.

Consultez la référence de la métadonnée d'utilisation pour obtenir plus d'informations sur l’attribution des coûts.

Valeurs de référence

La section suivante inclut des références pour sélectionner des colonnes dans des tables liées aux travaux.

Logique de découpage dans les tables de chronologie

Les colonnes period_start_time et period_end_time dans les tables job_run_timeline et job_task_run_timeline enregistrent la période active d’une exécution de travail ou d’une exécution de tâche.

:::warning Important change

À compter du 19 janvier 2026, les nouvelles lignes émises dans les tables de chronologie utilisent une logique de découpage alignée sur l’heure d’horloge. Les lignes existantes resteront inchangées.

Les tranches sont créées à intervalles d'une heure, en fonction de l'heure de démarrage de l'exécution. Par exemple, un travail commençant à 16 h 47 crée des tranches de 16 h 47 à 17 h 47, de 17 h 47 à 18 h 47, et ainsi de suite.

Les tranches s’alignent sur les limites de l’heure de l’horloge. Par exemple, un travail commençant à 16 h 47 créera des tranches de 16 h 47 à 17 h 00, 17 h 00 à 18 h 00, 18 h 00 à 19 h 00, et ainsi de suite. Pour plus d’informations, consultez la logique de découpage alignée sur l’heure de l’horloge .

:::

Chaque ligne enregistre jusqu’à une heure de fonctionnement. Les exécutions qui durent plus d'une heure sont enregistrées sur plusieurs lignes. Ce découpage garantit une granularité horaire pour la surveillance des travaux de longue durée.

Note

Si une exécution n’a jamais commencé, elle est représentée par une ligne où period_start_time égale period_end_time. Cela indique qu’aucun runtime actif n’est activé. Pour comprendre pourquoi l’exécution n’a pas démarré, vérifiez la colonne termination_code.

Travaux courts

Pour les exécutions de moins d'une heure, une seule ligne est émise, avec period_start_time réglé sur l'heure de début de l'exécution et period_end_time sur l'heure de fin de l'exécution.

Par exemple, un travail a démarré à 12h13 UTC et s’est terminé à 12h45 UTC est représenté par une seule ligne :

workspace_id job_id run_id period_start_time period_end_time
6051921418418893 280090038844882 174832649710507 2025-06-08T12:13:01.605 2025-06-08T12:45:06.009

Travaux de longue durée

Pour les exécutions qui durent plus de 1 heure, plusieurs lignes sont émises avec le même run_id, chacune représentant jusqu’à une heure de la durée de l’exécution :

  • La première ligne commence à l’heure de début réelle de l’exécution et se termine à la fin de la première heure d’exécution.
  • Les lignes intermédiaires (le cas échéant) s’étendent sur les fenêtres horaires complètes, alignées sur la tranche period_end_timeprécédente.
  • La dernière ligne commence au début de la tranche précédente et se termine à l'heure de fin effective de l'exécution.

Par exemple, un travail exécuté de 17h47 UTC à 18h28 UTC est segmenté en plusieurs lignes. Chaque ligne représente une heure d’activité, à l’exception de la dernière ligne, qui peut être plus courte :

workspace_id job_id run_id period_start_time period_end_time
6051921418418893 280090038844882 55408597258956 2025-07-01T16:47:55.992 2025-07-01T17:47:56.434
6051921418418893 280090038844882 55408597258956 2025-07-01T17:47:56.434 2025-07-01T18:47:58.876
6051921418418893 280090038844882 55408597258956 2025-07-01T18:47:58.876 2025-07-01T19:47:59.682
6051921418418893 280090038844882 55408597258956 2025-07-01T19:47:59.682 2025-07-01T20:28:29.743

Logique de découpage alignée sur l’heure de l’horloge

Note

Cette logique de découpage s’applique aux nouvelles lignes des tables de chronologie des travaux à compter du 19 janvier 2026.

À compter du 19 janvier 2026, les tables de chronologie utilisent le découpage aligné sur l’heure de l’horloge. Toutes les tranches de temps s’alignent sur les limites d’heure d’horloge standard.

Pour les exécutions de travaux de moins d'une heure qui commencent et se terminent dans la même heure, une seule ligne est générée:

workspace_id job_id run_id period_start_time period_end_time
6051921418418893 280090038844882 174832649710507 2025-12-08T12:13:01.605 2025-12-08T12:45:06.009

Pour les exécutions de travaux qui dépassent les limites d’heure d’horloge, plusieurs lignes sont émises avec des tranches alignées sur les heures d’horloge :

  • La première ligne commence à l’heure de début réelle de l’exécution et se termine à la limite de l’heure d’horloge suivante.
  • Les lignes intermédiaires (le cas échéant) s’étendent sur les heures d’horloge complètes. Par exemple : 14:00-15:00 et 15:00-16:00.
  • La dernière ligne commence à une limite horaire et se termine à l'heure de fin réelle du processus.

Par exemple, une tâche exécutée de 1:25 UTC à 3:40 UTC est découpée en trois lignes :

workspace_id job_id run_id period_start_time period_end_time
6051921418418893 280090038844882 55408597258956 2025-12-01T01:25:00.000 2025-12-01T02:00:00.000
6051921418418893 280090038844882 55408597258956 2025-12-01T02:00:00.000 2025-12-01T03:00:00.000
6051921418418893 280090038844882 55408597258956 2025-12-01T03:00:00.000 2025-12-01T03:40:00.000

Valeurs du type de déclencheur

Dans le job_run_timeline tableau, les valeurs possibles pour la trigger_type colonne sont les suivantes :

  • CONTINUOUS
  • CRON
  • FILE_ARRIVAL
  • ONETIME
  • ONETIME_RETRY

Valeurs du type d’exécution

Dans le job_run_timeline tableau, les valeurs possibles pour la run_type colonne sont les suivantes :

Type Description Emplacement de l’interface utilisateur API Endpoint Tables système
JOB_RUN Exécution de travaux standard Travaux & interface utilisateur des exécutions de travaux /jobs et /jobs/runs endpoints emplois, tâches_de_travail, calendrier_d_exécution_du_travail, calendrier_d_exécution_des_tâches_de_travail
SUBMIT_RUN Exécution unique via POST /jobs/runs/submit Interface utilisateur des exécutions de travaux uniquement /jobs/runs endpoints uniquement chronologie_d'exécution_du_travail, chronologie_de_la_tâche_d'exécution_du_travail
WORKFLOW_RUN Exécution lancée à partir du flux de travail de notebook Non visible Non accessible job_run_timeline

Valeurs d’état de résultat

Dans les tables job_task_run_timeline et job_run_timeline, les valeurs possibles pour la colonne result_state sont les suivantes :

State Description
SUCCEEDED L'opération s'est déroulée avec succès.
FAILED L'exécution s’est terminée avec une erreur.
SKIPPED L’exécution n’a jamais eu lieu car une condition n’a pas été remplie.
CANCELLED L’exécution a été annulée à la demande de l’utilisateur.
TIMED_OUT L’exécution a été arrêtée après avoir atteint le délai d’expiration.
ERROR L'exécution s’est terminée avec une erreur.
BLOCKED L’exécution a été bloquée sur une dépendance en amont.
NULL La ligne représente une tranche intermédiaire d’un travail de longue durée. Le result_state est uniquement disponible dans la ligne correspondant à la fin du processus.

Valeurs de code d’arrêt

Dans les tables job_task_run_timeline et job_run_timeline, les valeurs possibles pour la colonne termination_code sont les suivantes :

Code d’arrêt Description
SUCCESS L'exécution s’est correctement terminée.
CANCELLED L’exécution a été annulée pendant l’exécution par la plateforme Databricks ; par exemple, si la durée maximale d’exécution a été dépassée.
SKIPPED L'exécution n'a pas eu lieu, par exemple si l'exécution de la tâche en amont a échoué, la condition de type de dépendance n'a pas été remplie ou s'il n'y avait aucune tâche réelle à exécuter.
DRIVER_ERROR L’exécution a rencontré une erreur lors de la communication avec le driver Spark.
CLUSTER_ERROR L’exécution a échoué en raison d’une erreur de cluster.
REPOSITORY_CHECKOUT_FAILED Échec de la finalisation de la commande en raison d’une erreur lors de la communication avec le service tiers.
INVALID_CLUSTER_REQUEST L’exécution a échoué, car elle a émis une demande non valide pour démarrer le cluster.
WORKSPACE_RUN_LIMIT_EXCEEDED L’espace de travail a atteint le quota pour le nombre maximal d’exécutions actives simultanées. Envisagez de planifier les tâches sur une période plus longue.
FEATURE_DISABLED L’exécution a échoué, car elle a essayé d’accéder à une fonctionnalité indisponible pour l’espace de travail.
CLUSTER_REQUEST_LIMIT_EXCEEDED Le nombre de demandes de création, de démarrage et de montée en puissance du cluster a dépassé la limite de débit allouée. Envisagez de répartir l'exécution sur une période plus longue.
STORAGE_ACCESS_ERROR L’exécution a échoué en raison d’une erreur lors de l’accès au stockage d’objets blob du client.
RUN_EXECUTION_ERROR L’exécution s'est terminée avec des échecs de tâche.
UNAUTHORIZED_ERROR L’exécution a échoué en raison d’un problème d’autorisation lors de l’accès à une ressource.
LIBRARY_INSTALLATION_ERROR L’exécution a échoué lors de l’installation de la bibliothèque demandée par l’utilisateur. Les causes peuvent inclure, mais ne sont pas limitées à : la bibliothèque fournie n’est pas valide ou les autorisations insuffisantes pour installer la bibliothèque.
MAX_CONCURRENT_RUNS_EXCEEDED L’exécution planifiée dépasse la limite de nombre maximal d’exécutions simultanées définies pour le travail.
MAX_SPARK_CONTEXTS_EXCEEDED L’exécution est planifiée sur un cluster qui a déjà atteint le nombre maximal de contextes qu’il est configuré pour créer.
RESOURCE_NOT_FOUND Une ressource nécessaire pour exécuter l’exécution n’existe pas.
INVALID_RUN_CONFIGURATION L’exécution a échoué en raison d’une configuration non valide.
CLOUD_FAILURE L’exécution a échoué en raison d’un problème de fournisseur de cloud.
MAX_JOB_QUEUE_SIZE_EXCEEDED L’exécution a été ignorée en raison du dépassement de la limite de taille de file d’attente au niveau de la tâche.

Valeurs de type de pipeline

Dans le pipelines tableau, les valeurs possibles pour la pipeline_type colonne sont les suivantes :

Type de pipeline Description
ETL_PIPELINE Pipeline standard
MATERIALIZED_VIEW Vues matérialisées dans Databricks SQL
STREAMING_TABLE Tables de streaming dans Databricks SQL
INGESTION_PIPELINE Ingesteur Lakeflow Connect
INGESTION_GATEWAY Ingesteur de la passerelle Lakeflow Connect

Informations de référence sur les résultats du pipeline

Dans le pipeline_update_timeline tableau, les valeurs possibles pour la result_state colonne sont les suivantes :

  • COMPLETED
  • FAILED
  • CANCELED

Informations de référence sur les paramètres du pipeline

Dans le pipelines tableau, les valeurs possibles pour la settings colonne sont les suivantes :

Value Description
photon Indicateur indiquant s’il faut utiliser Photon pour exécuter le pipeline
development Indicateur indiquant s’il faut exécuter le pipeline en mode de développement ou de production
continuous Un indicateur précisant s’il faut exécuter le pipeline en continu.
serverless Indicateur indiquant s’il faut exécuter le pipeline sur un cluster serverless
edition Édition de produit pour l'exécution du pipeline
channel Version du runtime de pipeline à utiliser

Valeurs de type de mise à jour du pipeline

Dans le pipeline_update_timeline tableau, les valeurs possibles pour la update_type colonne sont les suivantes :

  • API_CALL
  • RETRY_ON_FAILURE
  • SERVICE_UPGRADE
  • SCHEMA_CHANGE
  • JOB_TASK
  • USER_ACTION
  • DBSQL_REQUEST
  • SETTINGS_CHANGE
  • SCHEMA_EXPLORATION
  • INFRASTRUCTURE_MAINTENANCE
  • START_RESOURCES

Valeurs de type de déclencheur de pipeline

Dans le pipeline_update_timeline tableau, les valeurs possibles pour la trigger_type colonne sont les suivantes :

Value Description
job_task Détails du job_task qui a déclenché la mise à jour du pipeline

Détails du type de déclencheur de pipeline

Dans la pipeline_update_timeline table, les valeurs possibles pour le trigger_type.job_task struct sont les suivantes :

Value Description Notes
job_id ID de la tâche qui a déclenché la mise à jour du pipeline La valeur SQL_SCHEDULE indique que ce job_task a été planifié dans le code SQL.
job_task_run_id ID de la tâche de travail exécutée qui a déclenché la mise à jour du pipeline La valeur SQL_SCHEDULE indique que ce job_task a été planifié dans le code SQL.
performance_target Uniquement renseigné pour les mises à jour de pipeline sans serveur Soit PERFORMANCE_OPTIMIZED , soit STANDARD