Ejecutar tareas condicionalmente en un trabajo de Azure Databricks

De forma predeterminada, una tarea de trabajo se ejecuta cuando sus dependencias se hayan ejecutado y lo hayan hecho todas correctamente, pero también es posible configurar tareas en un trabajo de Azure Databricks para que solo se ejecuten cuando se cumplan condiciones específicas. Los trabajos de Azure Databricks admiten los métodos siguientes para ejecutar tareas de forma condicional:

  • Especifique dependencias Ejecutar si para ejecutar tareas en función del estado de ejecución de las dependencias de la tarea. Por ejemplo, use Run if para ejecutar una tarea incluso cuando algunas o todas sus dependencias hayan producido un error, lo que permitirá que el trabajo se recupere de los errores y continúe ejecutándose.
  • La tarea de condición If/else se usa para ejecutar una parte de un DAG de trabajo en función de los resultados de una expresión booleana. La tarea If/else condition permite agregar lógica de ramificación al trabajo. Por ejemplo, ejecute tareas de transformación solo si la tarea de ingesta ascendente agrega nuevos datos. De lo contrario, ejecute tareas de procesamiento de datos.

Agregar la condición Run if de una tarea

Puede configurar una condición Run if al editar una tarea con una o varias dependencias. Para agregar la condición a la tarea, seleccione la condición en el menú desplegable Ejecutar si las dependencias en la configuración de la tarea. La condición Run if se evalúa después de completar todas las dependencias de las tareas. También puede agregar una condición Run if al agregar una nueva tarea con una o varias dependencias.

Opciones de condición Run if

Puede agregar las siguientes Run if condiciones a una tarea:

  • Todo correcto: todas las dependencias se han ejecutado y realizado correctamente. Esta es la condición predeterminada para ejecutar una tarea. La tarea se marca como Upstream failed si no se cumple la condición.
  • Al menos una correcta: al menos una dependencia se ha realizado correctamente. La tarea se marca como Upstream failed si no se cumple la condición.
  • Ninguna con errores: ninguna de las dependencias produjo un error y se ejecutó al menos una dependencia. La tarea se marca como Upstream failed si no se cumple la condición.
  • Todo hecho: a tarea se ejecuta después de que se hayan ejecutado todas sus dependencias, sea cual sea el estado de las ejecuciones dependientes. Esta condición permite definir una tarea que se ejecuta sin depender del resultado de sus tareas dependientes.
  • Error en al menos una: error en al menos una dependencia. La tarea se marca como Excluded si no se cumple la condición.
  • Todas con errores: se han producido errores en todas las dependencias. La tarea se marca como Excluded si no se cumple la condición.

Nota:

  • Las tareas configuradas para manipular los errores se marcan como Excluded si no se cumple su condición Run if. Las tareas excluidas se omiten y se tratan como correctas.
  • Si se excluyen todas las dependencias de tareas, la tarea también se excluye, independientemente de su condición Run if.
  • Si se cancela la ejecución de una tarea, la cancelación se propagará a través de tareas de bajada, mientras que las tareas que tengan una condición Run if que controla el error se ejecutarán. Por ejemplo: para comprobar que se ejecute una tarea de limpieza cuando se cancele una ejecución de tareas.

¿Cómo determinan los trabajos de Azure Databricks el estado de ejecución del trabajo?

Los trabajos de Azure Databricks determinan si una ejecución de trabajo se realizó correctamente en función del resultado de las tareas hoja del trabajo. Una tarea hoja es una tarea que no tiene dependencias descendentes. Una ejecución de trabajos puede tener uno de estos tres resultados:

  • Correcto: todas las tareas se realizaron correctamente.
  • Correcto con errores: algunas tareas han producido un error, pero todas las tareas hoja se realizaron correctamente.
  • Error: error en una o varias tareas hoja.

Agregar lógica de ramificación al trabajo con la tarea If/else condition

Use la tarea If/else condition para ejecutar una parte de un DAG de trabajo basado en expresiones booleanas. La expresión consta de un operador booleano y un par de operandos, donde los operandos pueden hacer referencia al estado de trabajo o tarea mediante variables de parámetros de tarea y trabajo o usar valores de tarea.

Nota:

  • Los valores numéricos y no numéricos se manipulan de forma diferente en función del operador booleano:
    • Los operadores == y != realizan una comparación de cadenas de sus operandos. Por ejemplo, 12.0 == 12 se evalúa como false.
    • Los operadores >, >= y <= realizan comparaciones numéricas de sus operandos. Por ejemplo, 12.0 >= 12 se evalúa como true y 10.0 >= 12 se evalúa como false.
    • Solo se permiten valores numéricos, de cadena y booleanos al hacer referencia a valores de tarea en un operando. Cualquier otro tipo hará que se produzca un error en la expresión de condición. Los tipos de valor no numérico se serializan en cadenas y se tratan como cadenas en expresiones If/else condition. Por ejemplo, si un valor de tarea se establece como valor booleano, se serializa en "true" o "false".

Agregue una tarea If/else condition al crear un trabajo o editar una tarea de un trabajo existente. Para configurar una tarea If/else condition:

  1. En el menú desplegable Tipo, seleccione If/else condition.
  2. En el primer cuadro de texto Condición, escriba el operando que se vaya a evaluar. El operando puede hacer referencia a una variable de parámetro de tarea o trabajo, o bien a un valor de tarea.
  3. Seleccione un operador booleano en el menú desplegable.
  4. En el segundo cuadro de texto Condición, escriba el valor para evaluar la condición.

Para configurar las dependencias en una tarea If/else condition:

  1. Seleccione la tarea If/else condition en la vista DAG y haga clic en + Agregar tarea.
  2. Después de escribir los detalles de la tarea, haga clic en Depende de y seleccione <task-name> (true), donde <task-name> es el nombre de la tarea If/else condition.
  3. Repita el proceso de evaluación de la condición para false.

Por ejemplo, supongamos que tiene una tarea denominada process_records que mantiene un recuento de registros que no son válidos en un valor denominado bad_records y desea ramificar el procesamiento en función de si se encuentran registros que no sean válidos. Para agregar esta lógica al flujo de trabajo, cree una tarea If/else condition con una expresión, como {{tasks.process_records.values.bad_records}} > 0. A continuación, agregue tareas dependientes en función de los resultados de la condición.

Una vez completada la ejecución de un trabajo que contenga una tarea If/else condition, se verá el resultado de la expresión y los detalles de la evaluación de expresiones al ver los detalles de ejecución del trabajo en la interfaz de usuario.