Mejores Prácticas de Ingeniería de Datos
Pipelines comprobables, observables y reproducibles que sobreviven a reintentos, cambios de esquema y noches de guardia.
Cómo Usar Esta Lista
- Aplica las secciones A-D al diseñar un nuevo DAG, flujo o activo.
- Úsala como lista de verificación de PR para cualquier cambio que afecte la ingesta, transformaciones o marts.
- Combínala con Confiabilidad del Flujo de Trabajo cuando ocurran incidentes.
A - Data Lake y Almacenamiento
- La capa raw es de solo añadir. Los datos nuevos llegan en particiones fechadas; nunca modifiques archivos raw históricos.
- Parquet con zstd para capas de analítica. Incrusta el esquema; evita marts CSV.
- Particionar por clave de lote lógica.
dt=orun_id=permite la sobrescritura idempotente. - Archivos de tamaño objetivo adecuado. Compacta fragmentos pequeños a objetos de ~128-512 MB.
- Almacenar marcas de tiempo en UTC. Documenta la zona horaria de visualización por separado.
B - Código y Pruebas
- Funciones puras para la lógica de transformación. Prueba con pytest y tmp_path Parquet sin orquestador.
- Fija dependencias con archivos lock de uv. Versiones de pandas 2.2+, Polars 1.x, pyarrow que coincidan con CI y producción.
- Pruebas de esquema en claves y rangos. Las pruebas de Pandera o dbt bloquean lotes incorrectos.
- No realizar trabajo pesado en el momento de parseo del DAG. Solo importaciones y E/S dentro de las tareas.
- Pasar URIs, no DataFrames, en el estado del orquestador. El almacenamiento XCom/metadatos no es un data lake.
C - Operaciones y Confiabilidad
- Registrar run_id, partición, input_rows, output_rows, duración. JSON estructurado para búsqueda.
- Reintentos solo con idempotencia. Sobrescritura de particiones o claves de fusión - ver guía de flujo de trabajo.
- Alertar sobre fallo final y incumplimiento de SLA. No cada reintento transitorio.
- DLQ o cuarentena para eventos venenosos. Fallos de esquema exportan diagnósticos a nivel de fila de forma segura.
- Documentar el procedimiento de backfill. Incluir
max_active_runsy puertas de validación.
D - Gobernanza y Entrega
- Modelos por capas: staging, intermediate, mart. Los consumidores solo leen marts.
- Etiquetar y minimizar PII temprano. Hashear en staging; restringir el acceso a cuarentena.
- Linaje en git. Manifiesto de dbt, repositorio de DAG, o grafo de activos de Dagster - una única fuente de verdad.
- Contratos de datos con productores. Notificaciones de cambios de volumen y esquema antes del despliegue.
- Las postmortems actualizan esta lista. Añadir reglas cuando los incidentes revelen lagunas.
Preguntas Frecuentes
¿Batch o stream primero?
- Empieza con batch diario/horario hasta que los requisitos de latencia fuercen el streaming.
- El micro-batch a menudo cubre "casi tiempo real" de forma más económica.
¿Airflow, Prefect o Dagster?
- Usa lo que las operaciones puedan ejecutar de forma confiable hoy.
- Los equipos de Python nuevos a menudo eligen Prefect/Dagster; las empresas ya pueden tener Airflow.
¿Dónde encaja dbt?
- Transformaciones en el warehouse con pruebas/documentación.
- Python ETL carga tablas limpias de staging que dbt referencia.
¿Cuántas pruebas son suficientes?
- Pruebas de esquema en cada columna de clave primaria.
- Pruebas unitarias en funciones de transformación no triviales.
- Una prueba de integración en una partición de muestra de extremo a extremo.
¿Datos de desarrollo local?
- Muestras de fragmentos de Parquet de 10k filas comprometidos o generados en fixtures de CI.
- Nunca copies PII de producción a portátiles.
¿Cómo versiono los marts?
- Esquema que rompe: nueva tabla
fct_orders_v2o columna de versión con ventana de migración.
¿Spark vs pandas?
- pandas/Polars en un solo nodo hasta que se mida el dolor.
- Spark cuando los datos y el shuffle de uniones exceden una máquina.
¿Cómo manejo hechos que llegan tarde?
- Documentar la ventana de fusión (por ejemplo, reprocesar las últimas 3 particiones
dtcada noche).
¿Pipeline de CI?
uv sync && pytest && ruff check . && python -m jobs.daily_orders --dry-run- Añade un paso
dbt buildo validación Pandera cuando sea aplicable.
¿Quién es dueño de la calidad de los datos?
- Los productores son dueños del esquema; los dueños del pipeline aplican las puertas; los consumidores señalan anomalías.
Relacionado
- Conceptos Básicos de Ingeniería de Datos - introducción al ciclo de vida
- Confiabilidad del Flujo de Trabajo - flujo de trabajo de idempotencia
- Validación y Calidad de Datos - puertas de esquema
- Formatos de Archivo - diseño de Parquet
- Mejores Prácticas de Análisis de Datos - hábitos de análisis upstream
Versiones de Stack: Esta página fue escrita para Python 3.14.0 (estable 3.14, mantenimiento 3.13), FastAPI 0.115+, Django 5.2, Flask 3.1, Pydantic 2, PyTorch 2.6+, pandas 2.2+, Polars 1.x, ruff 0.9+, y uv 0.6+.