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
- Nombre quotidien de travaux par espace de travail
- Distribution quotidienne de l’état des travaux par espace de travail
- Vue d’ensemble des travaux les plus longs à exécuter
- Analyse de l’exécution du travail
- Travaux en cours d’exécution sur le calcul à usage général
- Travail retenté s’exécute
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;
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de l’année 2024, nous abandonnerons progressivement le mécanisme de retour d’information GitHub Issues pour le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultez :Soumettre et afficher des commentaires pour