An end-to-end data engineering project demonstrating the design and implementation of a modern data warehouse using SQL Server and the Medallion Architecture.
- Project Overview
- Background Concepts
- Data Architecture
- Project Phases
- Repository Structure
- Naming Conventions
- Tech Stack
- Progress Log
This project simulates a real-world data engineering workflow, from initial requirement gathering through to a business-ready analytical data model. It is designed as a portfolio piece to demonstrate practical skills in:
- Data warehouse design and architecture planning
- ETL/ELT pipeline development
- Data cleansing, standardization, and integration
- Dimensional modeling (star schema)
- Engineering best practices β naming standards, documentation, and version control
Objective: Build a fully functional data warehouse in SQL Server that ingests raw source data, progressively refines it through the Bronze, Silver, and Gold layers, and exposes clean, aggregated, business-ready views for reporting and analysis.
A Data Warehouse (DWH) is a centralized repository of data designed to support management decision-making. It is defined by three core characteristics:
| Property | Description |
|---|---|
| Subject-oriented | Organized around key business subjects (e.g. sales, customers) rather than operational processes |
| Integrated | Consolidates data from multiple, disparate sources into a consistent format |
| Time-variant | Retains historical data to support trend analysis over time |
ETL (Extract, Transform, Load) is the process of identifying source systems, extracting the required data, transforming it into a clean and standardized format, and loading it into a target destination.
Data can be extracted via two primary methods:
| Method | Description |
|---|---|
| Pull | The system actively retrieves data (as a full or incremental load) |
| Push | The source system sends data directly to the target |
Common extraction sources include database queries, file parsing, event-based streaming, API calls, and Change Data Capture (CDC).
| Technique | Description |
|---|---|
| Data Cleansing | Identifying and removing/filtering duplicates; handling nulls, blank spaces, and empty strings |
| Data Normalization | Applying business rules to derive new columns from existing data |
| Data Integration | Combining data from multiple sources into a unified structure |
| Data Aggregation | Summarizing data to support reporting requirements |
Loading can occur as a batch or stream process, in either full or incremental form, and may involve managing Slowly Changing Dimensions (SCD) to preserve historical accuracy.
| Stage | Approach |
|---|---|
| Extraction | Pull-based, full load, from file parsing |
| Transformation | Cleansing, normalization, integration, and aggregation |
| Load | Batch processing, full load (truncate & insert) |
Several architectural patterns exist for structuring a data platform:
| Architecture | Data Flow |
|---|---|
| Inmon | Staging β Enterprise Data Warehouse β Data Marts |
| Kimball | Staging β Data Marts |
| Data Vault | Staging β Raw Vault β Data Vault β Data Marts |
| Medallion β (used in this project) | Bronze β Silver β Gold |
This project implements a Data Warehouse using the Medallion Architecture, with the following end-to-end flow:
Source Files β Data Warehouse (Bronze β Silver β Gold) β Consumption (BI / Reporting)
A complete visual diagram of the architecture β covering source systems, the warehouse layers, and downstream consumption β was designed in Figma to support clear, end-to-end understanding of the data flow.
| Layer | Object Type | Load Strategy | Transformation Applied | Data Model |
|---|---|---|---|---|
| Bronze | Table | Full load | None (raw as-is) | None |
| Silver | Table | Full load (truncate & insert) | Cleansing, normalization, standardization | None |
| Gold | View | N/A (virtualized) | Aggregation, integration | Star schema β fact & aggregated tables |
The project is structured into six sequential phases:
| # | Phase | Description |
|---|---|---|
| 1 | Project Plan | Define scope, epics, and tasks |
| 2 | Design Data Architecture | Select and diagram the target architecture |
| 3 | Project Setup | Establish conventions, repo structure, and database |
| 4 | Bronze Layer | Ingest raw source data |
| 5 | Silver Layer | Cleanse and standardize data |
| 6 | Gold Layer | Deliver business-ready, analytics-friendly models |
Project planning was managed in Notion, structured around high-level epics, each broken down into detailed tasks:
- Requirement Analysis
- Design Architecture
- Project Initialization
- Build Bronze Layer
- Build Silver Layer
- Build Gold Layer
Requirement Analysis focused on understanding:
- Source systems and data availability
- Data cleaning requirements
- Data integration needs
- Scope of historization β whether SCD Type 1 or Type 2 applies
- Documentation requirements
Architectural approaches were evaluated across four categories: Data Warehouse, Data Lake, Data Lakehouse, and Data Mesh. Based on project requirements, a Data Warehouse built on Medallion Architecture (see Section 3) was selected.
The full source-to-consumption design was visualized in Figma for stakeholder clarity.
The following foundational setup tasks were completed:
- Defined detailed project tasks for each layer (Bronze, Silver, Gold)
- Established the project's naming conventions
- Set up the Git repository and folder structure (see Section 5)
- Created the project database and schemas
| Attribute | Detail |
|---|---|
| Purpose | Raw data ingestion, stored as-is from source |
| Object Type | Table |
| Load Strategy | Full load |
| Transformation | None |
| Data Model | None |
| Attribute | Detail |
|---|---|
| Purpose | Cleaned and standardized data |
| Object Type | Table |
| Load Strategy | Full load (truncate & insert) |
| Transformation | Cleansing, normalization, standardization |
| Data Model | None |
| Attribute | Detail |
|---|---|
| Purpose | Business-ready, consumption-layer data |
| Object Type | View |
| Load Strategy | N/A β virtualized on top of Silver |
| Transformation | Aggregation, integration |
| Data Model | Star schema β fact tables and aggregated tables |
βββ datasets/ # Raw source data files
βββ scripts/ # SQL / ETL scripts for Bronze, Silver, and Gold layers
βββ docs/ # Documentation β architecture diagrams, naming conventions, notes
βββ README.md # Project overview and progress log
A consistent naming standard is applied across all tables, columns, and stored procedures to keep the data model readable and maintainable.
General Principles
- Use
snake_casefor all object and column names - Avoid reserved words as identifiers (e.g. use
column_nameinstead ofcolumn,table_nameinstead oftable)
Table Naming
| Layer | Convention | Example |
|---|---|---|
| Bronze | <source_system>_<entity> |
crm_customers |
| Silver | <source_system>_<entity> |
erp_sales_orders |
| Gold | <category>_<entity> |
fact_sales, agg_monthly_revenue |
Column Naming
| Column Type | Convention | Example |
|---|---|---|
| Surrogate key | Suffix _key |
customer_key |
| Technical/metadata column | Prefix dwh_ |
dwh_load_date |
Stored Procedures
| Type | Convention | Example |
|---|---|---|
| Load procedure | load_<purpose> |
load_bronze_crm_customers |
Full details are documented in
docs/naming_conventions.md.
| Category | Tool |
|---|---|
| Database | SQL Server |
| Language | SQL (T-SQL) |
| Project Planning | Notion |
| Architecture Design | Figma |
| Version Control | Git / GitHub |
| Date | Milestone |
|---|---|
| Ongoing | Completed Project Plan, Data Architecture Design, and Project Setup phases |
This log is updated continuously as each phase of the project is completed.
A work-in-progress portfolio project showcasing end-to-end data warehouse design and ETL development using SQL Server.