tarefas de execução condicionalmente em um Jobdo Databricks

Por default, uma tarefa de Job é executada quando suas dependências foram executadas e todas foram bem-sucedidas, mas você também pode configurar tarefas em um Job do Databricks para execução somente quando condições específicas forem atendidas. Databricks Jobs oferece suporte aos seguintes métodos para execução da tarefa condicionalmente:

  • Você pode especificar Executar se dependências para executar uma tarefa com base no status de execução das dependências da tarefa. Por exemplo, você pode usar Run if para executar uma tarefa mesmo quando algumas ou todas as suas dependências falharam, permitindo que seu Job se recupere de falhas e continue em execução.

  • A tarefa de condição If/else é usada para executar uma parte de um Job DAG com base nos resultados de uma expressão Boolean . A tarefa If/else condition permite adicionar lógica de ramificação ao seu Job. Por exemplo, tarefas de transformação de execução somente se a tarefa de ingestão upstream adicionar novos dados. Caso contrário, a tarefa de processamento de dados de execução.

Adicione a condição Run if de uma tarefa

Você pode configurar uma condição Run if ao editar uma tarefa com uma ou mais dependências. Para adicionar a condição à tarefa, selecione a condição no menu suspenso execução se dependências na configuração da tarefa. A condição Run if é avaliada após a conclusão de todas as dependências da tarefa. Você também pode adicionar uma condição Run if ao adicionar uma nova tarefa com uma ou mais dependências.

Run if opções de condição

Você pode adicionar as seguintes condições Run if a uma tarefa:

  • Todas bem-sucedidas: todas as dependências foram executadas e bem-sucedidas. Esta é a condição default para execução de uma tarefa. A tarefa será marcada como Upstream failed se a condição não for atendida.

  • Pelo menos um foi bem-sucedido: pelo menos uma dependência foi bem-sucedida. A tarefa será marcada como Upstream failed se a condição não for atendida.

  • Nenhuma falhou: nenhuma das dependências falhou e pelo menos uma dependência foi executada. A tarefa será marcada como Upstream failed se a condição não for atendida.

  • Tudo pronto: a tarefa é executada após a execução de todas as suas dependências, independentemente do status das execuções dependentes. Esta condição permite definir uma tarefa que é executada sem depender do resultado de suas tarefas dependentes.

  • Pelo menos uma falhou: pelo menos uma dependência falhou. A tarefa será marcada como Excluded se a condição não for atendida.

  • Todas falharam: todas as dependências falharam. A tarefa será marcada como Excluded se a condição não for atendida.

Observação

  • A tarefa configurada para lidar com falhas será marcada como Excluded se sua condição Run if não for atendida. As tarefas excluídas são ignoradas e tratadas como bem-sucedidas.

  • Se todas as dependências da tarefa forem excluídas, a tarefa também será excluída, independentemente de sua condição Run if .

  • Se você cancelar a execução de uma tarefa, o cancelamento se propagará pelas tarefas downstream e as tarefas com uma condição Run if que trata de falha serão executadas, por exemplo, para verificar se uma tarefa de limpeza é executada quando uma execução de tarefa é cancelada.

Como os trabalhos do Databricks determinam o status de execução Job ?

Databricks Jobs determina se uma execução de trabalho foi bem-sucedida com base no resultado das tarefas de folha do trabalho. Uma tarefa folha é uma tarefa que não possui dependências downstream. Uma execução Job pode ter um dos três resultados:

  • Bem-sucedido: Todas as tarefas foram bem-sucedidas.

  • Sucesso com falhas: algumas tarefas falharam, mas todas as tarefas de folha foram bem-sucedidas.

  • Falha: uma ou mais tarefas de folha falharam.

Adicione lógica de ramificação ao seu Job com a tarefa If/else condition

Use a tarefa If/else condition para executar uma parte de um Job DAG com base em uma expressão Boolean . A expressão consiste em um operador Boolean e um par de operandos, onde os operandos podem fazer referência ao estado Job ou da tarefa usando variáveis de parâmetroJob e da tarefa ou usar valores de tarefa.

Observação

  • Valores numéricos e não numéricos são tratados de forma diferente dependendo do operador Boolean :

    • Os operadores == e != realizam comparação de strings de seus operandos. Por exemplo, 12.0 == 12 é avaliado como falso.

    • Os operadores >, >= e <= realizam comparações numéricas de seus operandos. Por exemplo, 12.0 >= 12 é avaliado como verdadeiro e 10.0 >= 12 é avaliado como falso.

    • Somente valores numéricos, strings e Boolean são permitidos ao fazer referência a valores de tarefa em um operando. Quaisquer outros tipos causarão falha na expressão da condição. Tipos de valores não numéricos são serializados em strings e tratados como strings em expressões If/else condition . Por exemplo, se um valor de tarefa for definido como um valor Boolean , ele será serializado como "true" ou "false".

Você pode adicionar uma tarefa If/else condition ao criar um Job ou editar uma tarefa em um Job existente. Para configurar uma tarefa If/else condition :

  1. No menu suspenso Tipo , selecione If/else condition.

  2. Na primeira caixa de texto Condição , insira o operando a ser avaliado. O operando pode fazer referência a uma variável de parâmetro Job ou tarefa ou a um valor de tarefa.

  3. Selecione um operador Boolean no menu suspenso.

  4. Na segunda caixa de texto Condição , insira o valor para avaliar a condição.

Para configurar dependências em uma tarefa If/else condition :

  1. Selecione a tarefa If/else condition na view do DAG e clique em + Adicionar tarefa.

  2. Depois de inserir os detalhes da tarefa, clique em Depende de e selecione <task-name> (true) onde <task-name> é o nome da tarefa If/else condition .

  3. Repita para a condição avaliada como false.

Por exemplo, suponha que você tenha uma tarefa chamada process_records que mantém uma contagem de registros que não são válidos em um valor chamado bad_records e deseja ramificar o processamento com base na localização de registros que não são válidos. Para adicionar essa lógica ao seu fluxo de trabalho, você pode criar uma tarefa If/else condition com uma expressão como {{tasks.process_records.values.bad_records}} > 0. Você pode então adicionar tarefas dependentes com base nos resultados da condição.

Após a conclusão da execução de um Job que contém uma tarefa If/else condition, você poderá view o resultado da expressão e os detalhes da avaliação da expressão ao view os detalhes da execuçãoJob na IU.