Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

saas-dw

Data Warehouse para um SaaS fictício seguindo a arquitetura Medallion (Bronze → Silver → Gold) e boas práticas de engenharia de dados moderna.

Arquitetura

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)

Stack

Camada Tecnologia
Geração de dados Python + Faker
Banco de dados PostgreSQL 15
Transformação dbt Core
Containers Docker + Docker Compose

Modelo de dados

O domínio simula um SaaS com três entidades:

  • customers — clientes cadastrados
  • products — planos disponíveis (Starter, Pro, Enterprise)
  • subscriptions — assinaturas ligando clientes a produtos

Camada Gold

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

Estrutura do projeto

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

Como rodar localmente

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 .

Decisões técnicas

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.

About

Data Warehouse para SaaS com arquitetura Medallion (Bronze → Silver → Gold) usando dbt, PostgreSQL e Docker.

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages