Diseno y arquitectura de pipelines
El diseno de un pipeline empieza antes de elegir herramienta. La pregunta importante no es si usar Airflow, NiFi, Spark o dbt, sino que garantias necesita el flujo de datos.
Contrato de datos
Un contrato de datos describe que puede esperar el consumidor del dataset.
Debe incluir:
- Nombre del dataset.
- Fuente original.
- Propietario funcional y tecnico.
- Frecuencia de actualizacion.
- Campos, tipos y significado.
- Claves primarias o claves naturales.
- Campos obligatorios.
- Reglas de calidad.
- Politica de cambios de esquema.
- Retencion y sensibilidad de los datos.
Ejemplo:
dataset: fact_ventas
fuente: api_ventas
frecuencia: cada hora
clave: id_venta
campos obligatorios: id_venta, fecha, cliente_id, importe, moneda
SLA: disponible antes del minuto 15 de cada horaFuente
Analiza la fuente antes de programar:
- Si permite extraccion incremental.
- Si tiene paginacion, limites o ventanas temporales.
- Si expone fecha de modificacion.
- Si puede entregar duplicados.
- Si el esquema cambia sin aviso.
- Si hay campos sensibles.
- Si el orden de llegada importa.
Una fuente sin contrato claro obliga al pipeline a defenderse mejor.
Destino
El destino condiciona el diseno:
- Un data lake prioriza trazabilidad, formato y particionado.
- Un data warehouse prioriza modelos consultables y coste de consulta.
- Una base operacional prioriza latencia y consistencia.
- Un indice de busqueda prioriza documentos y actualizaciones parciales.
- Un sistema de ML prioriza reproducibilidad de features.
No disenes igual una tabla historica para analisis que una API que necesita datos recientes.
Separacion de responsabilidades
Un pipeline mantenible separa fases:
extract -> load raw -> validate -> transform -> publish -> monitorEvita mezclar demasiadas responsabilidades en el mismo paso. Por ejemplo, un unico script que llama una API, corrige datos, aplica reglas de negocio, escribe una tabla final y manda alertas sera dificil de probar y reprocesar.
Configuracion
La configuracion debe estar fuera de la logica principal:
- Rutas de entrada y salida.
- Credenciales.
- Ventanas de fechas.
- Nombres de tablas.
- Umbrales de calidad.
- Parametros por entorno.
Ejemplo:
source: api_ventas
target_table: curated.fact_ventas
watermark_column: updated_at
quality:
min_rows: 1
required_columns:
- id_venta
- fecha
- importeVersionado
Versiona todo lo que afecte al resultado:
- Codigo de transformacion.
- Esquemas.
- Consultas SQL.
- Configuracion.
- DAGs o flujos.
- Jobs de despliegue.
- Documentacion del contrato.
Si no puedes saber que version produjo un dataset, sera dificil explicar diferencias entre ejecuciones.
Lineage
El lineage responde:
- De donde viene este dato.
- Que transformaciones se aplicaron.
- Que datasets dependen de el.
- Que se rompe si cambia una columna.
Aunque no tengas una herramienta avanzada al principio, puedes empezar documentando entradas, salidas y dependencias en cada capitulo del pipeline.
Checklist de diseno
- La fuente esta identificada y documentada.
- El destino y el formato estan definidos.
- Existe una clave para idempotencia o deduplicacion.
- Los datos crudos se conservan.
- Hay estrategia de errores y cuarentena.
- El pipeline puede reprocesar una ventana concreta.
- Hay metricas minimas de filas, duracion y fallos.
- Hay propietario y runbook.
