Condividi tramite


Informazioni di riferimento sulla tabella di sistema dei processi

Importante

Questa funzionalità è disponibile in anteprima pubblica.

Questo articolo fornisce informazioni di riferimento su come usare le tabelle di sistema per monitorare i workflow processi nell'account. Queste tabelle includono i record di tutte le aree di lavoro nell'account distribuito all'interno della stessa area cloud. Per visualizzare i record di altre aree, è necessario visualizzare le tabelle da un'area di lavoro distribuita in tale area.

system.workflowdeve essere abilitato da un amministratore dell'account. È possibile abilitarlo usando l'API SystemSchemas.

Per esempi sull'uso di queste tabelle per i costi dei processi e l'osservabilità dell'integrità, vedere Monitorare i costi dei processi con le tabelle di sistema.

Tabelle dei processi disponibili

Tutte le tabelle di sistema correlate ai processi si trovano nello system.workflow schema. Attualmente, lo schema ospita quattro tabelle:

  • jobs: tiene traccia della creazione, dell'eliminazione e delle informazioni di base dei processi.
  • job_tasks: tiene traccia della creazione, dell'eliminazione e delle informazioni di base delle attività di processo.
  • job_run_timeline: registra l'avvio, la fine e lo stato risultante delle esecuzioni del processo.
  • job_task_run_timeline: registra l'inizio, la fine e lo stato risultante delle attività del processo.

Schema della tabella dei processi

La jobs tabella è una tabella delle dimensioni a modifica lenta. Quando una riga viene modificata, viene generata una nuova riga, sostituendo logicamente quella precedente.

La tabella usa lo schema seguente:

Nome colonna Tipo di dati Descrizione
account_id stringa ID dell'account a cui appartiene il processo.
workspace_id string ID dell'area di lavoro a cui appartiene il processo.
job_id string L'ID della mansione. Questa chiave è univoca solo all'interno di una singola area di lavoro.
name string Nome fornito dall'utente del processo.
creator_id string ID dell'entità che ha creato il processo.
tags string Tag personalizzati forniti dall'utente associati a questo processo.
change_time timestamp Ora dell'ultima modifica del processo.
delete_time timestamp Ora in cui il processo è stato eliminato dall'utente.
run_as string ID dell'utente o dell'entità servizio le cui autorizzazioni vengono usate per l'esecuzione del processo.

Schema della tabella delle attività processo

La job_tasks tabella è una tabella delle dimensioni a modifica lenta. Quando una riga viene modificata, viene generata una nuova riga, sostituendo logicamente quella precedente.

La tabella usa lo schema seguente:

Nome colonna Tipo di dati Descrizione
account_id stringa ID dell'account a cui appartiene il processo.
workspace_id string ID dell'area di lavoro a cui appartiene il processo.
job_id string L'ID della mansione. Questa chiave è univoca solo all'interno di una singola area di lavoro.
task_key string Chiave di riferimento per un'attività in un processo. Questa chiave è univoca solo all'interno di un singolo processo.
depends_on_keys array Chiavi di attività di tutte le dipendenze upstream di questa attività.
change_time timestamp Ora dell'ultima modifica dell'attività.
delete_time timestamp Ora in cui un'attività è stata eliminata dall'utente.

Schema della tabella sequenza temporale dell'esecuzione del processo

La job_run_timeline tabella non è modificabile e viene completata al momento della produzione.

La tabella usa lo schema seguente:

Nome colonna Tipo di dati Descrizione
account_id stringa ID dell'account a cui appartiene il processo.
workspace_id string ID dell'area di lavoro a cui appartiene il processo.
job_id string L'ID della mansione. Questa chiave è univoca solo all'interno di una singola area di lavoro.
run_id string ID dell'esecuzione del processo.
period_start_time timestamp Ora di inizio per l'esecuzione o per il periodo di tempo.
period_end_time timestamp Ora di fine per l'esecuzione o per il periodo di tempo.
trigger_type string Tipo di trigger che può generare un'esecuzione.
result_state string Risultato dell'esecuzione del processo. Vedere i valori possibili sotto questa tabella.

I valori possibili per la result_state colonna sono:

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

I valori possibili per la trigger_type colonna sono:

  • CONTINUOUS
  • CRON
  • FILE_ARRIVAL
  • ONETIME
  • ONETIME_RETRY

Schema della tabella sequenza temporale esecuzione attività processo

La job_task_run_timeline tabella non è modificabile e viene completata al momento della produzione.

La tabella usa lo schema seguente:

Nome colonna Tipo di dati Descrizione
account_id stringa ID dell'account a cui appartiene il processo.
workspace_id string ID dell'area di lavoro a cui appartiene il processo.
job_id string L'ID della mansione. Questa chiave è univoca solo all'interno di una singola area di lavoro.
run_id string ID dell'esecuzione dell'attività.
period_start_time timestamp Ora di inizio per l'attività o per il periodo di tempo.
period_end_time timestamp Ora di fine per l'attività o per il periodo di tempo.
task_key string Chiave di riferimento per un'attività in un processo. Questa chiave è univoca solo all'interno di un singolo processo.
compute_ids array Matrice contenente gli ID dei processi non serverless di calcolo e dei warehouse SQL non serverless usati dall'attività di processo.
result_state string Risultato dell'esecuzione dell'attività di processo.

I valori possibili per la result_state colonna sono:

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

Query di esempio

Questa sezione include query di esempio che è possibile usare per sfruttare al meglio le tabelle del flusso di lavoro.

Ottenere la versione più recente dei processi

Poiché le jobs tabelle e job_tasks cambiano lentamente le tabelle delle dimensioni, viene creato un nuovo record ogni volta che viene apportata una modifica. Per ottenere la versione più recente di un processo, è possibile ordinare in base alla change_time colonna .

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

Numero di processi giornalieri per area di lavoro

Questa query ottiene il numero di processi giornalieri per area di lavoro per gli ultimi 7 giorni:

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

Distribuzione giornaliera dello stato del processo in base all'area di lavoro

Questa query restituisce il conteggio giornaliero dei processi per area di lavoro per gli ultimi 7 giorni, distribuiti dal risultato dell'esecuzione del processo. La query rimuove tutti i record in cui i processi si trovano in uno stato in sospeso o in esecuzione.

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

Panoramica dei processi con esecuzione più lunga

Questa query restituisce il tempo medio di esecuzione del processo, misurato in secondi. I record sono organizzati per processo. Una colonna top 90 e 95 percentile mostra le lunghezze medie delle esecuzioni più lunghe del processo.

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

Analisi dell'esecuzione del processo

Questa query fornisce un runtime cronologico per un processo specifico. Affinché la query funzioni, è necessario impostare un workspace_id e job_id.

È anche possibile modificare l'intervallo di tempo per l'analisi aggiornando la quantità di giorni nella INTERVAL 60 DAYS sezione .

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)

Processi in esecuzione in un ambiente di calcolo all-purpose

Questa query viene unita alla compute.clusters tabella di sistema per restituire i processi recenti in esecuzione in un ambiente di calcolo all-purpose anziché nell'ambiente di calcolo dei processi.

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

Esecuzioni di processi ripetuti

Questa query raccoglie un elenco di esecuzioni di processi ripetuti con il numero di tentativi per ogni esecuzione.

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;