Fundamentos, padrões e cenários reais de Engenharia de Dados com Modern Data Stack
Este repositório reúne fundamentos, padrões de design e cenários end-to-end de Engenharia de Dados.
Cada módulo é independente, documentado e rodável localmente com Docker.
Use para Aprender e Treinar
- Sobre o Repositório
- Roadmap
- Arquitetura de Referência
- Módulos
- Cenários Para Praticar
- Como Rodar Localmente
- Decisões de Design
Este repositório foi criado para ser uma referência prática e técnica de Engenharia de Dados moderna. O foco não está em tutoriais introdutórios — está em como profissionais tomam decisões de arquitetura, quais trade-offs existem e como implementar soluções que funcionam em produção.
Para quem é este repositório:
- Engenheiros de Dados que querem sair do básico e entender arquiteturas modernas
- Engenheiros de Software migrando para a área de dados
- Times que querem referências para decisões técnicas
O que você encontra aqui:
- Exemplos com código funcional e comentado
- Docker Compose para rodar tudo localmente
- Diagramas de arquitetura com justificativas de decisão
- Padrões usados em produção: Medallion Architecture, SCD, ELT, Streaming
- Comparação de ferramentas com contexto de quando usar cada uma
A arquitetura abaixo guia a organização dos módulos e cenários deste repositório:
┌─────────────────────────────────────────────────────────────────────────┐
│ SOURCES │
│ Databases · APIs · SaaS · Files · Streaming Events │
└────────────────────────┬────────────────────────────────────────────────┘
│
┌──────────▼──────────┐
│ INGESTION LAYER │
│ Airbyte · Kafka │
│ Python · Spark │
└──────────┬──────────┘
│
┌───────────────▼───────────────┐
│ STORAGE LAYER │
│ Data Lake (S3 / GCS / ADLS) │
│ ┌─────────────────────────┐ │
│ │ BRONZE │ SILVER │ GOLD │ │ ← Medallion Architecture
│ └─────────────────────────┘ │
│ Delta Lake · Iceberg │
└───────────────┬───────────────┘
│
┌───────────────▼───────────────┐
│ TRANSFORMATION LAYER │
│ dbt · Spark · SQL Patterns │
│ SCD · Window Functions │
└───────────────┬───────────────┘
│
┌───────────────▼───────────────┐
│ SERVING LAYER │
│ Snowflake · BigQuery │
│ Redshift · DuckDB │
└───────────────┬───────────────┘
│
┌───────────────▼───────────────┐
│ CONSUMPTION LAYER │
│ BI Tools · APIs · ML Models │
└───────────────────────────────┘
Orquestrado por: Airflow · Prefect
Qualidade: Great Expectations · dbt Tests · Elementary
Configuração de infraestrutura como código (IaC) e padrões de Data Lake nos principais clouds.
| Tópico | Cloud | Descrição |
|---|---|---|
| S3 Data Lake Setup | AWS | Criação de Data Lake com Terraform, particionamento e lifecycle policies |
| Glue ETL Basics | AWS | Jobs Glue com PySpark, Crawlers e Data Catalog |
| BigQuery Basics | GCP | Particionamento, clustering e controle de custos no BQ |
| Dataflow Pipelines | GCP | Pipelines batch e streaming com Apache Beam |
| ADLS + Synapse | Azure | Data Lake Storage Gen2 e Synapse Analytics |
Conceitos cobertos: IAM, Storage Classes, Lifecycle Policies, VPC, Cost Optimization
Padrões de ingestão batch e streaming, com foco em confiabilidade e escalabilidade.
| Tópico | Descrição |
|---|---|
| Python ETL com Pandas | Pipeline simples com boas práticas: logging, retry, idempotência |
| Spark Ingestion | Ingestão distribuída com controle de partições e schema enforcement |
| dbt Seeds & Sources | Carregamento de dados estáticos e configuração de sources no dbt |
| Tópico | Descrição |
|---|---|
| Kafka Basics | Producers, Consumers, Topics, Partitions — conceitos fundamentais |
| Kafka Connect + PostgreSQL | CDC com Debezium: captura de mudanças do Postgres em tempo real |
| Flink Streaming | Processamento stateful, janelas de tempo e exactly-once semantics |
| Tópico | Descrição |
|---|---|
| Medallion Architecture | Implementação prática de Bronze / Silver / Gold com Delta Lake |
| Delta Lake Setup | ACID transactions, time travel e schema evolution no Data Lake |
| Apache Iceberg Basics | Table format moderno: hidden partitioning e row-level deletes |
Transformação de dados com foco em qualidade, performance e manutenção.
| Tópico | Descrição |
|---|---|
| dbt Project Structure | Estrutura de projeto com staging, intermediate e mart layers |
| dbt Tests & Docs | Testes genéricos, singulares e documentação automatizada |
| dbt Incremental Models | Estratégias: append, merge, delete+insert — quando usar cada uma |
| Tópico | Descrição |
|---|---|
| PySpark Basics | DataFrames, lazy evaluation, actions vs transformations |
| Spark Optimizations | Partitioning, broadcast join, caching, AQE — tuning com dados reais |
| Spark Structured Streaming | Micro-batch e continuous processing com checkpointing |
| Tópico | Descrição |
|---|---|
| Window Functions | ROW_NUMBER, RANK, LAG/LEAD, Running Totals — casos de uso reais |
| Slowly Changing Dimensions | SCD Type 1, 2 e 4 implementados com dbt e SQL puro |
Orquestração de pipelines com foco em observabilidade, retry e dependências.
| Tópico | Ferramenta | Descrição |
|---|---|---|
| Airflow Docker Setup | Airflow | Setup local com Docker Compose, CeleryExecutor e Redis |
| DAG Patterns | Airflow | TaskGroups, dinamic DAGs, XComs, Sensors e custom operators |
| Airflow + dbt | Airflow + dbt | Orquestração de modelos dbt com dependency graph e retries |
| Prefect Basics | Prefect | Flows, tasks, deployments e observabilidade com Prefect Cloud |
Cenários completos que simulam problemas reais de negócio com stack moderna.
Problema: Uma loja online precisa consolidar dados de pedidos, produtos e usuários de múltiplas fontes para análises de receita, LTV e churn.
PostgreSQL ──► Airbyte ──► S3 (Bronze/Silver/Gold) ──► dbt ──► BigQuery ──► Metabase
O que você aprende:
- Configuração do Airbyte com connector PostgreSQL → S3
- Modelagem dimensional com dbt: fatos e dimensões
- Métricas de negócio: receita por canal, LTV, cohort analysis
- Dashboard operacional no Metabase
Problema: Um produto digital precisa processar eventos de navegação em tempo real para detectar abandono de carrinho e alimentar personalização.
Python Producer ──► Kafka ──► Spark Structured Streaming ──► Delta Lake (Bronze/Silver/Gold)
O que você aprende:
- Produção de eventos com schema Avro
- Processamento de janelas de tempo (tumbling, sliding)
- Escrita transacional no Delta Lake com upserts
- Monitoramento de lag e throughput
Problema: Time de dados quer transações ACID, time travel e schema evolution em um Data Lake sem depender de um Data Warehouse separado.
MinIO (S3 local) + Apache Iceberg + Spark + dbt-spark
O que você aprende:
- Diferenças práticas entre Delta Lake e Iceberg
- Time travel: auditoria e rollback de dados
- Schema evolution sem reprocessamento full
- Query engine: Spark, Trino e DuckDB no mesmo lake
Problema: Time pequeno precisa de uma stack de dados completa, moderna e de baixo custo operacional.
Airbyte ──► Snowflake ──► dbt (+ Elementary) ──► Metabase
(free trial) (data quality) (open source)
O que você aprende:
- ELT vs ETL: por que o ELT ganhou no cloud
- dbt com testes, macros e packages (dbt-utils, dbt-expectations)
- Elementary para observabilidade de dados
- dbt docs publicado via GitHub Pages
Qualidade de dados como parte do pipeline, não como afterthought.
| Tópico | Ferramenta | Descrição |
|---|---|---|
| Great Expectations | GX | Expectation suites, data docs e integração com Airflow |
| Soda Core | Soda | Checks YAML, alertas e integração com dbt |
| dbt Tests Avançados | dbt | Custom tests, macros de validação e testes de freshness |
Pré-requisitos: Docker, Docker Compose, Make, Python 3.10+
# Clone o repositório
git clone https://github.com/fabiomarcolia/data-engineering-fundamentals.git
cd data-engineering-fundamentals
# Entre no cenário desejado
cd 05-modern-data-stack/scenario-04-elt-pipeline
# Suba o ambiente
make up
# Verifique os serviços
make status
# Rode o pipeline completo
make run
# Acesse a documentação dbt
make docsCada módulo tem seu próprio README.md com instruções específicas, variáveis de ambiente e comandos disponíveis.
Algumas escolhas arquiteturais recorrentes neste repositório e o raciocínio por trás delas:
Por que ELT ao invés de ETL?
No cloud, storage e compute são baratos e elásticos. Transformar dados depois de carregá-los (ELT) permite reprocessamento sem reingesta, versionamento das transformações e separação de responsabilidades entre engenharia e analytics.
Por que dbt para transformações SQL?
dbt trata SQL como código: versionamento, testes, documentação e dependency graph automático. O custo de adoção é baixo e o ganho em manutenibilidade é alto.
Por que Medallion Architecture (Bronze/Silver/Gold)?
Preservar os dados brutos no Bronze garante auditabilidade e reprocessamento. A separação em camadas torna o pipeline mais testável e facilita o rastreamento de problemas.
Por que Delta Lake / Iceberg ao invés de Parquet puro?
ACID transactions, schema evolution e time travel são necessários em produção. Parquet puro não oferece nenhum desses mecanismos nativamente.
Para mais conteúdo Carreira em Dados e IA, ou se quiser falar comigo sobre dúvidas, sugestões ou feedback:
- Mais Recursos de Carreira: Veja aqui
Agradeço seu apoio e fique a vontade de entrar em contato comigo!
Se este repositório foi útil para você, considere deixar uma ⭐
