Executar tarefas condicionalmente em um trabalho do Azure Databricks

Por padrão, uma tarefa de trabalho é executada quando suas dependências foram executadas e todas foram bem-sucedidas, mas você também pode configurar tarefas em um trabalho do Azure Databricks para serem executadas somente quando condições específicas forem atendidas. O Azure Databricks Jobs dá suporte aos seguintes métodos para executar tarefas 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 trabalho se recupere de falhas e continue em execução.
  • A tarefa de condição Se/não é usada para executar uma parte de um DAG de trabalho com base nos resultados de uma expressão booleana. A If/else condition tarefa permite que você adicione lógica de ramificação ao seu trabalho. Por exemplo, execute tarefas de transformação somente se a tarefa de ingestão upstream adicionar novos dados. Caso contrário, execute tarefas de processamento de dados.

Adicionar a Run if condição de uma tarefa

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

Run if Opções de condição

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

  • Todas foram bem-sucedidas: todas as dependências foram executadas e bem-sucedidas. Esta é a condição padrão para executar uma tarefa. A tarefa é marcada como Upstream failed se a condição não fosse atendida.
  • Pelo menos uma teve sucesso: pelo menos uma dependência foi bem-sucedida. A tarefa é marcada como Upstream failed se a condição não fosse atendida.
  • Nenhuma falhou: nenhuma das dependências falhou e pelo menos uma dependência foi executada. A tarefa é marcada como Upstream failed se a condição não fosse atendida.
  • Tudo feito: A tarefa é executada depois que todas as suas dependências foram executadas, independentemente do status das execuções dependentes. Essa condição permite que você defina uma tarefa que é executada sem depender do resultado de suas tarefas dependentes.
  • Pelo menos uma falhou: Pelo menos uma dependência falhou. A tarefa é marcada como Excluded se a condição não fosse atendida.
  • Todas falharam: Todas as dependências falharam. A tarefa é marcada como Excluded se a condição não fosse atendida.

Nota

  • As tarefas configuradas para lidar com falhas são marcadas como Excluded se sua Run if condição não fosse 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 Run if condição.
  • Se você cancelar uma execução de tarefa, o cancelamento se propagará por tarefas downstream e tarefas com uma condição que manipula falhas serão executadas, por exemplo, para verificar se uma tarefa de limpeza é executada quando uma Run if execução de tarefa é cancelada.

Como o Azure Databricks Jobs determina o status de execução do trabalho?

Os Trabalhos do Azure Databricks determinam se uma execução de trabalho foi bem-sucedida com base no resultado das tarefas folha do trabalho. Uma tarefa folha é uma tarefa que não tem dependências a jusante. Uma execução de trabalho pode ter um de três resultados:

  • Êxito: Todas as tarefas foram bem-sucedidas.
  • Sucesso com falhas: Algumas tarefas falharam, mas todas as tarefas da folha foram bem-sucedidas.
  • Falha: Uma ou mais tarefas de folha falharam.

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

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

Nota

  • Os valores numéricos e não numéricos são tratados de forma diferente, dependendo do operador booleano:
    • Os == operadores e != executam a comparação de cadeia de caracteres de seus operandos. Por exemplo, 12.0 == 12 avalia como falso.
    • Os >operadores , >=e <= executam comparações numéricas de seus operandos. Por exemplo, 12.0 >= 12 avalia como verdadeiro e 10.0 >= 12 avalia como falso.
    • Somente valores numéricos, de cadeia de caracteres e booleanos são permitidos ao fazer referência a valores de tarefa em um operando. Quaisquer outros tipos farão com que a expressão da condição falhe. Tipos de valores não numéricos são serializados em cadeias de caracteres e são tratados como cadeias de caracteres em If/else condition expressões. Por exemplo, se um valor de tarefa é definido como um valor booleano, ele é serializado para "true" ou "false".

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

  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 de trabalho ou tarefa ou a um valor de tarefa.
  3. Selecione um operador booleano 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 If/else condition tarefa:

  1. Selecione a If/else condition tarefa na visualização DAG e clique em + Adicionar tarefa.
  2. Depois de inserir os detalhes da tarefa, clique em Depende e selecione <task-name> (true) onde <task-name> está o nome da If/else condition tarefa.
  3. Repita para a condição que avalia a false.

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

Após a conclusão da execução de um trabalho que contém uma If/else condition tarefa, você pode exibir o resultado da expressão e os detalhes da avaliação da expressão quando exibir os detalhes da execução do trabalho na interface do usuário.