Boas Práticas de Engenharia de Dados
Pipelines testáveis, observáveis e reproduzíveis que sobrevivem a retentativas, desvios de esquema e noites de plantão.
Como Usar Esta Lista
- Aplique as seções A-D ao projetar um novo DAG, fluxo ou ativo.
- Use como checklist de PR para qualquer alteração que toque em ingestão, transformações ou marts.
- Combine com Confiabilidade de Fluxo de Trabalho quando ocorrerem incidentes.
A - Data Lake & Armazenamento
- Camada raw é somente anexável. Novos dados chegam em partições datadas; nunca modifique arquivos raw históricos.
- Parquet com zstd para camadas de análise. Incorpore o esquema; evite marts CSV.
- Particione por chave lógica de lote.
dt=ourun_id=permite sobrescrita idempotente. - Arquivos de tamanho adequado. Compacte pequenos fragmentos para objetos de ~128-512 MB.
- Armazene timestamps em UTC. Documente o fuso horário de exibição separadamente.
B - Código & Testes
- Funções puras para lógica de transformação. Teste com pytest e tmp_path Parquet sem orquestrador.
- Fixe dependências com arquivos uv lock. Versões de pandas 2.2+, Polars 1.x, pyarrow correspondem ao CI e à produção.
- Testes de esquema em chaves e intervalos. Pandera ou testes dbt bloqueiam lotes ruins.
- Sem trabalho pesado no tempo de análise do DAG. Importações e I/O apenas dentro das tarefas.
- Passe URIs, não DataFrames, no estado do orquestrador. O armazenamento XCom/metadados não é um data lake.
C - Operações & Confiabilidade
- Registre run_id, partição, input_rows, output_rows, duration. JSON estruturado para busca.
- Retentativas apenas com idempotência. Sobrescrita de partição ou chaves de mesclagem - consulte o guia de fluxo de trabalho.
- Alerta sobre falha final e perda de SLA. Não toda retentativa transitória.
- DLQ ou quarentena para eventos venenosos. Falhas de esquema exportam diagnósticos em nível de linha de forma segura.
- Documente o procedimento de backfill. Inclua
max_active_runse portões de validação.
D - Governança & Handoff
- Modelos em camadas: staging, intermediate, mart. Consumidores leem apenas os marts.
- PII rotulada e minimizada precocemente. Hash no staging; restrinja o acesso à quarentena.
- Linha de dados no git. Manifest dbt, repositório DAG, ou gráfico de ativos Dagster - uma única fonte de verdade.
- Contratos de dados com produtores. Avisos de alteração de volume e esquema antes do deploy.
- Postmortems atualizam esta checklist. Adicione regras quando incidentes revelarem lacunas.
FAQs
Lote ou stream primeiro?
- Comece com lotes diários/horários até que os requisitos de latência exijam streaming.
- Micro-lotes geralmente cobrem "quase tempo real" de forma mais barata.
Airflow, Prefect ou Dagster?
- Use o que as operações podem executar de forma confiável hoje.
- Equipes Python novas geralmente escolhem Prefect/Dagster; empresas podem já ter Airflow.
Onde o dbt se encaixa?
- Transformações no warehouse com testes/documentação.
- Python ETL carrega tabelas de staging limpas que o dbt referencia.
Quão testar é suficiente?
- Testes de esquema em cada coluna de chave primária.
- Testes unitários em funções de transformação não triviais.
- Um teste de integração em uma partição de amostra de ponta a ponta.
Dados de desenvolvimento local?
- Amostras de fatias Parquet de 10 mil linhas commitadas ou geradas em fixtures de CI.
- Nunca copie PII de produção para laptops.
Como versionar marts?
- Esquema que quebra: nova tabela
fct_orders_v2ou coluna de versão com janela de migração.
Spark vs pandas?
- pandas/Polars em um único nó até que a dor medida ocorra.
- Spark quando os dados e o shuffle de junção excedem uma máquina.
Como lidar com fatos que chegam tarde?
- Documente a janela de mesclagem (por exemplo, reprocesse as últimas 3 partições
dtdiariamente).
Pipeline de CI?
uv sync && pytest && ruff check . && python -m jobs.daily_orders --dry-run- Adicione um passo de validação
dbt buildou Pandera quando aplicável.
Quem é o dono da qualidade dos dados?
- Produtores são donos do esquema; proprietários de pipeline aplicam portões; consumidores sinalizam anomalias.
Relacionado
- Noções Básicas de Engenharia de Dados - introdução ao ciclo de vida
- Confiabilidade de Fluxo de Trabalho - fluxo de trabalho de idempotência
- Validação e Qualidade de Dados - portões de esquema
- Formatos de Arquivo - layout Parquet
- Boas Práticas de Análise de Dados - hábitos de análise upstream
Versões da Stack: Esta página foi escrita para Python 3.14.0 (estável 3.14, manutenção 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+, e uv 0.6+.