4.9 KiB
4.9 KiB
Hotel Reservations — Data Warehouse Project
Project Summary
This project implements a complete Data Warehousing pipeline for a hotel reservation system, covering all standard DW layers:
MySQL OLTP ──► Apache NiFi ETL ──► Oracle Data Mart ──► Power BI Reports
(source) (transform) (analytical store) (OLAP queries)
The system is built around the A.24 Hotel Reservations domain from the course specification. The OLTP database was populated with ~635,000 synthetically generated rows covering 200 hotels, 100,000 guests, 500,000 bookings, and 531,000 room bookings across a 4-year period (2022–2025).
Business Context
A hotel chain needs to answer questions like:
- Which countries generate the most revenue per quarter?
- How does occupancy differ between peak and off-peak seasons?
- What is the revenue contribution of 5-star vs 3-star hotels?
- How has a hotel's revenue changed after upgrading its star rating?
These questions require historical, multi-dimensional analysis that a normalized OLTP database cannot serve efficiently. The data mart provides pre-modelled, denormalized data optimized for analytical queries.
Architecture
┌─────────────────────────────────────────────────────────┐
│ SOURCE LAYER │
│ MySQL 8.4 (Docker/Podman, port 13306) │
│ Database: hotel_reservations │
│ 13 normalized tables, ~635K rows │
└───────────────────────┬─────────────────────────────────┘
│ JDBC (MySqlConnector)
▼
┌─────────────────────────────────────────────────────────┐
│ ETL LAYER │
│ Apache NiFi │
│ 5 Process Groups: Date Dim / Static Dims / │
│ SCD2 Hotel / SCD1 Guest / Incremental Fact │
└───────────────────────┬─────────────────────────────────┘
│ JDBC (Oracle JDBC)
▼
┌─────────────────────────────────────────────────────────┐
│ DATA MART LAYER │
│ Oracle (university lab schema) │
│ Star schema: 6 dimensions + 1 fact table │
│ SCD Type 2 on DIM_HOTEL │
└───────────────────────┬─────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────┐
│ PRESENTATION LAYER │
│ Power BI Desktop │
│ OLAP reports via DirectQuery / Import │
└─────────────────────────────────────────────────────────┘
Technology Stack
| Component | Technology | Version |
|---|---|---|
| OLTP Database | MySQL | 8.4 |
| Container runtime | Docker / Podman | — |
| Data generator | C# (.NET) | 10 |
| ETL tool | Apache NiFi | — |
| Data Mart | Oracle RDBMS | university lab |
| Reporting | Power BI Desktop | — |
Repository Structure
IPZ_1/
├── docker/
│ ├── start.sh # Start MySQL container (Linux/macOS)
│ ├── stop.sh # Stop MySQL container
│ ├── start.ps1 # Start MySQL container (Windows)
│ └── stop.ps1 # Stop MySQL container
├── sql/
│ ├── schema.sql # MySQL OLTP DDL
│ └── datamart_schema.sql # Oracle Data Mart DDL
├── generator/
│ └── generate.cs # .NET 10 data generator script
└── docs/
├── 01-overview.md # This file
├── 02-oltp.md # OLTP database design
├── 03-datamart.md # Data mart design
├── 04-setup.md # Setup and run guide
└── nifi-flow.md # NiFi ETL flow reference