Partilhar via


Referência da tabela do sistema de tarefas

Nota

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

Este artigo é uma referência sobre como usar as tabelas do sistema lakeflow para monitorar trabalhos em sua conta. Essas tabelas incluem registros de todos os espaços de trabalho em sua conta implantados na mesma região de nuvem. Para ver registros de outra região, você deve exibir as tabelas de um espaço de trabalho implantado nessa região.

Requerimentos

Tabelas de trabalhos disponíveis

Todas as tabelas do sistema relacionadas de trabalhos se encontram no esquema system.lakeflow. Atualmente, o esquema hospeda quatro tabelas:

Tabela Descrição Suporta streaming Período de retenção gratuito Inclui dados globais ou regionais
vagas (Visualização pública) Rastreia todos os trabalhos criados na conta Sim 365 dias Regionais
job_tasks (Visualização pública) Rastreia todas as tarefas de trabalho executadas na conta Sim 365 dias Regionais
job_run_timeline (Visualização pública) Rastreia as execuções de tarefas e os metadados relacionados Sim 365 dias Regionais
job_task_run_timeline (Visualização Pública) Rastreia execuções de tarefas de trabalho e metadados relacionados Sim 365 dias Regionais

Referência detalhada do esquema

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

esquema da tabela de Jobs

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

O caminho da tabela: system.lakeflow.jobs

Nome da coluna Tipo de dados Descrição Observações
account_id cadeia de caracteres O ID da conta a que este trabalho pertence
workspace_id string A ID do espaço de trabalho ao qual este trabalho pertence
job_id string A ID do trabalho Apenas exclusivo dentro de um único espaço de trabalho
name string O nome do trabalho fornecido pelo usuário
description string A descrição do trabalho fornecida pelo usuário Este campo estará vazio se você tiver chaves gerenciadas pelo cliente configuradas.
Não preenchido para linhas emitidas antes do final de agosto de 2024
creator_id string O ID da autoridade principal que criou a tarefa
tags cadeia de caracteres As tags personalizadas fornecidas pelo usuário associadas a este trabalho
change_time carimbo de data/hora A hora em que o trabalho foi modificado pela última vez Fuso horário registado 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 registado como +00:00 (UTC)
run_as cadeia de caracteres O ID do utilizador ou principal de serviço cujas permissões são usadas para executar o 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 muda lentamente (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 Observações
account_id string O ID da conta a que este trabalho pertence
workspace_id string A ID do espaço de trabalho ao qual este trabalho pertence
job_id corda A ID do trabalho Apenas exclusivo dentro de um único espaço de trabalho
task_key string A chave de referência para uma tarefa em um trabalho Apenas único numa única tarefa
depends_on_keys array As chaves de tarefa de todas as dependências antecedentes desta tarefa
change_time carimbo de data/hora A hora em que a tarefa foi modificada pela última vez Fuso horário registado como +00:00 (UTC)
delete_time marca temporal A hora em que uma tarefa foi excluída pelo usuário Fuso horário registado 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 da tabela cronológica de execução do trabalho

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 Observações
account_id string O ID da conta a que este trabalho pertence
workspace_id string A ID do espaço de trabalho ao qual este trabalho pertence
job_id string A ID do trabalho Essa chave só é exclusiva em um único espaço de trabalho
run_id string O ID do trabalho executado
period_start_time carimbo de data/hora O horário de início da corrida 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 para a execução ou para o 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 iniciar uma execução Para valores possíveis, consulte Valores de tipo de gatilho
run_type string O tipo de trabalho executado Para obter valores possíveis, consulte Executar valores de tipo
run_name string O nome de execução fornecido pelo usuário associado a esta execução de trabalho
compute_ids array Matriz que contém as IDs de computação do trabalho para a execução do trabalho pai Usar para identificar o agrupamento de tarefas usados pelos tipos de execução WORKFLOW_RUN. Para obter outras informações de computação, consulte a job_task_run_timeline tabela.
Não preenchido para linhas emitidas antes do final de agosto de 2024
result_state corda O resultado da execução do trabalho Para valores possíveis, consulte Valores de estado resultante
termination_code string O código de término do trabalho executado Para obter os 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 mapa Os parâmetros de nível de tarefa usados na execução da tarefa As configurações de notebook_params preteridas não estão incluídas neste 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 da tabela cronológica de execução da tarefa de trabalho

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 Observações
account_id string O ID da conta a que este trabalho pertence
workspace_id corda A ID do espaço de trabalho ao qual este trabalho pertence
job_id string A ID do trabalho Apenas exclusivo dentro de um único espaço de trabalho
run_id string A ID da tarefa executada
job_run_id string A ID do trabalho executado Não preenchido para linhas emitidas antes do final de agosto de 2024
parent_run_id string 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 A hora 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 data e 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 chave de referência para uma tarefa em um trabalho Essa chave só é única em um único trabalho
compute_ids matriz A matriz compute_ids contém IDs de clusters de trabalho, clusters interativos e SQL warehouses usados pela tarefa de trabalho
result_state cadeia de caracteres O resultado da execução da tarefa de trabalho Para valores possíveis, consulte Valores de estado resultante
termination_code cadeia de caracteres O código de término da tarefa executada Para obter os 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 consultas de exemplo que destacam padrões de junção comumente usados para tabelas do sistema de trabalhos.

Junte-se às tabelas de cronograma de trabalhos e execução de trabalhos

Enriqueça a execução da tarefa com um nome de tarefa

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)

Associe o cronograma de execução do trabalho e as tabelas de utilização

Enriqueça cada log de faturamento com metadados de execução de tarefa

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 de trabalho

Essa consulta se une à 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

Obter registos de utilização para as tarefas SUBMIT_RUN

SELECT
  *
FROM system.billing.usage
WHERE
  EXISTS (
      SELECT 1
      FROM system.lakeflow.job_run_timeline
      WHERE
        job_run_timeline.job_id = usage_metadata.job_id
        AND run_name = :run_name
        AND workspace_id = :workspace_id
  )

Juntar as tabelas de cronograma de execução de tarefas de trabalho e de clusters

Enriquecer execuções de tarefas de trabalho com metadados de 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 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)

Encontre trabalhos executados em computação multiuso

Essa consulta une-se à tabela de sistema compute.clusters para retornar trabalhos recentes que estão a ser executados em recurso de computação multiuso em vez de recursos de computação para tarefas.

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 monitorização de tarefas do

O painel a seguir usa tabelas do sistema para ajudá-lo a começar a monitorar seus trabalhos e a integridade operacional. Ele inclui casos de uso comuns, como rastreamento de desempenho de trabalho, monitoramento de falhas e utilização de recursos.

Painel de observação de custos de trabalhos

Para obter informações sobre como baixar o painel, consulte Monitorizar os custos do trabalho e o desempenho & com as tabelas do sistema

Solução de problemas

Trabalho não está registado 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
    • Modifique qualquer um dos campos do trabalho presentes no esquema para emitir um novo registro.
  • O emprego foi criado numa região diferente
  • Criação recente de emprego (atraso na tabela)

Não se consegue encontrar um emprego indicado na tabela job_run_timeline

Nem todas as execuções de trabalhos são visíveis em todos os lugares. Embora as entradas JOB_RUN apareçam em todas as tabelas relacionadas ao trabalho, as execuções WORKFLOW_RUN (fluxos de trabalho de cadernos) são registradas apenas em job_run_timeline e as execuções SUBMIT_RUN (enviadas uma única vez) são registradas apenas nas duas tabelas de linha do tempo. Essas execuções não são preenchidas em outras tabelas do sistema de trabalho, como jobs ou job_tasks.

Consulte a tabela tipos de corrida abaixo para obter um detalhamento de onde cada tipo de corrida é visível e acessível.

Execução de tarefa não visível na tabela billing.usage

No system.billing.usage, o usage_metadata.job_id só é preenchido para trabalhos executados em computação de trabalho ou computação sem servidor.

Além disso, os trabalhos WORKFLOW_RUN não têm a sua própria atribuição de usage_metadata.job_id ou de usage_metadata.job_run_id em system.billing.usage. Em vez disso, o uso de computação deles/delas é atribuído ao caderno de origem que os gerou. Isso significa que, quando um notebook inicia uma execução de fluxo de trabalho, todos os custos de computação são contabilizados no uso do notebook pai, não como uma tarefa de fluxo de trabalho separada.

Consulte a referência de metadados de uso para obter mais informações.

Calcular o custo de um trabalho executado em uma computação multiuso

O cálculo preciso de custos para trabalhos executados em computação específica não é possível com uma precisão de 100%. Quando um trabalho é executado em uma computação interativa (multiuso), várias cargas de trabalho, como blocos de anotações, consultas SQL ou outros trabalhos, geralmente são executadas simultaneamente nesse mesmo recurso de computação. Como os recursos do cluster são compartilhados, não há mapeamento 1:1 direto entre os custos de computação e as execuções de tarefas individuais.

Para um acompanhamento preciso do custo do trabalho, o Databricks recomenda a execução de trabalhos em computação de trabalho dedicada ou computação sem servidor, onde o usage_metadata.job_id e a usage_metadata.job_run_id permitem a atribuição precisa de custos.

Se você precisar usar computação multiuso, poderá:

  • Monitore a utilização global do cluster e os custos 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 aos recursos compartilhados.

Consulte Referência de Metadados de Uso para 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 a trabalhos.

Valores de tipo de gatilho

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

  • CONTINUOUS
  • CRON
  • FILE_ARRIVAL
  • ONETIME
  • ONETIME_RETRY

Valores de tipos de execução

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

Tipo Descrição Localização da interface do usuário Ponto de extremidade da API Tabelas do sistema
JOB_RUN Execução de trabalho padrão Trabalhos e Execuções de Trabalho na Interface do Utilizador /jobs e /jobs/runs pontos de extremidade empregos, tarefas_emprego, cronograma_execução_emprego, cronograma_execução_tarefa_emprego
SUBMIT_RUN Execução única via POST /jobs/runs/submit Somente Interface de Execução de Tarefas /jobs/executa apenas pontos de extremidade linha_do_tempo_execução_trabalho, linha_do_tempo_execução_tarefa
WORKFLOW_RUN Execução iniciada a partir do fluxo de trabalho do notebook Não visível Não acessível cronograma de execução do trabalho

Valores do estado de resultado

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

Estado 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 realizada porque uma condição não foi atendida
CANCELLED A execução foi cancelada a pedido do usuário
TIMED_OUT A corrida foi interrompida depois de 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 interrupção

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

Código de rescisão 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 de execução foi excedida
SKIPPED A execução não foi realizada, por exemplo, se a execução da tarefa anterior falhou, a condição de dependência não foi atendida ou não havia tarefas concretas 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 cluster
REPOSITORY_CHECKOUT_FAILED Falha ao concluir o checkout devido a um erro ao se comunicar com o serviço de terceiros
INVALID_CLUSTER_REQUEST A execução falhou porque emitiu uma solicitação inválida para iniciar o cluster
WORKSPACE_RUN_LIMIT_EXCEEDED O espaço de trabalho atingiu o limite para o número máximo de execuções simultâneas ativas. Considere agendar as sessões em um intervalo de tempo mais prolongado
FEATURE_DISABLED A execução falhou porque tentou acessar um recurso indisponível para o espaço de trabalho
CLUSTER_REQUEST_LIMIT_EXCEEDED O número de pedidos de criação, início e aumento de tamanho do cluster excedeu o limite de taxa atribuído. Considere distribuir a execução ao longo de 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 durante a instalação da 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 agendada excede o limite máximo de execuções simultâneas definido para o trabalho
MAX_SPARK_CONTEXTS_EXCEEDED A execução é agendada em um cluster que já atingiu o número máximo de contextos que está configurado para criar
RESOURCE_NOT_FOUND Um recurso necessário para executar a 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 com o provedor de nuvem
MAX_JOB_QUEUE_SIZE_EXCEEDED A execução foi ignorada por atingir o limite de tamanho da fila de nível de tarefa.