Data Warehouse para um SaaS fictício seguindo a arquitetura Medallion (Bronze → Silver → Gold) e boas práticas de engenharia de dados moderna.
OLTP (PostgreSQL)
│
▼
[Bronze] → Views apontando para a fonte — dado bruto preservado
│
▼
[Silver] → Tabelas limpas, tipadas e padronizadas
│
▼
[Gold] → Dimensões, fatos e métricas de negócio (MRR)
| Camada | Tecnologia |
|---|---|
| Geração de dados | Python + Faker |
| Banco de dados | PostgreSQL 15 |
| Transformação | dbt Core |
| Containers | Docker + Docker Compose |
O domínio simula um SaaS com três entidades:
customers— clientes cadastradosproducts— planos disponíveis (Starter, Pro, Enterprise)subscriptions— assinaturas ligando clientes a produtos
| Modelo | Tipo | Descrição |
|---|---|---|
dim_customers |
Dimensão | Clientes com segmento de mercado |
dim_products |
Dimensão | Produtos com classificação de ticket |
fct_subscriptions |
Fato | Assinaturas com MRR e ARR |
mart_mrr |
Mart | MRR mensal agregado por plano |
saas-dw/
├── infra/ # Schema do banco OLTP
├── ingestion/ # Geração de dados com Faker
└── transform/ # Projeto dbt
└── models/
├── bronze/ # Views — dado bruto
├── silver/ # Tabelas — dado limpo
└── gold/ # Tabelas — métricas de negócio
Pré-requisitos: Docker e Python 3.10+
# 1. Clone o repositório
git clone https://github.com/Arthurss123/saas-dw.git
cd saas-dw
# 2. Sobe o banco
docker-compose up -d
# 3. Gera os dados OLTP
cd ingestion
pip install -r requirements.txt
python generate_data.py
# 4. Roda o pipeline dbt
cd ../transform
pip install dbt-postgres==1.8.0
dbt deps --profiles-dir .
dbt run --profiles-dir .
# 5. Valida a qualidade dos dados
dbt test --profiles-dir .Por que arquitetura Medallion? Separar Bronze, Silver e Gold garante rastreabilidade — é possível reprocessar qualquer camada a partir do dado bruto sem novo dump do OLTP.
Por que Bronze como view? O dado bruto já existe no OLTP. Materializar seria duplicação desnecessária. A view garante que o Bronze sempre reflete a fonte sem custo de armazenamento.
Por que dbt? Transformações versionadas em SQL puro, testes de qualidade declarativos e documentação integrada ao código.