Compartir vía


Referencia de las tablas del sistema de trabajos

Importante

Esta característica está en versión preliminar pública.

En este artículo se proporciona una referencia de cómo usar las tablas del sistema workflow para supervisar los trabajos de su cuenta. Estas tablas incluyen registros de todas las áreas de trabajo de la cuenta implementadas en la misma región de nube. Para ver registros de otras regiones, debe ver las tablas de un área de trabajo implementada en esa región.

system.workflow debe estar habilitado por un administrador de cuenta. Puede habilitarlo mediante la API SystemSchemas.

Para obtener ejemplos sobre cómo usar estas tablas para la observabilidad de los costes y el estado del trabajo, consulte Supervisión de los costes de trabajo con tablas del sistema.

Tablas de trabajos disponibles

Todas las tablas del sistema relacionadas con trabajos residen en el esquema system.workflow. Actualmente, el esquema hospeda cuatro tablas:

  • jobs: realiza un seguimiento de la creación, eliminación e información básica de los trabajos.
  • job_tasks: realiza un seguimiento de la creación, eliminación e información básica de las tareas de trabajo.
  • job_run_timeline: registra el estado inicial, final y resultante de las ejecuciones de trabajos.
  • job_task_run_timeline: registra el estado inicial, final y resultante de las tareas de trabajo.

Esquema de tabla de trabajos

La tabla jobs es una tabla de dimensiones de variación lenta. Cuando cambia una fila, se emite una nueva fila, reemplazando lógicamente a la anterior.

La tabla usa el siguiente esquema:

Nombre de la columna Tipo de datos Descripción
account_id string Id. de la cuenta a la que pertenece este trabajo.
workspace_id string Id. del área de trabajo a la que pertenece este trabajo.
job_id string El id. de trabajo. Esta clave solo es única en una sola área de trabajo.
name string Nombre del trabajo que proporciona el usuario.
creator_id string Id. de la entidad de seguridad que ha creado el trabajo.
tags string Etiquetas personalizadas proporcionadas por el usuario asociadas a este trabajo.
change_time timestamp Hora a la que se modificó el trabajo por última vez.
delete_time timestamp Hora a la que el usuario eliminó el trabajo.
run_as string Id. del usuario o la entidad de servicio cuyos permisos se utilizan para la ejecución del trabajo.

Esquema de tabla de tareas de trabajo

La tabla job_tasks es una tabla de dimensiones de variación lenta. Cuando cambia una fila, se emite una nueva fila, reemplazando lógicamente a la anterior.

La tabla usa el siguiente esquema:

Nombre de la columna Tipo de datos Descripción
account_id string Id. de la cuenta a la que pertenece este trabajo.
workspace_id string Id. del área de trabajo a la que pertenece este trabajo.
job_id string El id. de trabajo. Esta clave solo es única en una sola área de trabajo.
task_key string Clave de referencia de una tarea de un trabajo. Esta clave solo es única en un solo trabajo.
depends_on_keys array Claves de tarea de todas las dependencias ascendentes de esta tarea.
change_time timestamp Hora a la que se modificó la tarea por última vez.
delete_time timestamp Hora a la que el usuario eliminó una tarea.

Esquema de tabla de escala de tiempo de ejecución de trabajo

La tabla job_run_timeline es inmutable y está completa en el momento en que se genera.

La tabla usa el siguiente esquema:

Nombre de la columna Tipo de datos Descripción
account_id string Id. de la cuenta a la que pertenece este trabajo.
workspace_id string Id. del área de trabajo a la que pertenece este trabajo.
job_id string El id. de trabajo. Esta clave solo es única en una sola área de trabajo.
run_id string Id. de la ejecución del trabajo.
period_start_time timestamp Hora de inicio de la ejecución o del período de tiempo.
period_end_time timestamp Hora de finalización de la ejecución o del período de tiempo.
trigger_type string Tipo de desencadenador de una ejecución.
result_state string Resultado de la ejecución del trabajo. Vea los valores posibles después de esta tabla.

Los valores posibles para la columna result_state son:

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

Los valores posibles para la columna trigger_type son:

  • CONTINUOUS
  • CRON
  • FILE_ARRIVAL
  • ONETIME
  • ONETIME_RETRY

Esquema de tabla de escala de tiempo de ejecución de tareas de trabajo

La tabla job_task_run_timeline es inmutable y está completa en el momento en que se genera.

La tabla usa el siguiente esquema:

Nombre de la columna Tipo de datos Descripción
account_id string Id. de la cuenta a la que pertenece este trabajo.
workspace_id string Id. del área de trabajo a la que pertenece este trabajo.
job_id string El id. de trabajo. Esta clave solo es única en una sola área de trabajo.
run_id string Identificador de la ejecución de la tarea.
period_start_time timestamp Hora de inicio de la tarea o del período de tiempo.
period_end_time timestamp Hora de finalización de la tarea o del período de tiempo.
task_key string Clave de referencia de una tarea de un trabajo. Esta clave solo es única en un solo trabajo.
compute_ids array Matriz que contiene los identificadores de los procesos de trabajos que no son sin servidor y los almacenes de SQL que no son sin servidor que usa la tarea de trabajo.
result_state string Resultado de la ejecución de la tarea de trabajo.

Los valores posibles para la columna result_state son:

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

Consultas de ejemplo

En esta sección se incluyen consultas de ejemplo que puede usar para sacar el máximo partido a las tablas de flujos de trabajo.

Obtención de la versión más reciente de los trabajos

Dado que las tablas jobs y job_tasks son tablas de dimensiones de variación lenta, se crea un nuevo registro cada vez que se realiza un cambio. Para obtener la versión más reciente de un trabajo, puede ordenar por la columna 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

Recuento diario de los trabajos por área de trabajo

Esta consulta obtiene el recuento diario de trabajos por área de trabajo de los últimos 7 días:

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

Distribución diaria del estado de trabajo por área de trabajo

Esta consulta devuelve el recuento diario de trabajos por área de trabajo de los últimos 7 días, distribuido por el resultado de la ejecución del trabajo. La consulta quita los registros en los que los trabajos estén en estado pendiente o en ejecución.

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

Introducción a los trabajos de ejecución más prolongada

Esta consulta devuelve el tiempo medio de ejecución de los trabajos, medido en segundos. Los registros se organizan por trabajo. Las columnas de límite de percentil 90 y 95 muestran las longitudes medias de las ejecuciones más largas del trabajo.

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

Análisis de ejecución de trabajos

Esta consulta proporciona un tiempo de ejecución histórico para un trabajo específico. Para que la consulta funcione, debe establecer los valores workspace_id y job_id.

También puede editar la duración del tiempo de análisis si actualiza la cantidad de días en la sección INTERVAL 60 DAYS.

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)

Trabajos que se ejecutan en un proceso multiuso

Esta consulta se une a la de la tabla del sistema compute.clusters para devolver los trabajos recientes que se ejecutan en proceso multiuso en lugar de proceso de trabajos.

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;

Ejecuciones de trabajos reintentados

Esta consulta recopila una lista de ejecuciones de trabajos reintentados con el número de reintentos de cada ejecución.

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;