Referência de tabelas do sistema de jobs

Observação

O esquema lakeflow era conhecido anteriormente como workflow. O conteúdo dos dois esquemas é idêntico. Para tornar o esquema lakeflow visível, você deve habilitá-lo separadamente.

Este artigo é uma referência sobre como usar as tabelas do sistema lakeflow para monitorar o trabalho em seu site account. Essas tabelas incluem registros de todos os espaços de trabalho do seu account implantados na mesma região de nuvem. Para ver os registros de outra região, é preciso acessar view as tabelas de um workspace implantado nessa região.

Requisitos

Tabelas de empregos disponíveis

Todas as tabelas do sistema relacionadas a jobs estão no esquema system.lakeflow. No momento, o esquema hospeda quatro tabelas:

Tabela

Descrição

Suporta transmissão

Período de retenção gratuito

Inclui dados globais ou regionais

Trabalho (visualização pública)

Rastreia todos os trabalhos criados no account

Sim

365 dias

Regional

Trabalho (visualização pública)

Rastreia todas as tarefas de trabalho que são executadas no account

Sim

365 dias

Regional

Trabalho (visualização pública)

Rastreia a execução do trabalho e os metadados relacionados

Sim

365 dias

Regional

Trabalho (visualização pública)

Rastreia a execução da tarefa do trabalho e os metadados relacionados

Sim

365 dias

Regional

Referência detalhada do esquema

As seções a seguir fornecem referências de esquema para cada uma das tabelas do sistema relacionadas ao Job.

Esquema da tabela de trabalhos

A tabela jobs é uma tabela de dimensões que mudam lentamente (SCD) (SCD2). Quando uma linha muda, uma nova linha é emitida, substituindo logicamente a anterior.

Caminho da tabela: system.lakeflow.jobs

Nome da coluna

Tipo de dados

Descrição

Notas

account_id

string

O ID do site account ao qual esse trabalho pertence

workspace_id

string

O ID do site workspace ao qual esse trabalho pertence

job_id

string

A ID do trabalho

Somente exclusivo em um único workspace

name

string

O nome do trabalho fornecido pelo usuário

description

string

A descrição do trabalho fornecida pelo usuário

Não preenchido para linhas emitidas antes do final de agosto de 2024

creator_id

string

O ID do diretor que criou o trabalho

tags

string

As tags personalizadas fornecidas pelo usuário associadas a esse trabalho

change_time

carimbo de data/hora

A hora em que o trabalho foi modificado pela última vez

Fuso horário registrado como + 00:00 (UTC)

delete_time

carimbo de data/hora

A hora em que o trabalho foi excluído pelo usuário

Fuso horário registrado como + 00:00 (UTC)

run_as

string

O ID do usuário ou da entidade de serviço cujas permissões são usadas para a execução do trabalho

Exemplo de consulta

-- Get the most recent version of a job
SELECT
  *,
  ROW_NUMBER() OVER(PARTITION BY workspace_id, job_id ORDER BY change_time DESC) as rn
FROM
  system.lakeflow.jobs QUALIFY rn=1

Esquema da tabela de tarefas de trabalho

A tabela de tarefas de trabalho é uma tabela de dimensões que mudam lentamente (SCD) (SCD2). Quando uma linha muda, uma nova linha é emitida, substituindo logicamente a anterior.

Caminho da tabela: system.lakeflow.job_tasks

Nome da coluna

Tipo de dados

Descrição

Notas

account_id

string

O ID do site account ao qual esse trabalho pertence

workspace_id

string

O ID do site workspace ao qual esse trabalho pertence

job_id

string

A ID do trabalho

Somente exclusivo em um único workspace

task_key

string

A referência key para uma tarefa em um trabalho

Somente exclusivo em um único trabalho

depends_on_keys

matriz

A chave da tarefa de todas as dependências upstream dessa tarefa

change_time

carimbo de data/hora

A hora em que a tarefa foi modificada pela última vez

Fuso horário registrado como + 00:00 (UTC)

delete_time

carimbo de data/hora

A hora em que uma tarefa foi excluída pelo usuário

Fuso horário registrado como + 00:00 (UTC)

Exemplo de consulta

-- Get the most recent version of a job task
SELECT
  *,
  ROW_NUMBER() OVER(PARTITION BY workspace_id, job_id ORDER BY change_time DESC) as rn
FROM
  system.lakeflow.job_tasks QUALIFY rn=1

Esquema de tabela de linha do tempo de execução de jobs

A tabela de cronograma de execução do trabalho é imutável e completa no momento em que é produzida.

Caminho da tabela: system.lakeflow.job_run_timeline

Nome da coluna

Tipo de dados

Descrição

Notas

account_id

string

O ID do site account ao qual esse trabalho pertence

workspace_id

string

O ID do site workspace ao qual esse trabalho pertence

job_id

string

A ID do trabalho

Este key é exclusivo apenas em um único workspace

run_id

string

O ID da execução do trabalho

period_start_time

carimbo de data/hora

A hora de início da execução ou do período de tempo

As informações de fuso horário são registradas no final do valor com +00:00 representando UTC

period_end_time

carimbo de data/hora

A hora de término da execução ou do período de tempo

As informações de fuso horário são registradas no final do valor com +00:00 representando UTC

trigger_type

string

O tipo de gatilho que pode disparar uma execução

Para valores possíveis, consulte Valores do tipo de gatilho

run_type

string

O tipo de execução do trabalho

Para ver os valores possíveis, consulte Valores de tipo de execução

run_name

string

O nome da execução fornecido pelo usuário associado a essa execução do Job

compute_ids

matriz

Matriz contendo os IDs do trabalho compute para a execução do trabalho pai

Use para identificar o agrupamento de trabalhos usado pelos tipos de execução SUBMIT_RUN e WORKFLOW_RUN. Para outras compute informações, consulte a tabela job_task_run_timeline.

Não preenchido para linhas emitidas antes do final de agosto de 2024

result_state

string

O resultado da execução do trabalho

Para valores possíveis, consulte Valores do estado do resultado

termination_code

string

O código de encerramento da execução do trabalho

Para valores possíveis, consulte Valores do código de terminação.

Não preenchido para linhas emitidas antes do final de agosto de 2024

job_parameters

map

Os parâmetros de nível de trabalho usados na execução do trabalho

As configurações obsoletas do Notebook não estão incluídas nesse campo.

Não preenchido para linhas emitidas antes do final de agosto de 2024

Exemplo de consulta

-- This query gets the daily job count for a workspace for the last 7 days:
SELECT
  workspace_id,
  COUNT(DISTINCT run_id) as job_count,
  to_date(period_start_time) as date
FROM system.lakeflow.job_run_timeline
WHERE
  period_start_time > CURRENT_TIMESTAMP() - INTERVAL 7 DAYS
GROUP BY ALL

-- This query returns the daily job count for a workspace for the last 7 days, distributed by the outcome of the job run.
SELECT
  workspace_id,
  COUNT(DISTINCT run_id) as job_count,
  result_state,
  to_date(period_start_time) as date
FROM system.lakeflow.job_run_timeline
WHERE
  period_start_time > CURRENT_TIMESTAMP() - INTERVAL 7 DAYS
  AND result_state IS NOT NULL
GROUP BY ALL

-- This query returns the average time of job runs, measured in seconds. The records are organized by job. A top 90 and a 95 percentile column show the average lengths of the job's longest runs.
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.lakeflow.job_run_timeline
    WHERE
      period_start_time > CURRENT_TIMESTAMP() - INTERVAL 7 DAYS
    GROUP BY ALL
)
SELECT
    t1.workspace_id,
    t1.job_id,
    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
GROUP BY ALL
ORDER BY mean_seconds DESC
LIMIT 100

-- This query provides a historical runtime for a specific job based on the `run_name` parameter. For the query to work, you must set the `run_name`.
SELECT
  workspace_id,
  run_id,
  SUM(period_end_time - period_start_time) as run_time
FROM system.lakeflow.job_run_timeline
WHERE
  run_type="SUBMIT_RUN"
  AND run_name={run_name}
  AND period_start_time > CURRENT_TIMESTAMP() - INTERVAL 60 DAYS
GROUP BY ALL

-- This query collects a list of retried job runs with the number of retries for each run.
with repaired_runs as (
    SELECT
    workspace_id, job_id, run_id, COUNT(*) - 1 as retries_count
    FROM system.lakeflow.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;

Esquema de tabela de linha do tempo de execução de tarefas de jobs

A tabela de cronograma de execução da tarefa de trabalho é imutável e completa no momento em que é produzida.

Caminho da tabela: system.lakeflow.job_task_run_timeline

Nome da coluna

Tipo de dados

Descrição

Notas

account_id

string

O ID do site account ao qual esse trabalho pertence

workspace_id

string

O ID do site workspace ao qual esse trabalho pertence

job_id

string

A ID do trabalho

Somente exclusivo em um único workspace

run_id

string

A ID da execução da tarefa

job_run_id

string

O ID da execução do trabalho

Não preenchido para linhas emitidas antes do final de agosto de 2024

parent_run_id

string

A ID da execução principal

Não preenchido para linhas emitidas antes do final de agosto de 2024

period_start_time

carimbo de data/hora

O tempo de início da tarefa ou do período de tempo

As informações de fuso horário são registradas no final do valor com +00:00 representando UTC

period_end_time

carimbo de data/hora

A hora de término da tarefa ou do período de tempo

As informações de fuso horário são registradas no final do valor com +00:00 representando UTC

task_key

string

A referência key para uma tarefa em um trabalho

Este endereço key é exclusivo apenas em um único trabalho

compute_ids

matriz

A matriz de computação contém IDs de clustering de trabalho, clustering interativo e armazém SQL usados pela tarefa de trabalho.

result_state

string

O resultado da execução do Job tarefa

Para valores possíveis, consulte Valores do estado do resultado

termination_code

string

O código de encerramento da execução da tarefa

Para valores possíveis, consulte Valores do código de terminação.

Não preenchido para linhas emitidas antes do final de agosto de 2024

Padrões comuns de junção

As seções a seguir fornecem exemplos de consultas que destacam os padrões join comumente usados para as tabelas do sistema Job.

unir as tabelas de linha do tempo do Job e da execução do Job

Enriquecer a execução do trabalho com um nome de trabalho

with jobs as (
    SELECT
        *,
        ROW_NUMBER() OVER (PARTITION BY workspace_id, job_id ORDER BY change_time DESC) as rn
    FROM system.lakeflow.jobs QUALIFY rn=1
)
SELECT
    job_run_timeline.*
    jobs.name
FROM system.lakeflow.job_run_timeline
    LEFT JOIN jobs USING (workspace_id, job_id)

Enriquecer o uso com um nome de trabalho

with jobs as (
  SELECT
    *,
    ROW_NUMBER() OVER (PARTITION BY workspace_id, job_id ORDER BY change_time DESC) as rn
  FROM system.lakeflow.jobs QUALIFY rn=1
)
SELECT
  usage.*,
  coalesce(usage_metadata.job_name, jobs.name) as job_name
FROM system.billing.usage
  LEFT JOIN jobs ON usage.workspace_id=jobs.workspace_id AND usage.usage_metadata.job_id=jobs.job_id
WHERE
  billing_origin_product="JOBS"

unir as tabelas de linha do tempo e de uso da execução do trabalho

Enriquecer cada faturamento log com metadados de execução de trabalho

SELECT
    t1.*,
    t2.*
FROM system.billing.usage t1
    LEFT JOIN system.lakeflow.job_run_timeline t2
        ON t1.workspace_id = t2.workspace_id
            AND t1.usage_metadata.job_id = t2.job_id
            AND t1.usage_metadata.job_run_id = t2.run_id
            AND t1.usage_start_time >= date_trunc("Hour", t2.period_start_time)
            AND t1.usage_start_time < date_trunc("Hour", t2.period_end_time) + INTERVAL 1 HOUR
WHERE
    billing_origin_product="JOBS"

Calcular o custo por execução do trabalho

Essa consulta se junta à tabela do sistema billing.usage para calcular um custo por execução de trabalho.

with jobs_usage AS (
  SELECT
    *,
    usage_metadata.job_id,
    usage_metadata.job_run_id as run_id,
    identity_metadata.run_as as run_as
  FROM system.billing.usage
  WHERE billing_origin_product="JOBS"
),
jobs_usage_with_usd AS (
  SELECT
    jobs_usage.*,
    usage_quantity * pricing.default as usage_usd
  FROM jobs_usage
    LEFT JOIN system.billing.list_prices pricing ON
      jobs_usage.sku_name = pricing.sku_name
      AND pricing.price_start_time <= jobs_usage.usage_start_time
      AND (pricing.price_end_time >= jobs_usage.usage_start_time OR pricing.price_end_time IS NULL)
      AND pricing.currency_code="USD"
),
jobs_usage_aggregated AS (
  SELECT
    workspace_id,
    job_id,
    run_id,
    FIRST(run_as, TRUE) as run_as,
    sku_name,
    SUM(usage_usd) as usage_usd,
    SUM(usage_quantity) as usage_quantity
  FROM jobs_usage_with_usd
  GROUP BY ALL
)
SELECT
  t1.*,
  MIN(period_start_time) as run_start_time,
  MAX(period_end_time) as run_end_time,
  FIRST(result_state, TRUE) as result_state
FROM jobs_usage_aggregated t1
  LEFT JOIN system.lakeflow.job_run_timeline t2 USING (workspace_id, job_id, run_id)
GROUP BY ALL
ORDER BY usage_usd DESC
LIMIT 100

juntar as tabelas de cronograma e clustering do Job tarefa execução

Enriquecer a execução da tarefa do trabalho com metadados de clustering

with clusters as (
    SELECT
        *,
        ROW_NUMBER() OVER (PARTITION BY workspace_id, cluster_id ORDER BY change_time DESC) as rn
    FROM system.compute.clusters QUALIFY rn=1
),
exploded_task_runs AS (
  SELECT
    *,
    EXPLODE(compute_ids) as cluster_id
  FROM system.lakeflow.job_task_run_timeline
  WHERE array_size(compute_ids) > 0
)
SELECT
  exploded_task_runs.*,
  clusters.*
FROM exploded_task_runs t1
  LEFT JOIN clusters t2
    USING (workspace_id, cluster_id)

Encontrar trabalho em execução em todas as finalidades compute

Essa consulta se une à tabela do sistema compute.clusters para retornar jobs recentes que estejam em execução em compute para múltiplas finalidades em vez de compute de jobs.

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

Painel de monitoramento de trabalhos

O painel a seguir usa tabelas do sistema para ajudar o senhor a começar a monitorar o trabalho e a integridade operacional. Ele inclui casos de uso comuns, como acompanhamento do desempenho do trabalho, monitoramento de falhas e utilização de recursos.

Dashboard de observabilidade de custos de jobs

Para obter informações sobre downloads do painel, consulte Monitorar custos do trabalho & desempenho com tabelas do sistema

Solução de problemas

Job não está registrado na tabela lakeflow.jobs

Se um trabalho não estiver visível nas tabelas do sistema:

  • O trabalho não foi modificado nos últimos 365 dias

  • O trabalho foi criado em uma região diferente

  • Criação recente de empregos (defasagem da tabela)

Não é possível encontrar um trabalho visto na tabela job_run_timeline

Nem todos os trabalhos executados são visíveis em todos os lugares. Embora as entradas em JOB_RUN apareçam em todas as tabelas relacionadas ao trabalho, tanto WORKFLOW_RUN (Notebook fluxo de trabalho execução) quanto SUBMIT_RUN (one-time submitted execução) são registradas apenas na tabela job_run_timeline. Essas execuções não são preenchidas em outras tabelas do sistema de trabalho, como jobs ou job_tasks.

Consulte a tabela de tipos de execução abaixo para obter uma análise detalhada de onde cada tipo de execução é visível e acessível.

Job execução não visível na tabela billing.usage

Em system.billing.usage, o usage_metadata.job_id só é preenchido para o trabalho que é executado no Job compute ou serverless compute.

Além disso, o WORKFLOW_RUN Job não tem sua própria atribuição usage_metadata.job_id ou usage_metadata.job_run_id em system.billing.usage. Em vez disso, o uso do compute é atribuído ao Notebook pai que o acionou. Isso significa que quando um Notebook inicia a execução de um fluxo de trabalho, todos os custos do compute aparecem sob o uso do Notebook pai, e não como um fluxo de trabalho Job separado.

Consulte Analisar metadados de uso para obter mais informações.

Calcule o custo de um trabalho executado em uma máquina multifuncional compute

O cálculo preciso do custo para o trabalho executado no site compute não é possível com 100% de precisão. Quando um trabalho é executado em um site interativo (all-purpose) compute, várias cargas de trabalho, como Notebook, consultas SQL ou outro trabalho, são executadas simultaneamente no mesmo recurso compute. Como os recursos de clustering são compartilhados, não há um mapeamento direto 1:1 entre os custos de computação e a execução individual do trabalho.

Para um acompanhamento preciso dos custos do trabalho, o site Databricks recomenda a execução do trabalho em um site dedicado compute ou serverless compute, onde usage_metadata.job_id e usage_metadata.job_run_id permitem uma atribuição precisa dos custos.

Se o senhor precisar usar o site compute para todos os fins, é possível:

  • Monitorar o uso e os custos gerais de clustering em system.billing.usage com base em usage_metadata.cluster_id.

  • Acompanhe as métricas de tempo de execução do trabalho separadamente.

  • Considere que qualquer estimativa de custo será aproximada devido ao recurso compartilhado.

Consulte Analisar metadados de uso para obter mais informações sobre a atribuição de custos.

Valores de referência

A seção a seguir inclui referências para colunas selecionadas em tabelas relacionadas ao trabalho.

Valores do tipo de gatilho

Os valores possíveis para a coluna trigger_type são:

  • CONTINUOUS

  • CRON

  • FILE_ARRIVAL

  • ONETIME

  • ONETIME_RETRY

Valores de tipo de execução

Os valores possíveis para a coluna run_type são:

Tipo

Descrição

Localização da interface do usuário

API ponto final

Tabelas do sistema

JOB_RUN

Execução de trabalho padrão

Jobs & Job execução UI

Endpoint /Job e /Job/execução

Trabalho, trabalho, trabalho, trabalho, trabalho

SUBMIT_RUN

Execução única via POST /Job/execução/submit

Job execução somente UI

Somente o endpoint /Job/execução

Trabalho

WORKFLOW_RUN

execução iniciada a partir do Notebook fluxo de trabalho

Não visível

Não acessível

Trabalho

Valores do estado do resultado

Os valores possíveis para a coluna result_state são:

Status

Descrição

SUCCEEDED

A execução foi concluída com êxito

FAILED

A execução foi concluída com um erro

SKIPPED

A execução nunca foi executada porque uma condição não foi atendida

CANCELLED

A execução foi cancelada por solicitação do usuário

TIMED_OUT

A execução foi interrompida após atingir o tempo limite

ERROR

A execução foi concluída com um erro

BLOCKED

A execução foi bloqueada em uma dependência upstream

Valores do código de terminação

Os valores possíveis para a coluna termination_code são:

Código de encerramento

Descrição

SUCCESS

A execução foi concluída com sucesso

CANCELLED

A execução foi cancelada durante a execução pela plataforma Databricks; por exemplo, se a duração máxima da execução foi excedida

SKIPPED

A execução nunca foi executada, por exemplo, se a execução da tarefa upstream falhou, a condição do tipo de dependência não foi atendida ou não havia tarefa material para executar

DRIVER_ERROR

A execução encontrou um erro ao se comunicar com o Spark Driver

CLUSTER_ERROR

A execução falhou devido a um erro de agrupamento

REPOSITORY_CHECKOUT_FAILED

Não foi possível concluir o checkout devido a um erro na comunicação com o serviço de terceiros

INVALID_CLUSTER_REQUEST

A execução falhou porque emitiu uma solicitação inválida para iniciar o clustering

WORKSPACE_RUN_LIMIT_EXCEEDED

O site workspace atingiu a cota para o número máximo de concorrente ativos em execução. Considere programar a execução em um período de tempo maior

FEATURE_DISABLED

A execução falhou porque tentou acessar um recurso indisponível para o workspace

CLUSTER_REQUEST_LIMIT_EXCEEDED

O número de solicitações de criação de cluster, início e aumento de tamanho excedeu o limite da taxa alocada. Considere a possibilidade de distribuir a execução em um período de tempo maior

STORAGE_ACCESS_ERROR

A execução falhou devido a um erro ao acessar o armazenamento de blob do cliente

RUN_EXECUTION_ERROR

A execução foi concluída com falhas na tarefa

UNAUTHORIZED_ERROR

A execução falhou devido a um problema de permissão ao acessar um recurso

LIBRARY_INSTALLATION_ERROR

A execução falhou ao instalar a biblioteca solicitada pelo usuário. As causas podem incluir, mas não estão limitadas a: A biblioteca fornecida é inválida, não há permissões suficientes para instalar a biblioteca e assim por diante

MAX_CONCURRENT_RUNS_EXCEEDED

A execução programada excede o limite máximo de execução concorrente definido para o Job

MAX_SPARK_CONTEXTS_EXCEEDED

A execução está programada em um clustering que já atingiu o número máximo de contextos que está configurado para criar

RESOURCE_NOT_FOUND

Um recurso necessário para a execução da execução não existe

INVALID_RUN_CONFIGURATION

A execução falhou devido a uma configuração inválida

CLOUD_FAILURE

A execução falhou devido a um problema do provedor de nuvem

MAX_JOB_QUEUE_SIZE_EXCEEDED

A execução foi ignorada por ter atingido o limite de tamanho da fila no nível do trabalho