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 suaRun 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 e10.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"
.
- Os
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:
- No menu suspenso Tipo, selecione
If/else condition
. - 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.
- Selecione um operador booleano no menu suspenso.
- 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:
- Selecione a
If/else condition
tarefa na visualização DAG e clique em + Adicionar tarefa. - Depois de inserir os detalhes da tarefa, clique em Depende e selecione
<task-name> (true)
onde<task-name>
está o nome daIf/else condition
tarefa. - 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.