CommunityPesquisa e Análise de Dadosgithub.com

Projetar Backfills e Replays

Planeje e execute backfills e replays seguros de dados — reprocessamento idempotente de janelas históricas, execução partição por partição, isolando computação de backfill da produção, verificando resultados e evitando dupla contagem ou alteração do histórico. Use ao preencher histórico de um modelo novo ou corrigido, reprocessar após um bug, reproduzir eventos ou carregar histórico para um novo pipeline sem corromper dados existentes.

O que é Projetar Backfills e Replays?

Este skill orienta engenheiros de dados no planejamento e execução segura de backfills e replays, operações críticas que reescrevem partes do histórico. Ele enfatiza a necessidade de idempotência antes de qualquer backfill, define um fluxo passo a passo (desde confirmar idempotência até verificar totais e retomar a programação normal), e oferece padrões como backfill por partição com paralelismo limitado e isolamento de computação. Suporta plataformas como dbt (filtro de janela ou --full-refresh) e Airflow (catchup/backfill), alertando sobre armadilhas comuns como backfill de jobs não idempotentes, execução em lote único gigante, compartilhamento de computação com produção e falta de verificação de resultados. O objetivo é tornar backfills uma operação segura, repetível e que não degrade SLAs de produção.

Funciona com~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 Pesquisa e Análise de Dados skills: affaan-m/uspto-database, affaan-m/scholar-evaluation, affaan-m/literature-review · View all 6 →

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

O que Projetar Backfills e Replays faz?

Quando usar

  • Carregar histórico para um novo modelo/pipeline.
  • Reprocessar janelas passadas após corrigir um bug de transformação.
  • Reproduzir eventos ou recalcular uma tabela a partir dos dados brutos.
  • NÃO use para execuções incrementais normais (use building-dbt-models / authoring-airflow-dags).

Por que merece cuidado

Backfills são a operação de rotina mais perigosa na engenharia de dados: eles reescrevem o histórico. Feitos errado, causam dupla contagem, alteram números de ontem ou sobrecarregam a produção. Feitos certo, são chatos e repetíveis. O pré-requisito é idempotência (veja writing-idempotent-transformations).

Fluxo de trabalho

- [ ] Confirme que a transformação é idempotente (reexecutar == executar uma vez) ANTES de fazer backfill
- [ ] Defina a janela exata e a granularidade da partição
- [ ] Execute uma partição em modo dry-run; verifique contagens/somas versus origem
- [ ] Execute partição por partição (paralelismo limitado), não de uma vez
- [ ] Isole a computação do backfill das cargas de trabalho de produção
- [ ] Verifique totais e reconcilie; depois retome a programação normal
  1. Prove idempotência primeiro. Se reexecutar uma janela pode alterar resultados, corrija isso antes de tocar no histórico. Fazer backfill de um job não idempotente multiplica dados.
  2. Defina o escopo com precisão. Início e fim exatos e a unidade de partição (dia/hora/região).
  3. Execute uma partição em dry-run e reconcilie com a origem antes de escalar.
  4. Divida a execução em blocos. Processe partições em lotes limitados para que você possa monitorar, pausar e retomar — nunca um job gigante e ilimitado.
  5. Isole a computação. Use um warehouse/cluster/pool separado para que o backfill não prejudique os SLAs da produção.
  6. Verifique + retome. Reconcilie totais sobre o intervalo do backfill e depois devolva à programação normal.

Padrões

Backfill idempotente por partição — cada sobrescrita de partição é independente e segura para tentar novamente:

# Paralelismo limitado, um dia de cada vez; cada dia sobrescreve sua própria partição.
for day in $(seq_dates 2026-01-01 2026-01-31); do
  run_transform --run-date "$day"   # delete-insert / MERGE apenas para aquele dia
done

Airflow — catchup/backfill reexecuta intervalos; só é seguro quando as tasks são idempotentes e parametrizadas pelo intervalo de dados. dbt — filtre o modelo incremental para a janela alvo, ou use --full-refresh em uma janela limitada.

Isole + limite — warehouse/cluster dedicado e um limite de concorrência para que o backfill não degrade dashboards ao vivo.

Armadilhas comuns

  • Fazer backfill de um job não idempotente — duplicatas ou totais alterados; torne-o idempotente primeiro.
  • Um único job gigante e ilimitado — não é possível monitorar ou retomar, e sobrecarrega a produção; vá partição por partição.
  • Compartilhar computação com produção — backfills causam picos de carga e quebram SLAs; isole.
  • Sem verificação — assumir sucesso; reconcilie contagens/somas sobre o intervalo.
  • Alterar a lógica no meio do backfill — histórico inconsistente; fixe a versão do código para toda a execução.
  • Esquecer downstream — fazer backfill de uma tabela base sem atualizar marts/agregados dependentes os deixa 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.

Habilidades Relacionadas