Python Data Science Program
📓 Abrir notebook en GitHub

Clase 209 — Pipelines con Prefect o Dagster

Parte: 5 — Ingeniería de Datos · Fuente: Prefect 3 docs + Dagster docs + Reis & Housley cap. 8. ⏱️ Duración estimada: 75 min.

🎯 Objetivo

Construir el mismo pipeline de Clase 208 con Prefect 3 (API Python moderna, hybrid execution) y con Dagster (asset-oriented, mejor lineage). Entender qué problemas resuelven mejor que Airflow y cuándo elegir cada uno.

📚 Resultados de aprendizaje

Al finalizar, el estudiante podrá:

🗺️ Temas

# Tema Por qué importa
1 Prefect 3: flows, tasks, deployments Reemplaza DAGs con código Python idiomático.
2 Work pools + workers Hybrid execution: control en cloud, compute donde quieras.
3 Dagster: asset-oriented vs task-oriented Lineage automático, mejor para data products.
4 Software-defined assets (SDA) Cada asset es código + metadata + checks.
5 Scheduling: cron, interval, event-driven Las 3 formas de disparar.
6 Cuándo migrar de Airflow Costo de migración vs beneficio.

📖 Definiciones y características

📂 Dataset / recursos

🧪 Ejercicios

  1. Prefect flow: copiá la lógica del DAG Airflow al patrón Prefect: @flow def btc_pipeline(): notify(transform(load(extract()))). Corré python btc.py directo (no necesita scheduler).
  2. Deployment Prefect: flow.serve(name="btc-hourly", cron="0 * * * *"). Dejá corriendo, observá ejecuciones programadas en localhost:4200.
  3. Dagster assets: convertí las funciones a @asset def btc_price(), @asset def daily_avg(btc_price). Dagster infiere daily_avg depende de btc_price. UI muestra el grafo.
  4. Materializar: en Dagster UI, click "Materialize" sobre btc_price. Solo se ejecuta ese asset; daily_avg queda "stale" hasta que se materialice también.
  5. Comparativa: mismo pipeline en Airflow + Prefect + Dagster. Compará LOC, claridad, UI, velocidad de feedback dev.

📝 Homework verificable

Repo con el mismo pipeline implementado en los 3 frameworks:

  1. airflow/dags/btc.py (de Clase 208).
  2. prefect/btc.py con @flow/@task y deployment programado.
  3. dagster/btc.py con @asset definitions y un Definitions object.
  4. README comparativo: LOC, complejidad de setup, calidad de UI, lineage support, cuándo elegir cada uno.
  5. Bonus: GitHub Actions que corre los 3 en CI y verifica que producen el mismo output.

Criterio de aceptación: los 3 pipelines producen idénticos resultados sobre el mismo input; el README compara honestamente fortalezas/debilidades.

⚠️ Errores comunes

Síntoma / mensaje Causa y cómo arreglar
prefect server start falla Otro proceso en :4200. Fix: --port 4201.
Deployment no se ejecuta automáticamente Workers no están corriendo o pool mal configurado. Fix: prefect worker start --pool default-agent-pool.
Dagster asset materialization "stale" pero no se actualiza Auto-materialization no está habilitada. Fix: agregar AutoMaterializePolicy.eager() al asset.
Re-import circular entre @assets Dagster intenta resolver dependencias en import. Fix: definir todos los assets en un solo módulo o usar SourceAsset para externos.
Performance lento en Prefect con muchas tasks El backend default está en SQLite. Fix: para >1000 tasks/run usar Postgres backend.
Mixed Airflow + Prefect + Dagster en el mismo repo causa import conflicts Cada uno tiene su propio ecosistema. Fix: separar en repos o usar venvs distintos.

❓ Preguntas frecuentes

❓ Airflow vs Prefect vs Dagster en una frase

❓ ¿Vale la pena migrar desde Airflow?

Calcular: (costo de migrar N DAGs) vs (ahorro mensual en mantenimiento + horas dev). Si Airflow funciona y nadie está sufriendo: no. Si nuevos pipelines: empezar con Prefect/Dagster, dejar los viejos donde están.

❓ ¿Prefect Cloud o self-hosted?

Cloud: control plane managed, free tier generoso, hybrid execution (workers tuyos). Self-hosted: prefect server start corre todo local — para dev. Para prod: Cloud es mucho más práctico.

❓ ¿Dagster's asset model es overkill para pipelines simples?

Para 3-5 tareas en cascada: sí, Prefect es más simple. Para data warehouse con 100+ tablas modeladas: Dagster brilla (lineage, freshness, partition awareness).

❓ ¿Cómo manejo secrets en Prefect/Dagster?

Ambos integran con AWS Secrets Manager / GCP Secret Manager / Vault.

❓ ¿Puedo usar Dagster con dbt?

Sí — dagster-dbt carga modelos dbt como assets Dagster automático. Lineage atraviesa Python → dbt → SQL → tablas. Es el sweet spot del stack moderno.

🔗 Referencias

📥 Material descargable

➡️ Siguiente clase

Clase 210 — PySpark para datasets grandes