Partage via


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

Important

Cette fonctionnalité est disponible en préversion publique.

Cet article fournit une référence sur l’utilisation workflow des tables système pour surveiller les 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’autres régions, vous devez afficher les tables d’un espace de travail déployé dans cette région.

system.workflow doivent être activées par un administrateur de compte. Vous pouvez les activer à l’aide de l’API SystemSchemas.

Pour obtenir des exemples d’utilisation de ces tables pour l’observabilité des coûts de travail et d’intégrité, consultez Surveiller les coûts de travail avec les tables système.

Tables de travail disponibles

Toutes les tables système liées aux travaux résident dans le system.workflow schéma. Actuellement, le schéma héberge quatre tables :

  • jobs : effectue le suivi de la création, de la suppression et des informations de base des travaux.
  • job_tasks : effectue le suivi de la création, de la suppression et des informations de base des tâches de travail.
  • job_run_timeline : enregistre le début, la fin et l’état résultant des exécutions de travail.
  • job_task_run_timeline : enregistre le début, la fin et l’état résultant des tâches de travail.

 : schéma de la table de travail.

jobs table est une table de dimension à modification lente. Lorsqu’une ligne change, une nouvelle ligne est émise, en remplaçant logiquement la ligne précédente.

La table utilise le schéma suivant :

Nom de la colonne Type de données Description
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 ID de la tâche. Cette clé n’est unique qu’au sein d’un même espace de travail.
name string Nom du travail fourni par l’utilisateur.
creator_id string ID du principal qui a créé le travail.
tags string Balises personnalisées fournies par l’utilisateur associées à ce travail.
change_time timestamp La dernière date où le travail a été modifié.
delete_time timestamp Heure à laquelle le travail a été supprimé par l’utilisateur.
run_as string ID de l’utilisateur ou du principal de service dont les autorisations sont utilisées pour l’exécution du travail.

Schéma de la table des tâches

La table job_tasks est une table de dimension à modification lente. Lorsqu’une ligne change, une nouvelle ligne est émise, en remplaçant logiquement la ligne précédente.

La table utilise le schéma suivant :

Nom de la colonne Type de données Description
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 ID de la tâche. Cette clé n’est unique qu’au sein d’un même espace de travail.
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 même travail.
depends_on_keys tableau Clés de tâche de toutes les dépendances en amont de cette tâche.
change_time timestamp La dernière date où la tâche a été modifiée.
delete_time timestamp Heure à laquelle une tâche a été supprimée par l’utilisateur.

Schéma de la table de chronologie d’exécution de travail

job_run_timeline table est immuable et complète au moment où elle est produite.

La table utilise le schéma suivant :

Nom de la colonne Type de données Description
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 ID de la tâche. Cette clé n’est unique qu’au sein d’un même espace de travail.
run_id string ID de l’exécution du travail.
period_start_time timestamp Heure de début de l’exécution ou de la période.
period_end_time timestamp Heure de fin de l’exécution ou de la période.
trigger_type string Type de déclencheur pouvant déclencher une exécution.
result_state string Résultat de l’exécution du travail. Consultez les valeurs possibles sous cette table.

Les valeurs possibles pour la result_state colonne sont les suivantes :

  • SUCCEEDED
  • FAILED
  • SKIPPED
  • CANCELLED
  • TIMED_OUT
  • ERROR
  • BLOCKED

Les valeurs possibles pour la trigger_type colonne sont les suivantes :

  • CONTINUOUS
  • CRON
  • FILE_ARRIVAL
  • ONETIME
  • ONETIME_RETRY

Schéma de la table de chronologie exécutant la tâche de travail

La job_task_run_timeline table est immuable et complète au moment où elle est produite.

La table utilise le schéma suivant :

Nom de la colonne Type de données Description
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 ID de la tâche. Cette clé n’est unique qu’au sein d’un même espace de travail.
run_id string L’ID de l’exécution de la tâche.
period_start_time timestamp Heure de début de la tâche ou de la période.
period_end_time timestamp Heure de fin de la tâche ou de la période.
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 même travail.
compute_ids tableau Tableau contenant les ID des entrepôts de calcul et des entrepôts SQL de travaux non-serverless utilisés par la tâche de travail.
result_state string Résultat de l’exécution de la tâche de travail.

Les valeurs possibles pour la result_state colonne sont les suivantes :

  • SUCCEEDED
  • FAILED
  • SKIPPED
  • CANCELLED
  • TIMED_OUT
  • ERROR
  • BLOCKED

Exemples de requêtes

Cette section inclut des exemples de requêtes que vous pouvez utiliser pour tirer le meilleur parti des tables de flux de travail.

Obtenir la version la plus récente des travaux

Les tables jobs et job_tasks modifient lentement les tables de dimension, par conséquent, un nouvel enregistrement est créé chaque fois qu’une modification est apportée. Pour obtenir la version la plus récente d’un travail, vous pouvez commander par colonne change_time.

SELECT
  *,
  ROW_NUMBER() OVER(PARTITION BY workspace_id, job_id ORDER BY change_time DESC) as rn
FROM
  system.workflow.jobs QUALIFY rn=1

Nombre de travaux quotidiens par espace de travail

Cette requête obtient le nombre quotidien de travaux par espace de travail pour les 7 derniers jours :

SELECT
  workspace_id,
  COUNT(DISTINCT run_id) as job_count,
  to_date(period_start_time) as date
FROM system.workflow.job_run_timeline
WHERE
  period_start_time > CURRENT_TIMESTAMP() - INTERVAL 7 DAYS
GROUP BY ALL

Distribution quotidienne de l’état des travaux par espace de travail

Cette requête retourne le nombre de travaux quotidiens par espace de travail pour les 7 derniers jours, distribués par le résultat de l’exécution du travail. La requête supprime tous les enregistrements dans lesquels les travaux sont dans un état en attente ou en cours d’exécution.

SELECT
  workspace_id,
  COUNT(DISTINCT run_id) as job_count,
  result_state,
  to_date(period_start_time) as date
FROM system.workflow.job_run_timeline
WHERE
  period_start_time > CURRENT_TIMESTAMP() - INTERVAL 7 DAYS
  AND result_state IS NOT NULL
GROUP BY ALL

Vue d’ensemble des travaux les plus longs à exécuter

Cette requête retourne le temps moyen d’exécutions du travail, mesuré en secondes. Les enregistrements sont organisés par travail. Une colonne de 90 et de 95 centiles supérieurs indique les longueurs moyennes des plus longues exécutions du travail.

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.workflow.job_run_timeline
    WHERE
      period_start_time > CURRENT_TIMESTAMP() - INTERVAL 7 DAYS
    GROUP BY ALL
),
most_recent_jobs as (
  SELECT
    *,
    ROW_NUMBER() OVER(PARTITION BY workspace_id, job_id ORDER BY change_time DESC) as rn
  FROM
    system.workflow.jobs QUALIFY rn=1
)
SELECT
    t1.workspace_id,
    t1.job_id,
    first(t2.name, TRUE) as name,
    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
    LEFT OUTER JOIN most_recent_jobs t2 USING (workspace_id, job_id)
GROUP BY ALL
ORDER BY mean_seconds DESC
LIMIT 100

Analyse de l’exécution du travail

Cette requête fournit un runtime historique pour un travail spécifique. Pour que la requête fonctionne, vous devez définir un workspace_id et job_id.

Vous pouvez également modifier la durée de l’analyse en mettant à jour le nombre de jours dans la INTERVAL 60 DAYS section.

with job_run_duration as (
    SELECT
        workspace_id,
        job_id,
        run_id,
        min(period_start_time) as run_start,
        max(period_start_time) as run_end,
        CAST(SUM(period_end_time - period_start_time) AS LONG) as duration,
        FIRST(result_state, TRUE) as result_state
    FROM
        system.workflow.job_run_timeline
    WHERE
      period_start_time > CURRENT_TIMESTAMP() - INTERVAL 60 DAYS
      AND workspace_id={workspace_id}
      AND job_id={job_id}
    GROUP BY ALL
    ORDER BY run_start DESC
),
most_recent_jobs as (
  SELECT
    *,
    ROW_NUMBER() OVER(PARTITION BY workspace_id, job_id ORDER BY change_time DESC) as rn
  FROM
    system.workflow.jobs QUALIFY rn=1
)
SELECT
    t1.workspace_id,
    t1.job_id,
    t2.name,
    t1.run_id,
    t1.run_start,
    t1.run_end,
    t1.duration,
    t1.result_state
FROM job_run_duration t1
    LEFT OUTER JOIN most_recent_jobs t2 USING (workspace_id, job_id)

Travaux en cours d’exécution sur le calcul à usage général

Cette requête s’associe à la compute.clusters table système 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"
  QUALIFY rn=1
),
job_tasks_exploded AS (
  SELECT
    workspace_id,
    job_id,
    EXPLODE(compute_ids) as cluster_id
  FROM system.workflow.job_task_run_timeline
  WHERE period_start_time >= CURRENT_DATE() - INTERVAL 30 DAY
),
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;

Travail retenté s’exécute

Cette requête collecte une liste d’exécutions de travaux retentées avec le nombre de nouvelles tentatives pour chaque exécution.

with repaired_runs as (
  SELECT
    workspace_id, job_id, run_id, COUNT(*) - 1 as retries_count
  FROM system.workflow.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;