executar tarefa condicionalmente em um Databricks Job

Em default, um Job executa a tarefa quando suas dependências são executadas e todas são bem-sucedidas, mas o senhor também pode configurar a tarefa em um Job Databricks para executar somente quando condições específicas forem atendidas. Databricks O Jobs suporta os seguintes métodos para executar tarefas condicionalmente:

  • O senhor pode especificar a execução se as dependências executarem uma tarefa com base no status de execução das dependências da tarefa. Por exemplo, o senhor pode usar Run if para executar uma tarefa mesmo quando algumas ou todas as suas dependências falharem, permitindo que o trabalho se recupere das 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 booleana. A tarefa If/else condition permite que o senhor adicione lógica de ramificação ao seu trabalho. Por exemplo, a execução transformações tarefa somente se a tarefa de ingestão upstream adicionar novos dados. Caso contrário, o senhor executa a tarefa de processamento de dados.

Adicionar a condição Run if de uma tarefa

O senhor 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. O senhor 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ções

O senhor pode adicionar as seguintes condições Run if a uma tarefa:

  • Todos foram bem-sucedidos: Todas as dependências foram executadas e bem-sucedidas. Essa é a default condição para executar a tarefa. A tarefa é 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 é marcada como Upstream failed se a condição não for atendida.

  • Nenhum 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 pronto: A tarefa é executada após a execução de todas as suas dependências, independentemente do status da execução dependente. Essa condição permite que o senhor defina uma tarefa que seja executada sem depender do resultado de sua tarefa dependente.

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

  • Todos falharam: 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 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 o senhor cancelar a execução de uma tarefa, o cancelamento se propagará pela tarefa downstream e a tarefa com uma condição Run if que lida com falhas será executada, por exemplo, para verificar a execução de uma tarefa de limpeza quando a execução de uma tarefa for cancelada.

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

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

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

  • Foi bem-sucedido com falhas: Algumas tarefas falharam, mas todas as tarefas de folhas foram bem-sucedidas.

  • Failed (Falha): Uma ou mais tarefas de folha falharam.

Adicione 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 Job DAG com base em uma expressão booleana. A expressão consiste em um operador booleano e um par de operandos, em que os operandos podem fazer referência ao estado do trabalho ou da tarefa usando variáveis de parâmetro do trabalho e da tarefa ou usar valores da tarefa.

Observação

  • Os valores numéricos e não numéricos são tratados de forma diferente, dependendo do operador booleano:

    • Os operadores == e != realizam a 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, cadeias de caracteres e booleanos são permitidos ao fazer referência a valores de tarefa em um operando. Qualquer outro tipo fará com que a expressão de condição falhe. Os tipos de valores não numéricos são serializados em strings e são tratados como strings em expressões If/else condition. Por exemplo, se um valor de tarefa for definido como um valor booleano, ele será serializado como "true" ou "false".

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

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

  2. Na primeira caixa de texto Condition (Condição ), digite 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, digite 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 DAG view e clique em + Add tarefa (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 o procedimento para a condição que avalia false.

Por exemplo, suponha que o senhor 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, o senhor pode criar uma tarefa If/else condition com uma expressão como {{tasks.process_records.values.bad_records}} > 0. Em seguida, o senhor pode adicionar tarefas dependentes com base nos resultados da condição.

Depois que a execução de um trabalho contendo uma tarefa If/else condition for concluída, o senhor poderá view o resultado da expressão e os detalhes da avaliação da expressão quando acessar view os detalhes da execução do trabalho na interface do usuário.