Поделиться через


Справочник по системным таблицам заданий

Внимание

Эта функция предоставляется в режиме общедоступной предварительной версии.

В этой статье содержится ссылка на использование workflow системных таблиц для мониторинга заданий в вашей учетной записи. Эти таблицы включают записи из всех рабочих областей в вашей учетной записи, развернутой в одном облачном регионе. Чтобы просмотреть записи из других регионов, необходимо просмотреть таблицы из рабочей области, развернутой в этом регионе.

system.workflow должен быть включен администратором учетной записи. Его можно включить с помощью API SystemSchemas.

Примеры использования этих таблиц для затрат на задание и наблюдаемость работоспособности см. в разделе "Мониторинг затрат на задание" с помощью системных таблиц.

Доступные таблицы заданий

Все системные таблицы, связанные с заданиями, живут в схеме system.workflow . В настоящее время схема содержит четыре таблицы:

  • jobs: отслеживает создание, удаление и основные сведения о заданиях.
  • job_tasks: отслеживает создание, удаление и основные сведения о задачах задания.
  • job_run_timeline: записывает начальное, конечное и итоговое состояние выполнения задания.
  • job_task_run_timeline: записывает начальное, конечное и итоговое состояние задач задания.

Схема таблицы заданий

Таблица jobs — это медленно изменяющаяся таблица измерений. При изменении строки создается новая строка, логически заменяющая предыдущую.

В таблице используется следующая схема:

Имя столбца Тип данных Description
account_id строка Идентификатор учетной записи, к которой принадлежит это задание.
workspace_id строка Идентификатор рабочей области, к которой принадлежит это задание.
job_id строка ИД задания. Этот ключ является уникальным только в пределах одной рабочей области.
name строка Указанное пользователем имя задания.
creator_id строка Идентификатор участника, создавшего задание.
tags строка Предоставленные пользователем пользовательские теги, связанные с этим заданием.
change_time TIMESTAMP Время последнего изменения задания.
delete_time TIMESTAMP Время удаления задания пользователем.
run_as строка Идентификатор пользователя или субъекта-службы, разрешения которых используются для выполнения задания.

Схема таблицы задач задания

Таблица job_tasks — это медленно изменяющаяся таблица измерений. При изменении строки создается новая строка, логически заменяющая предыдущую.

В таблице используется следующая схема:

Имя столбца Тип данных Description
account_id строка Идентификатор учетной записи, к которой принадлежит это задание.
workspace_id строка Идентификатор рабочей области, к которой принадлежит это задание.
job_id строка ИД задания. Этот ключ является уникальным только в пределах одной рабочей области.
task_key строка Ключ ссылки для задачи в задании. Этот ключ является уникальным только в рамках одного задания.
depends_on_keys array Ключи задач всех вышестоящих зависимостей этой задачи.
change_time TIMESTAMP Время последнего изменения задачи.
delete_time TIMESTAMP Время удаления задачи пользователем.

Схема таблицы временной шкалы запуска задания

Таблица job_run_timeline неизменяема и завершена во время его производства.

В таблице используется следующая схема:

Имя столбца Тип данных Description
account_id строка Идентификатор учетной записи, к которой принадлежит это задание.
workspace_id строка Идентификатор рабочей области, к которой принадлежит это задание.
job_id строка ИД задания. Этот ключ является уникальным только в пределах одной рабочей области.
run_id строка Идентификатор запуска задания.
period_start_time TIMESTAMP Время начала выполнения или периода времени.
period_end_time TIMESTAMP Время окончания выполнения или периода времени.
trigger_type строка Тип триггера, который может вызвать запуск.
result_state строка Результат выполнения задания. См. возможные значения ниже этой таблицы.

Возможные значения для столбца result_state :

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

Возможные значения для столбца trigger_type :

  • CONTINUOUS
  • CRON
  • FILE_ARRIVAL
  • ONETIME
  • ONETIME_RETRY

Схема таблицы временной шкалы выполнения задачи задания

Таблица job_task_run_timeline неизменяема и завершена во время его производства.

В таблице используется следующая схема:

Имя столбца Тип данных Description
account_id строка Идентификатор учетной записи, к которой принадлежит это задание.
workspace_id строка Идентификатор рабочей области, к которой принадлежит это задание.
job_id строка ИД задания. Этот ключ является уникальным только в пределах одной рабочей области.
run_id строка Идентификатор выполнения задачи.
period_start_time TIMESTAMP Время начала задачи или периода времени.
period_end_time TIMESTAMP Время окончания задачи или периода времени.
task_key строка Ключ ссылки для задачи в задании. Этот ключ является уникальным только в рамках одного задания.
compute_ids array Массив, содержащий идентификаторы несерверных заданий вычислений и несерверных хранилищ SQL, используемых задачей задания.
result_state строка Результат выполнения задачи задания.

Возможные значения для столбца result_state :

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

Примеры запросов

В этом разделе содержатся примеры запросов, которые можно использовать для получения максимальной части таблиц рабочих процессов.

Получение последней версии заданий

jobsjob_tasks Так как таблицы и таблицы медленно меняют таблицы измерений, создается новая запись при каждом изменении. Чтобы получить последнюю версию задания, можно заказать по столбцу 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

Число ежедневных заданий по рабочей области

Этот запрос получает количество ежедневных заданий по рабочей области за последние 7 дней:

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

Ежедневное распределение состояния задания по рабочей области

Этот запрос возвращает количество ежедневных заданий по рабочей области за последние 7 дней, распределенных по результатам выполнения задания. Запрос удаляет все записи, в которых задания находятся в состоянии ожидания или выполнения.

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

Обзор самых длительных заданий

Этот запрос возвращает среднее время выполнения задания, измеряемое в секундах. Записи организованы по заданию. Верхний столбец 90 и 95 процентилей показывает среднюю длину самых длинных запусков задания.

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

Анализ выполнения задания

Этот запрос предоставляет историческую среду выполнения для определенного задания. Для работы запроса необходимо задать workspace_id и job_id.

Вы также можете изменить продолжительность анализа, обновив количество дней в 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)

Задания, выполняемые во всех вычислительных ресурсах

Этот запрос присоединяется к системной compute.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
  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;

Повторные запуски заданий

Этот запрос собирает список повторных попыток для каждого запуска.

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;