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çãoRun 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 e10.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"
.
- Os operadores
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
:
- No menu suspenso Tipo, selecione
If/else condition
. - 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.
- Selecione um operador booliano no menu suspenso.
- 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
:
- Selecione a tarefa
If/else condition
no modo de exibição DAG e clique em + Adicionar tarefa. - Depois de inserir detalhes para a tarefa, clique em Depende de e selecione
<task-name> (true)
em que<task-name>
é o nome da tarefaIf/else condition
. - 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.