Data Engineering · Portfólio Corporativo

Corporate Data Warehouse
Dimensional Modeling & dbt

Pipeline completo de dados com Star Schema, camadas Raw → Staging → Marts, testes automáticos e dashboard analítico — do zero ao deploy.

Ver no GitHub Arquitetura Como Executar
PostgreSQL 15 dbt-core 1.7 dbt_utils Star Schema Streamlit Plotly Docker Python 3.11 Faker

9
dbt Models
4
Camadas de Dados
30+
Testes dbt
3
Dimensões
1
Tabela Fato
1825
Dias no dim_date
Fluxo do Pipeline
01

Sources

CSV seeds + OLTP simulado

02

Raw Layer

PostgreSQL · schema raw

03

dbt Staging

Limpeza · views · testes

04

dbt Intermediate

Joins · enriquecimento

05

dbt Marts

Star Schema · tables

06

BI Layer

Streamlit · KPIs


Arquitetura

Visão da Solução

Pipeline end-to-end com separação clara de responsabilidades por camada.

Arquitetura RetailCorp DW

Modelagem Dimensional

Star Schema

A fact_sales é o centro do modelo, referenciando todas as dimensões via surrogate keys.

🧑 dim_customers

  • customer_sk PK
  • customer_id
  • customer_name
  • customer_segment
  • state_code · city
  • customer_since_date

📦 dim_products

  • product_sk PK
  • product_id · sku
  • product_name
  • category · subcategory
  • unit_cost · unit_price
  • margin_pct · margin_tier

📅 dim_date

  • date_sk PK (YYYYMMDD)
  • full_date
  • day_name · is_weekend
  • month_name · quarter
  • year_month · year_quarter

⭐ fact_sales — Tabela Fato Central

  • sales_sk PK
  • order_item_id · order_id
  • customer_sk FK
  • product_sk FK
  • date_sk FK
  • sales_channel · region
  • quantity · unit_price
  • discount_pct · discount_amount
  • item_total_amount
  • item_gross_margin

Código dbt

Exemplos de Modelos

SQL limpo, modular e testado — seguindo os princípios de Kimball.

-- fact_sales.sql — Tabela Fato do Star Schema
-- Grão: 1 linha por item de pedido não-cancelado

with int_orders as (
    select * from {{ ref('int_orders_enriched') }}
),
dim_customers as (
    select customer_sk, customer_id from {{ ref('dim_customers') }}
),
dim_date as (
    select date_sk, full_date from {{ ref('dim_date') }}
),
final as (
    select
        {{ dbt_utils.generate_surrogate_key(['o.order_item_id']) }}
            as sales_sk,
        c.customer_sk,
        p.product_sk,
        d.date_sk,
        o.quantity,
        o.item_total_amount,
        o.item_gross_margin
    from int_orders o
    inner join dim_customers c  on o.customer_id = c.customer_id
    inner join dim_date d       on o.order_date  = d.full_date
)
select * from final

Destaques Técnicos

O que Este Projeto Demonstra

Habilidades avançadas de Engenharia de Dados Analíticos aplicadas em cenário corporativo real.

🏗️

Modelagem Kimball

Star Schema com dimensões conformed, surrogate keys via dbt_utils e grão bem definido na fact_sales.

🧪

Qualidade de Dados

30+ testes dbt automáticos: not_null, unique, accepted_values, relationships e expression_is_true.

📖

Documentação Viva

Lineage graph, data dictionary e descrição de cada coluna — tudo gerado automaticamente pelo dbt docs.

Materialização por Camada

Staging/Intermediate como views (sem custo), Marts como tables (performance analítica máxima).

📊

Dashboard Self-Service

Streamlit com KPIs, Plotly, filtros interativos — lendo direto do schema marts do PostgreSQL.

🐳

Infra Reprodutível

Docker Compose para subir o banco com um comando. Setup automatizado via bootstrap.sh.


Execução

Quick Start

Do zero ao dashboard em menos de 5 minutos.

# 1. Clonar e configurar
git clone <repo-url> && cd corporate-data-warehouse-dbt
cp .env.example .env

# 2. Subir o banco
docker-compose up -d postgres

# 3. Instalar dependências
pip install -r requirements.txt

# 4. Pipeline dbt completo
cd dbt_project
dbt deps && dbt seed && dbt run && dbt test

# 5. Documentação interativa
dbt docs generate && dbt docs serve  # → localhost:8080

# 6. Dashboard
cd .. && streamlit run app/streamlit_app.py  # → localhost:8501