Conception de backfills et replays

Planifiez et exécutez des backfills et replays de données sécurisés — retraitement idempotent de fenêtres historiques, exécution partition par partition, isolement du calcul de backfill de la production, vérification des résultats, et évitement du double comptage ou de l'historique modifié. Utilisez-le pour backfill un nouveau modèle ou un modèle corrigé, retraiter après un bug, rejouer des événements, ou charger un historique pour un nouveau pipeline sans corrompre les données existantes.

Qu'est-ce que Conception de backfills et replays ?

Ce skill fournit un workflow structuré pour exécuter des backfills et replays de données de manière sécurisée en production. Il insiste sur l'importance cruciale de l'idempotence avant tout retraitement, puis définit une procédure en six étapes : prouver l'idempotence, délimiter précisément la fenêtre, tester à sec une partition, exécuter par lots, isoler le calcul, et vérifier les résultats. Il couvre des patterns concrets pour dbt, Airflow et d'autres outils, et liste les pièges courants comme le double comptage, l'absence d'isolation, ou le changement de logique en cours de route. Utile pour les ingénieurs données manipulant des pipelines batch avec Snowflake, BigQuery, Redshift, Spark, ou tout système supportant des écritures par partition.

Compatible avec~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 Recherche et analyse de données skills: affaan-m/uspto-database, affaan-m/scholar-evaluation, affaan-m/literature-review · View all 6 →

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Que fait Conception de backfills et replays ?

Quand l'utiliser

  • Charger l'historique pour un nouveau modèle/pipeline.
  • Retraiter des fenêtres passées après avoir corrigé un bug de transformation.
  • Rejouer des événements ou redériver une table à partir des données brutes.
  • Ne PAS l'utiliser pour les exécutions incrémentales normales (utilisez building-dbt-models / authoring-airflow-dags).

Pourquoi il mérite de l'attention

Les backfills sont l'opération routinière la plus dangereuse en data engineering : ils réécrivent l'historique. Mal faits, ils doublent les comptes, changent les chiffres de la veille ou surchargent la production. Bien faits, ils sont ennuyeux et reproductibles. Le prérequis est l'idempotence (voir writing-idempotent-transformations).

Workflow

- [ ] Confirmer que la transformation est idempotente (relancer == exécuter une fois) AVANT le backfill
- [ ] Définir la fenêtre exacte et la granularité de partition
- [ ] Tester à sec une partition ; vérifier les comptes/sommes par rapport à la source
- [ ] Exécuter partition par partition (parallélisme borné), pas tout d'un coup
- [ ] Isoler le calcul de backfill des charges de travail de production
- [ ] Vérifier les totaux et réconcilier ; puis reprendre la planification normale
  1. Prouver l'idempotence d'abord. Si relancer une fenêtre peut changer les résultats, corrigez cela avant de toucher à l'historique. Backfiller un job non idempotent multiplie les données.
  2. Délimiter précisément. Date de début et de fin exactes, et l'unité de partition (jour/heure/région).
  3. Tester à sec une partition et réconcilier avec la source avant de passer à l'échelle.
  4. Découper l'exécution. Traiter les partitions par lots bornés pour pouvoir surveiller, mettre en pause et reprendre — jamais un seul job géant non borné.
  5. Isoler le calcul. Utiliser un entrepôt/cluster/pool séparé pour que le backfill n'affame pas les SLA de production.
  6. Vérifier + reprendre. Réconcilier les totaux sur la plage backfillée, puis rendre la main à la planification normale.

Patterns

Backfill idempotent par partition — chaque remplacement de partition est indépendant et sûr à relancer :

# Parallélisme borné, un jour à la fois ; chaque jour écrase sa propre partition.
for day in $(seq_dates 2026-01-01 2026-01-31); do
  run_transform --run-date "$day"   # delete-insert / MERGE pour ce jour uniquement
done

Airflow — catchup/backfill relance des intervalles ; sûr uniquement si les tâches sont idempotentes et paramétrées par l'intervalle de données. dbt — filtrer le modèle incrémental sur la fenêtre cible, ou --full-refresh une fenêtre bornée.

Isoler + limiter — entrepôt/cluster dédié et un plafond de concurrence pour que le backfill ne puisse pas dégrader les tableaux de bord en production.

Pièges courants

  • Backfiller un job non idempotent — doublons ou totaux changeants ; rendez-le idempotent d'abord.
  • Un seul job géant non borné — impossible à surveiller ou reprendre, et il surcharge la production ; allez partition par partition.
  • Partager le calcul de production — les backfills font monter la charge et explosent les SLA ; isolez.
  • Pas de vérification — supposer le succès ; réconciliez les comptes/sommes sur la plage.
  • Changer la logique en cours de backfill — historique incohérent ; figez la version du code pour toute l'exécution.
  • Oublier les avals — backfiller une table de base sans rafraîchir les marts/agrégats dépendants les laisse incohérents.

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 associés