Jobs são a orquestração nativa do Databricks. Um Job é composto por uma ou mais tasks com dependências entre elas, formando um DAG (Directed Acyclic Graph) de execução.

Alternativa à necessidade de Apache Airflow para pipelines inteiramente dentro do Databricks.

Tipos de task

TipoQuando usar
NotebookScripts exploratórios, ETL simples com lógica em notebook
Python ScriptScripts .py versionados no repositório
Python WheelPacotes Python buildados, melhor para código de produção testável
Spark SubmitSubmissão de JARs Spark ou scripts com configurações avançadas
SQLQueries SQL no Databricks SQL Warehouse
dbtTasks dbt integradas nativamente
Pipeline (DLT)Dispara um Lakeflow Declarative Pipeline
Run JobDispara outro Job como subtask
ConditionLógica condicional (if/else) no fluxo do DAG
For EachItera sobre uma lista dinamicamente, executando uma task por item

Estrutura de um Job (UI / YAML)

# resources/jobs/pipeline_vendas.yml (dentro de um DAB)
resources:
  jobs:
    pipeline_vendas:
      name: "Pipeline Vendas"
 
      schedule:
        quartz_cron_expression: "0 0 6 * * ?"   # 06:00 UTC diário
        timezone_id: "America/Sao_Paulo"
        pause_status: UNPAUSED
 
      max_concurrent_runs: 1
      timeout_seconds: 7200   # 2 horas: falha se passar disso
 
      email_notifications:
        on_start:   []
        on_success: []
        on_failure:
          - [email protected]
        no_alert_for_skipped_runs: true
 
      tasks:
        - task_key: ingestao_crm
          notebook_task:
            notebook_path: ./src/notebooks/ingestao_crm.py
            base_parameters:
              data: "{{ds}}"             # variável de data da execução
              catalog: "gold"
          job_cluster_key: cluster_ingestion
          timeout_seconds: 1800
          retry_on_timeout: false
          max_retries: 2
          min_retry_interval_millis: 60000
 
        - task_key: ingestao_erp
          notebook_task:
            notebook_path: ./src/notebooks/ingestao_erp.py
          job_cluster_key: cluster_ingestion
          max_retries: 2
 
        - task_key: transformacao_silver
          depends_on:
            - task_key: ingestao_crm
            - task_key: ingestao_erp          # executa após AMBAS completarem
          python_wheel_task:
            package_name: pipeline_vendas
            entry_point: transformar_silver
            parameters:
              - "--catalog=gold"
              - "--date={{ds}}"
          job_cluster_key: cluster_transform
 
        - task_key: validacao
          depends_on:
            - task_key: transformacao_silver
          notebook_task:
            notebook_path: ./src/notebooks/validacao.py
          job_cluster_key: cluster_transform
 
        - task_key: dlt_gold
          depends_on:
            - task_key: validacao
          pipeline_task:
            pipeline_id: "{{pipelines.dlt_pedidos}}"   # referência ao pipeline DLT
            full_refresh: false
 
      job_clusters:
        - job_cluster_key: cluster_ingestion
          new_cluster:
            spark_version: "15.4.x-scala2.12"
            node_type_id: Standard_D4ds_v5
            num_workers: 2
            data_security_mode: SINGLE_USER
 
        - job_cluster_key: cluster_transform
          new_cluster:
            spark_version: "15.4.x-scala2.12"
            node_type_id: Standard_D8ds_v5
            autoscale:
              min_workers: 2
              max_workers: 8
            data_security_mode: SINGLE_USER

Triggers

Agendamento (Cron)

schedule:
  quartz_cron_expression: "0 30 8 * * MON-FRI"   # 08:30 seg-sex
  timezone_id: "America/Sao_Paulo"

Sintaxe Quartz Cron: segundos minutos horas dia-do-mês mês dia-da-semana

File Arrival Trigger

Dispara quando um novo arquivo chega em um path monitorado:

trigger:
  file_arrival:
    url: "s3://meu-bucket/landing/pedidos/"
    min_time_between_triggers_seconds: 300   # no mínimo 5 min entre triggers
    wait_after_last_change_seconds: 60       # aguarda 60s de inatividade

Continuous (low latency)

trigger:
  pause_status: UNPAUSED
continuous:
  pause_status: UNPAUSED

Manual / API

# Via CLI
databricks jobs run-now --job-id 12345
 
# Com parâmetros
databricks jobs run-now --job-id 12345 \
  --notebook-params '{"data": "2026-05-01", "catalog": "gold"}'

Task parameters e variáveis dinâmicas

Databricks suporta dynamic value references, variáveis preenchidas automaticamente em runtime:

VariávelValor
{{job.id}}ID do job
{{run.id}}ID da execução atual
{{start_time}}Timestamp de início (epoch ms)
{{ds}}Data da execução agendada (YYYY-MM-DD)
{{tasks.<task_key>.values.<output_key>}}Output de task anterior

Task values: passar dados entre tasks

# Task A: produz um valor de saída
from databricks.sdk.runtime import dbutils
 
dbutils.jobs.taskValues.set(key="qtd_registros", value=1234)
 
# Task B: consome o valor da Task A
qtd = dbutils.jobs.taskValues.get(
    taskKey="task_a",
    key="qtd_registros",
    default=0,
    debugValue=0
)

For Each Task

Executa iterativamente uma sub-task para cada item de uma lista:

- task_key: processar_regioes
  for_each_task:
    inputs: "[\"SP\", \"RJ\", \"MG\", \"RS\"]"
    concurrency: 3          # até 3 iterações em paralelo
    task:
      task_key: processar_regiao_iter
      notebook_task:
        notebook_path: ./src/notebooks/processar_regiao.py
        base_parameters:
          regiao: "{{input}}"    # valor da iteração atual

Repair Run

Quando um job falha, é possível re-executar apenas as tasks que falharam (sem re-executar as que já tiveram sucesso):

# Via CLI
databricks jobs repair-run --run-id 98765 --rerun-tasks "transformacao_silver,validacao"
 
# Via UI: Run > Repair Run > selecionar tasks

Essencial para jobs com muitas tasks onde re-executar do zero seria caro.

Jobs vs. Airflow

Databricks JobsApache Airflow
SetupZero (nativo)Requer infraestrutura separada
Integração DatabricksNativaVia DatabricksRunNowOperator
Tasks externas ao DatabricksNão (só recursos DB)Sim (qualquer sistema via operators)
ObservabilidadeDashboard nativoAirflow UI + integração externa
Quando preferirPipeline 100% DatabricksOrquestração multi-sistema

Ver também: databricks | databricks-asset-bundles | databricks-lakeflow-pipelines | databricks-clusters | ferramentas-engenharia-dados