Share via


Executar tarefas condicionalmente em um trabalho do Azure Databricks

Por padrão, uma tarefa de trabalho é executada quando suas dependências são 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 dependências Executar se 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 Condição If/else é usada para executar uma parte de um DAG de trabalho com base nos resultados de uma expressão booliana. A tarefa If/else condition permite adicionar 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 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 dependências Executar se na configuração da tarefa. A condição Run if é avaliada depois de concluir 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 Run if condições a uma tarefa:

  • Tudo bem-sucedido: todas as dependências foram executadas e bem-sucedidas. Essa é a condição padrão para executar uma tarefa. A tarefa é marcada como Upstream failed se a condição não for atendida.
  • Pelo menos uma foi bem-sucedida: pelo menos uma dependência foi bem-sucedida. A tarefa é 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 é marcada como Upstream failed se a condição não for atendida.
  • Tudo feito: a tarefa é executada depois de executar todas as dependências, independentemente do status das execuções dependentes. Essa condição permite que você defina uma tarefa executada sem depender do resultado das suas tarefas dependentes.
  • Pelo menos uma falha: pelo menos uma dependência falhou. A tarefa é marcada como Excluded se a condição não for atendida.
  • Tudo falhou: todas as dependências falharam. A tarefa é marcada como Excluded se a condição não for atendida.

Observação

  • As tarefas configuradas para lidar com falhas são marcadas como Excluded se a 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 de 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 será propagado por meio de tarefas downstream e as tarefas com uma condição Run if que manipula a falha serão executadas, por exemplo, para verificar que uma tarefa de limpeza seja executada quando uma execução de tarefa for cancelada.

Como os Trabalhos do Azure Databricks determinam a execução do trabalho status?

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 downstream. Uma execução de trabalho pode ter um dos três resultados:

  • Êxito: todas as tarefas foram bem-sucedidas.
  • Êxito com falhas: algumas tarefas falharam, mas todas as tarefas folha foram bem-sucedidas.
  • Falha: uma ou mais tarefas folha falharam.

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

Use a tarefa If/else condition para executar uma parte de um DAG de trabalho com base em uma expressão booliana. A expressão consiste em um operador booliano e alguns operandos, em que os operandos podem referenciar o estado do trabalho ou da tarefa usando variáveis de parâmetro de trabalho e 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 booliano:
    • Os operadores == e != executam a comparação de cadeia de caracteres dos operandos. Por exemplo, 12.0 == 12 é avaliado como falso.
    • Os operadores >, >= e <= executam comparações numéricas dos operandos. Por exemplo, 12.0 >= 12 é avaliado como true e 10.0 >= 12 é avaliado como false.
    • Somente valores numéricos, de cadeia de caracteres e boolianos são permitidos ao referenciar valores de tarefa em um operando. Qualquer outro tipo fará com que a expressão de condição falhe. Tipos de valor não numérico são serializados em cadeias de caracteres e são tratados como cadeias de caracteres em expressões If/else condition. Por exemplo, se um valor de tarefa for definido como um valor booliano, ele será serializado para "true" ou "false".

Você pode adicionar uma tarefa If/else condition quando criar um trabalho ou editar uma tarefa em um trabalho 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 referenciar uma variável de parâmetro de trabalho ou tarefa ou um valor de tarefa.
  3. Selecione um operador booliano 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 no modo de exibição DAG e clique em + Adicionar tarefa.
  2. Depois de inserir detalhes para a tarefa, clique em Depende de e selecione <task-name> (true) em que <task-name> é o nome da tarefa If/else condition.
  3. Repita para a condição que está sendo avaliada como false.

Por exemplo, vamos supor 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 você deseja ramificar o processamento com base nos registros que não são válidos. Para adicionar essa lógica ao fluxo de trabalho, você pode criar uma tarefa If/else condition com uma expressão como {{tasks.process_records.values.bad_records}} > 0. Em seguida, você pode adicionar tarefas dependentes com base nos resultados da condição.

Quando a execução de um trabalho que contém uma tarefa If/else condition for concluída, você poderá exibir o resultado da expressão e detalhes da avaliação da expressão ao exibir os detalhes da execução do trabalho na interface do usuário.