Diseño de Backfills y Reproducciones

Planifica y ejecuta backfills y reproducciones de datos seguros: reprocesamiento idempotente de ventanas históricas, ejecución partición por partición, aislamiento del cómputo de backfill de la producción, verificación de resultados y prevención de doble conteo o historial modificado. Úselo al realizar backfill de un modelo nuevo o corregido, reprocesar después de un error, reproducir eventos o cargar historial para un nuevo pipeline sin corromper datos existentes.

¿Qué es Diseño de Backfills y Reproducciones?

Esta habilidad está diseñada para ingenieros de datos que necesitan realizar backfills y reproducciones de datos de manera segura y predecible. Se enfoca en la idempotencia como requisito previo fundamental: antes de tocar el historial, es necesario confirmar que la transformación produce el mismo resultado sin importar cuántas veces se ejecute. La habilidad detalla un flujo de trabajo paso a paso que incluye definir la ventana exacta y la granularidad de la partición, realizar una ejecución de prueba en una partición para verificar resultados, ejecutar el backfill partición por partición con paralelismo acotado, aislar el cómputo del backfill de las cargas de trabajo de producción usando clústeres o pools dedicados, y finalmente verificar los totales y reanudar la programación normal. Cubre patrones específicos para herramientas como Airflow y dbt, advierte sobre errores comunes como backfilling de trabajos no idempotentes o ejecuciones masivas sin monitoreo, y subraya la importancia de verificar los resultados y refrescar dependencias aguas abajo. Es útil para cargar historial en nuevos pipelines, reprocesar ventanas después de corregir errores, o reproducir eventos, pero no para ejecuciones incrementales normales.

Compatible con~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Unknown-333/awesome-data-engineering-skills/tree/main/skills/designing-backfills-and-replays

Installed? Explore more Investigación y análisis de datos skills: affaan-m/uspto-database, affaan-m/scholar-evaluation, affaan-m/literature-review · View all 6 →

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

¿Qué hace Diseño de Backfills y Reproducciones?

Cuándo usarlo

  • Cargar historial para un nuevo modelo/pipeline.
  • Reprocesar ventanas pasadas después de corregir un error de transformación.
  • Reproducir eventos o re-derivar una tabla desde datos crudos.
  • NO lo use para ejecuciones incrementales normales (use building-dbt-models / authoring-airflow-dags).

Por qué merece cuidado

Los backfills son la operación rutinaria más peligrosa en ingeniería de datos: reescriben el historial. Si se hacen mal, duplican conteos, cambian los números de ayer o sobrecargan la producción. Si se hacen bien, son aburridos y repetibles. El requisito previo es la idempotencia (consulte writing-idempotent-transformations).

Flujo de trabajo

- [ ] Confirmar que la transformación es idempotente (re-ejecutar == ejecutar una vez) ANTES del backfill
- [ ] Definir la ventana exacta y la granularidad de la partición
- [ ] Ejecución de prueba en una partición; verificar conteos/sumas vs fuente
- [ ] Ejecutar partición por partición (paralelismo acotado), no todo de una vez
- [ ] Aislar el cómputo del backfill de las cargas de trabajo de producción
- [ ] Verificar totales y conciliar; luego reanudar la programación normal
  1. Pruebe la idempotencia primero. Si re-ejecutar una ventana puede cambiar los resultados, arregle eso antes de tocar el historial. Hacer backfill de un trabajo no idempotente multiplica los datos.
  2. Defina el alcance precisamente. Fecha/hora exacta de inicio y fin, y la unidad de partición (día/hora/región).
  3. Ejecución de prueba en una partición y concilie contra la fuente antes de escalar.
  4. Divida la ejecución. Procese las particiones en lotes acotados para poder monitorear, pausar y reanudar — nunca un trabajo gigante sin límites.
  5. Aísle el cómputo. Use un almacén/clúster/pool separado para que el backfill no perjudique los SLA de producción.
  6. Verifique + reanude. Concilie los totales en el rango del backfill, luego devuelva el control a la programación normal.

Patrones

Backfill idempotente por partición — cada sobrescritura de partición es independiente y segura de reintentar:

# Paralelismo acotado, un día a la vez; cada día sobrescribe su propia partición.
for day in $(seq_dates 2026-01-01 2026-01-31); do
  run_transform --run-date "$day"   # delete-insert / MERGE para ese día solamente
done

Airflow — catchup/backfill re-ejecuta intervalos; solo es seguro cuando las tareas son idempotentes y están parametrizadas por el intervalo de datos. dbt — filtre el modelo incremental a la ventana objetivo, o --full-refresh una ventana acotada.

Aislar + limitar — almacén/clúster dedicado y un límite de concurrencia para que el backfill no degrade paneles de control en vivo.

Errores comunes

  • Hacer backfill de un trabajo no idempotente — duplicados o totales cambiantes; hágalo idempotente primero.
  • Una ejecución gigante sin límites — no se puede monitorear ni reanudar, y sobrecarga la producción; vaya partición por partición.
  • Compartir cómputo de producción — los backfills generan picos de carga y rompen SLA; aísle.
  • Sin verificación — asumir éxito; concilie conteos/sumas en el rango.
  • Cambiar la lógica a mitad del backfill — historial inconsistente; fije la versión del código para toda la ejecución.
  • Olvidar aguas abajo — hacer backfill de una tabla base sin refrescar tablas de resumen/agregados dependientes los deja inconsistentes.

Individual skills in this repo

This repo contains 9 individual skills — each has its own dedicated page.

Unknown-333/authoring-airflow-dags

Write production-grade Apache Airflow DAGs using the TaskFlow API — idempotent tasks, correct scheduling and catchup, retries/SLAs, connections/variables, and avoiding top-level code. Use when creating or reviewing Airflow DAGs, scheduling pipelines, wiring task dependencies, configuring retries/backfills, or fixing non-idempotent tasks.

Unknown-333/building-dagster-assets

Build Dagster pipelines using software-defined assets — asset dependencies, partitions, resources and IO managers, asset checks, and schedules/sensors. Use when creating Dagster assets or jobs, modeling data as assets, adding partitions or backfills, wiring resources/IO managers, or migrating from task-based orchestration to assets.

Unknown-333/building-dbt-models

Build well-structured dbt models — staging/intermediate/marts layers, ref() and source(), materializations, and incremental models with the right strategy. Use when creating or refactoring dbt models, choosing table vs view vs incremental, structuring a dbt project, or writing incremental logic.

Unknown-333/building-feature-pipelines

Build ML feature pipelines and feature stores — point-in-time-correct joins to avoid label leakage, offline/online parity, feature freshness and backfills, and materialization with tools like Feast. Use when engineering features for ML, preventing train/serve skew or data leakage, building a feature store, or backfilling historical features for training.

Unknown-333/building-iceberg-tables

Design and operate Apache Iceberg tables — partitioning and hidden partitioning, partition/schema evolution, snapshots and time travel, compaction and small-file cleanup, and MERGE/upsert for lakehouse tables on Spark, Flink, Trino, or Snowflake. Use when creating or maintaining Iceberg tables, choosing partitioning, evolving schema/partitions, or fixing small-file and metadata bloat.

Unknown-333/building-ingestion-pipelines

Build batch and incremental data ingestion (extract-load) pipelines — full vs incremental extraction, change data capture (CDC), watermarks and high-water marks, API pagination and rate limits, and choosing managed EL tools (Fivetran, Airbyte) vs custom code. Use when ingesting data from databases, APIs, files, or SaaS into a warehouse/lake, or designing incremental extraction and CDC.

Unknown-333/building-kafka-consumers

Build reliable Apache Kafka consumers and producers — consumer groups and partition assignment, offset commit strategy, at-least-once vs exactly-once, idempotent/transactional producers, rebalancing, and dead-letter handling. Use when writing Kafka consumers/producers, configuring offset commits or consumer groups, tuning throughput, or handling rebalances and poison messages.

Unknown-333/debugging-data-pipelines

Systematically root-cause data pipeline failures and data incidents — job errors, wrong or missing data, duplicates, and freshness misses — by tracing lineage upstream, isolating the failing stage, reconciling against source, and planning a safe fix and backfill. Use when a pipeline fails, numbers look wrong, data is missing or duplicated, a dashboard is stale, or a stakeholder reports a data discrepancy.

Unknown-333/designing-data-contracts

Define and enforce data contracts between producers and consumers — explicit schema, semantics, ownership, SLAs, and versioning — to prevent silent upstream changes from breaking downstream pipelines. Use when a producer schema change could break consumers, defining an interface between teams/services and the warehouse, or adding schema enforcement at ingestion.

Skills relacionados