Check this post in English 🇬🇧.
— Hey, el job de ayer falló. Como puedo recuperar los datos?
— Que putada! Bueno, primero necesitas obtener una lista de todos los ficheros que han sido parcialmente actualizados en S3, borrar los ficheros y sus correspondientes filas en la tabla con un “DELETE FROM … WHERE”. Una vez hecho, ya puedos volver a correr el job.
— ¿Por qué no puedo simplemente volver a correr el job?
— Porque eso crearía duplicados en la tabla.
Fue solo un ejemplo, pero nunca deberías tener una conversación así con un compañero de trabajo. Como ingeniero de datos, he lidiado con pipelines espinosos que me han enseñado lecciones valiosas. Aquí hay diez reglas que me han ayudado a desarrollar trabajos escalables y resilientes. He aprendido estas reglas a través de la experiencia, rompiendo cosas, activando alarmas y pasando largas horas depurando. Estas reglas están sesgadas por mi experiencia con Python, Airflow y Kubernetes, pero aún así pueden ser útiles en tu carrera como ingeniero de datos.
-
Desacopla la configuración de la implementación. Build Once, Deploy Anywhere. No necesitas dos piezas diferentes de código para llevar dos tablas de PostgreSQL a Redshift. Proyectos como Meltano, dlt y Airbyte son buenas herramientas de integración de código abierto para no reinventar la rueda.
-
Haz que tus trabajos sean idempotentes. Otras personas usarán tus pipelines. Si ejecutan tus trabajos múltiples veces (hay innumerables razones para hacerlo), asegúrate de que producirán los mismos resultados que si los ejecutaran solo una vez.
-
Aísla los entornos de desarrollo y producción. Esto permitirá que tú y tu equipo prueben los pipelines de manera segura. ¿Quieres sobrescribir una tabla de producción al desarrollar una nueva versión de un trabajo?
-
Mantén la escalabilidad siempre en mente. Si trabajas en una startup, esto es muy importante. Kubernetes + Airflow es una combinación excelente cuando el número de trabajos comienza a crecer.
-
Aprende a programar buenas CLI. Implementa CLI amigables para el usuario y usa argumentos y variables de entorno para configurarlas. Herramientas como Typer lo hacen aún más divertido.
-
Aísla las dependencias de los trabajos. No caigas en el infierno de las dependencias. Los entornos virtuales y los contenedores son excelentes herramientas para evitar conflictos entre paquetes. Y no olvides fijar tus dependencias.
-
Haz que tus pipelines sean fáciles de configurar. Da visibilidad a tus pipelines moviendo los parámetros de configuración a un formato legible para humanos. Esto agregará una capa de metadatos a tus pipelines y permitirá que usuarios que no usan Python puedan configurarlos. Los archivos YAML o JSON son más fáciles de configurar que un DAG de Airflow.
-
Mide el uso de recursos. Si no puedes medirlo, no puedes mejorarlo. Confía en herramientas y servicios como Grafana o Datadog para monitorear tus trabajos.
-
No expongas tus secretos. Limita los permisos y mantén tus variables sensibles seguras. No pases información sensible cuando sea posible. Los secretos de Kubernetes o un gestor de secretos en la nube son mejores alternativas que las variables de Airflow.
-
Documenta tus pipelines, fuentes y transformaciones. Herramientas como dbt te permiten documentar y dejar que otras personas entiendan tus conjuntos de datos y pipelines. ¿Sabías que puedes incrustar documentación en markdown en tus DAGs de Airflow?