Skip to content

fabiomarcolia/data-engineering-fundamentals

Repository files navigation

🏗️ Data Engineering Fundamentals

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


Data Engineering Stack Apache Spark Apache Kafka dbt Apache Airflow AWS GCP Snowflake Docker


📋 Índice


📌 Sobre o Repositório

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

🗺️ Roadmap

alt text

🏛️ Arquitetura de Referência

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

📦 Módulos

01 - Cloud Fundamentals

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


02 - Data Ingestion & Storage

Padrões de ingestão batch e streaming, com foco em confiabilidade e escalabilidade.

Batch Ingestion

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

Streaming Ingestion

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

Storage Patterns

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

03 - Data Transformation & Processing

Transformação de dados com foco em qualidade, performance e manutenção.

dbt Core

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

Spark Transformations

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

SQL Patterns

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

04 - Orchestration

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

05 - Modern Data Stack — Cenários End-to-End

Cenários completos que simulam problemas reais de negócio com stack moderna.


🧠 Cenários

🛒 Cenário 1 — E-commerce Analytics

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

📁 Ver Cenário 1


⚡ Cenário 2 — Streaming de Eventos (Clickstream)

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

📁 Ver Cenário 2


🏠 Cenário 3 — Lakehouse Moderno

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

📁 Ver Cenário 3


🔄 Cenário 4 — ELT Pipeline Completo (mais didático)

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

📁 Ver Cenário 4


06 - Data Quality & Observability

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

🚀 Como Rodar Localmente

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 docs

Cada módulo tem seu próprio README.md com instruções específicas, variáveis de ambiente e comandos disponíveis.


🧠 Decisões de Design

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.


Autor - Fabio Marçolia | Carreira em Dados & IA

Para mais conteúdo Carreira em Dados e IA, ou se quiser falar comigo sobre dúvidas, sugestões ou feedback:

LinkedIn

Agradeço seu apoio e fique a vontade de entrar em contato comigo!

Se este repositório foi útil para você, considere deixar uma ⭐


About

Fundamentos práticos de Engenharia de Dados: Cloud (AWS, GCP, Azure), ingestão batch e streaming, dbt, Spark, Airflow e Modern Data Stack — com exemplos de código e cenários end-to-end.

Topics

Resources

Stars

5 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors