Lección 7 de 21 · Lectura y práctica
Configurar Dependencias con set_upstream y set_downstream
Compara >>, <<, set_upstream y set_downstream con un DAG de cuatro tareas comprobado en Python 3.12.3 y Airflow 3.3.2.
Del concepto a la práctica
Taller de esta lección
Las dependencias describen precedencia, no contenido. Con cuatro tareas extraer, validar, transformar y publicar, puedes expresar la misma relación con >> o con set_downstream, pero no necesitas duplicarla. Un grafo correcto permite paralelismo cuando dos tareas no comparten una condición previa.
Ejemplo resuelto
extraer_clientes y extraer_pedidos pueden ejecutarse en paralelo; ambas deben preceder a unir. Si unir solo depende de clientes, podría comenzar con información incompleta.
Pruébalo
Dibuja nodos antes de escribir código.
Marca cada requisito de entrada de
unir.Expresa una relación con
>>y otra conset_downstream.Busca ciclos antes de ejecutar.
Comprueba tu resultado
El grafo tiene dos ramas de extracción y un único punto de unión sin ciclos.
Error frecuente
Confundir extraer >> transformar con el envío de un DataFrame. Corrige usando archivo compartido o un intercambio pequeño y explícito.
Ejercicio: añade auditar después de publicar. Resultado esperado: publicar termina antes de auditar, y ninguna tarea de extracción depende innecesariamente de la auditoría.
Condición concreta de convergencia
El grafo es extraer_clientes >> unir y extraer_pedidos >> unir; ambas relaciones son necesarias. En la regla predeterminada all_success, si clientes termina bien y pedidos falla, unir no ejecuta su código y queda en upstream_failed. El paralelismo depende además de la capacidad disponible; ausencia de dependencia no promete ejecución simultánea. Las rutas de archivos grandes deben ser accesibles desde cualquier worker que ejecute la tarea siguiente, o apuntar a almacenamiento compartido. No supongas que /tmp de un worker pertenece también a otro.

Mapa de prácticaUn DAG expresa dependencias entre tareas, sin ciclos. Una transformación puede esperar a varias entradas y la publicación debe esperar a que la carga esté lista. El orden depende de los datos necesarios, no solo de una hora del reloj.
Ver la infografía en tamaño completo ↗Orden de ejecución, sin confundirlo con el flujo de datos
Si extraer debe terminar antes de validar, crea una dependencia dirigida entre las dos tareas. Airflow representa ese orden en un DAG: un grafo sin ciclos. Una dependencia no copia un archivo ni transmite automáticamente el resultado; para eso necesitas un mecanismo de datos, como los valores de TaskFlow/XCom o un almacén compartido apropiado.
Esta práctica usa Python 3.12 y Apache Airflow 3.3.2. La documentación de esta versión recomienda >> y << para dependencias individuales. Los métodos explícitos set_upstream y set_downstream siguen siendo válidos. «Recomendado» no significa que esos métodos estén retirados.
Cuatro formas equivalentes de una relación
Estas líneas, por separado, expresan extraer → validar. Elige una para esa relación; no hace falta repetir las cuatro en el mismo archivo.
extraer >> validar
validar << extraer
extraer.set_downstream(validar)
validar.set_upstream(extraer)
Un DAG completo para comprobar el grafo
Guarda este archivo como dependencias_cursalo.py. Sus tareas vacías sirven para comprobar las relaciones sin acceder a servicios externos, enviar correos ni modificar datos de clientes. El grafo esperado es extraer → validar → transformar → guardar.
from datetime import datetime, timezone
from airflow.sdk import DAG
from airflow.providers.standard.operators.empty import EmptyOperator
with DAG(
dag_id="dependencias_cursalo",
start_date=datetime(2026, 1, 1, tzinfo=timezone.utc),
schedule=None,
catchup=False,
default_args={"retries": 0},
) as dag:
extraer = EmptyOperator(task_id="extraer")
validar = EmptyOperator(task_id="validar")
transformar = EmptyOperator(task_id="transformar")
guardar = EmptyOperator(task_id="guardar")
extraer.set_downstream(validar)
transformar.set_upstream(validar)
transformar >> guardar
if __name__ == "__main__":
dag.test()
Preparar y ejecutar una práctica aislada
Trabaja en una carpeta propia de la lección, con el archivo anterior. El directorio .airflow-practica guarda la base de metadatos y los logs de este ejercicio; no uses la configuración o la base de datos de un servicio existente. La serialización registra los DAG antes de crear la ejecución de prueba en esta versión.
python3.12 -m venv .venv
.venv/bin/python -m pip install apache-airflow==3.3.2 \
--constraint https://raw.githubusercontent.com/apache/airflow/constraints-3.3.2/constraints-3.12.txt
export AIRFLOW_HOME="$PWD/.airflow-practica"
export AIRFLOW__CORE__DAGS_FOLDER="$PWD"
export AIRFLOW__CORE__LOAD_EXAMPLES=False
.venv/bin/airflow db migrate
.venv/bin/airflow dags reserialize
.venv/bin/python dependencias_cursalo.py
En la verificación del 2 de octubre de 2026 se importó este DAG con Python 3.12.3 y Airflow 3.3.2, se comprobó el grafo de cuatro tareas y se ejecutó la prueba local con las cuatro tareas y el DAG en estado success. Esta comprobación no es una prueba de rendimiento, de un scheduler de producción o de un clúster.
Errores que debes poder explicar
- Un ciclo:
guardar >> extraercerraría el circuito. El grafo debe seguir siendo acíclico. - Orden y datos: una dependencia permite esperar a otra tarea, pero no entrega sus archivos por sí sola.
- Tarea independiente: una tarea sin relación con las otras puede ser elegible por separado; no es cierto que Airflow solo ejecute tareas alcanzables desde una única raíz.
- Listas:
inicio >> [a, b]crea dos relaciones; conectar listas completas puede necesitarchainocross_downstream, según el grafo deseado. - Importaciones: en esta práctica usa
airflow.sdky el operador deairflow.providers.standard; no mezcles importaciones de tutoriales de Airflow 1.x con la versión fijada.
Ejercicio y criterio de revisión
Añade una tarea vacía revisar entre transformar y guardar. Dibuja las cuatro flechas esperadas, comprueba los identificadores de cada tarea y repite la prueba. Entrega el archivo, las versiones y el estado final; no anotes «probado» solo porque el archivo se pudo importar.
Consulta también la guía de TaskFlow para una práctica posterior con valores entre tareas. Guarda los logs en el directorio de este ejercicio. Para reiniciar, elimina únicamente su carpeta .airflow-practica después de detener cualquier proceso de práctica que hayas abierto; conserva el código y no apuntes la limpieza a otro servicio.
Sigue con Apache Airflow: Orquestación de Pipelines ETL Complejos con DAGs
Esta lección forma parte de un curso de Cursalo. Revisa su programa y elige entre la compra individual o el acceso a toda la escuela.
Si ya tenías acceso a este curso, entra con tu cuenta: tus derechos y tu progreso se conservan. No necesitas comprarlo de nuevo.