DataOps para Ingeniería Estadística
Pipelines de datos como código, testing de datos, linaje y entornos aislados
DataOps aplica los principios de DevOps y Agile al ciclo de vida de los datos.
Este capítulo cubre cuatro prácticas esenciales:
-
Pipelines de datos como código: transformaciones versionadas, reproducibles y orquestadas.
-
Testing de datos: verificar que las transformaciones producen los resultados esperados.
-
Entornos de datos aislados: desarrollo y pruebas sin afectar producción.
-
Linaje automatizado: trazabilidad de qué transforma qué y para qué.
Diagrama de flujo general de DataOps
1. Pipelines de Datos como Código
1.1 Principio
Un pipeline de datos no es un conjunto de scripts ejecutados manualmente. Es código versionado, idempotente, orquestado y probado de la misma forma que el código de la aplicación.
Características de un pipeline de datos de producción:
- Idempotente: ejecutarlo múltiples veces produce el mismo resultado.
- Declarativo: describe qué transformar, no cómo orquestar la ejecución.
- Versionado en Git: cada cambio tiene un commit, un autor y una justificación.
- Documentado: cada modelo de datos tiene descripción, propietario y tests.
1.2 dbt como estándar para transformaciones SQL
dbt (data build tool) es el estándar de facto para transformaciones SQL declarativas. Cada transformación es un archivo .sql versionado que dbt compila, ejecuta y documenta automáticamente.
Diagrama de flujo de dbt
Estructura de un proyecto dbt:
Ejemplo de modelo dbt (models/marts/mart_features_credito.sql):
Propósito: este modelo transforma datos crudos en features estructuradas para modelos de ML. No contiene lógica de entrenamiento ni predicción; solo orquesta transformaciones SQL de forma reproducible.
Documentación inline:
Tests genéricos en dbt:
Ejecutar tests:
Parámetros de ejecución (macros para configurar el pipeline):
Ejecución del pipeline:
2. Testing de Datos
Diagrama de flujo de testing de datos
2.1 Capas de testing de datos
| Capa | Herramienta | Propósito | Cuándo ejecutar |
|---|---|---|---|
| Esquema y unicidad | dbt tests | Validar tipos, nulos, unicidad, rangos | En cada ejecución del pipeline |
| Consistencia de negocio | Tests singulares SQL | Verificar relaciones y propiedades de negocio | En cada ejecución |
| Calidad estadística | Great Expectations | Distribuciones, percentiles, cardinalidad | En ingesta y antes de entrenar |
| Observabilidad | Soda Core | Anomalías automáticas sin reglas predefinidas | Continuo en producción |
2.2 Tests unitarios de transformaciones Python
Cuando las transformaciones usan Python (ETL, feature engineering), se aplican tests unitarios con pytest:
2.3 Tests de consistencia entre pipeline y modelo
Verificar que los datos que llegan al modelo en producción son compatibles con los del entrenamiento:
3. Entornos de Datos Aislados
3.1 Por qué los entornos de datos son críticos
En el desarrollo de software tradicional, los entornos de desarrollo, staging y producción están bien separados. En proyectos de datos, esta separación suele fallar: se desarrollan transformaciones contra tablas de producción, se prueban modelos con datos reales no anonimizados, o los cambios en staging afectan a producción.
3.2 Estrategia de entornos con dbt
dbt soporta múltiples entornos mediante targets en profiles.yml:
Diagrama de flujo de entornos
Con esta configuración:
dbt run→ ejecuta en el schema personal del desarrollador (sin afectar staging ni producción).dbt run --target staging→ ejecuta en staging.dbt run --target production→ solo desde CI/CD, nunca manual.
3.3 Bases de datos efímeras para pruebas con Docker
Para pruebas de integración, se levanta una base de datos efímera con datos de muestra:
3.4 Datos de prueba con anonimización
Los datos de prueba nunca deben contener PII real. Se generan de tres formas:
- Datos sintéticos (preferido para desarrollo):
- Datos anonimizados de producción para staging (cuando es necesario más realismo):
4. Linaje Automatizado de Datos
4.1 Qué es el linaje y por qué importa
El linaje de datos es el mapa que muestra cómo los datos fluyen desde las fuentes originales hasta los modelos y dashboards. En ingeniería estadística, el linaje es esencial para:
-
Reproducibilidad: dado un modelo, saber exactamente qué tablas y transformaciones generaron sus features.
-
Impacto de cambios: antes de modificar una tabla fuente, saber qué modelos se verán afectados.
-
Auditoría regulatoria: demostrar que los datos personales no fluyen a sistemas no autorizados.
Diagrama de flujo de linaje
4.2 Linaje con dbt
dbt genera automáticamente un grafo de linaje a nivel de modelo:
Para publicar el linaje en DataHub:
4.3 Linaje entre sistemas con OpenLineage
OpenLineage captura eventos de linaje de múltiples herramientas (dbt, Airflow, Spark, MLflow) en un formato estándar y los centraliza en DataHub:
4.4 Linaje de modelos MLflow → DataHub
El vínculo entre las features (dbt) y los modelos (MLflow) se cierra registrando el dataset en MLflow y emitiendo un evento de linaje:
5. Orquestación de Pipelines DataOps
5.1 Prefect para orquestación Python
Prefect es el orquestador recomendado para pipelines estadísticos en Python, con soporte nativo para reintentos, logging estructurado y observabilidad.
Diagrama de flujo de Prefect
5.2 Integración DataOps ↔ MLOps
El pipeline DataOps se ejecuta antes del pipeline MLOps. La integración se logra mediante un flujo de orquestación que los encadena:
Diagrama de flujo de integración DataOps ↔ MLOps
6. Principios DataOps: Resumen
| Principio | Implementación |
|---|---|
| Pipelines como código | dbt (SQL), Prefect/Airflow (Python), SQLMesh |
| Testing de datos | dbt tests, Great Expectations, pytest para ETL Python |
| Entornos aislados | Schemas por desarrollador en dbt, Docker para bases de datos de test |
| Datos de prueba | Sintéticos o anonimizados; nunca PII real en desarrollo |
| Linaje automatizado | OpenLineage, dbt docs, DataHub |
| Idempotencia | Todas las transformaciones producen el mismo resultado si se ejecutan múltiples veces |
| Versionado | Git para código dbt, DVC para datos, MLflow para modelos |
| Monitoreo | Soda Core para observabilidad continua, alertas por severidad |
Referencias
-
SQLMesh: https://sqlmesh.com/
-
Prefect: https://www.prefect.io/
-
OpenLineage: https://openlineage.io/
-
DataHub: https://datahubproject.io/
-
Great Expectations: https://docs.greatexpectations.io/
-
Soda Core: https://docs.soda.io/
-
Faker (datos sintéticos): https://faker.readthedocs.io/
Documentos relacionados
- Estrategia de Datos y Data Governance: gobernanza, metadatos y contratos de datos.
- Feature Store y Gestión de Features: gestión de features reutilizables y point-in-time correctness.
- MLflow para la Gestión del Ciclo de Vida de Modelos Estadísticos: registro y versionado de modelos integrado con pipelines DataOps.
- Guía de Despliegue: automatización, CI/CD, Docker y despliegue de pipelines de datos y modelos.