Учебный data engineering проект по построению хранилища данных в архитектуре Data Vault на основе датасета Superstore.
Проект демонстрирует полный путь данных: от исходного CSV-файла и генерации hash keys до формирования структуры Data Vault и загрузки данных в PostgreSQL.
В качестве источника используется датасет Sample Superstore, содержащий информацию о продажах, клиентах, товарах и способах доставки.
Исходный набор данных:
- 9 994 записи
- 13 исходных признаков
- данные о продажах, прибыли и скидках;
- география клиентов;
- категории и подкатегории товаров;
- сегменты покупателей;
- способы доставки.
Цель проекта — преобразовать плоский бизнес-датасет в структуру хранилища, основанную на принципах Data Vault.
Пайплайн состоит из нескольких этапов:
SampleSuperstore.csv
│
▼
loader.py
│
│ очистка и нормализация ключей
│ генерация SHA-256 hash keys
▼
buisness_data.csv
│
├──────────────► Hubs
│ H_SALE
│ H_CUSTOMER
│ H_PRODUCT
│ H_SHIPMENT
│
├──────────────► Links
│ L_SALE
│ L_PRODUCT
│ L_SHIPMENT
│
└──────────────► Satellites
S_CUSTOMER
S_DETAILS
│
▼
PostgreSQL
Hubs содержат уникальные бизнес-сущности и их hash keys.
| Hub | Назначение |
|---|---|
H_SALE |
идентификаторы продаж |
H_CUSTOMER |
идентификаторы клиентов |
H_PRODUCT |
идентификаторы продуктов |
H_SHIPMENT |
идентификаторы способов/операций доставки |
Links описывают отношения между основными сущностями.
| Link | Связь |
|---|---|
L_SALE |
Sale ↔ Customer |
L_PRODUCT |
Sale ↔ Product |
L_SHIPMENT |
Sale ↔ Shipment |
Satellites предназначены для хранения описательных атрибутов сущностей и истории их изменения.
S_CUSTOMER хранит географические характеристики клиента:
- Postal Code
- Country
- Region
- State
- City
S_DETAILS содержит описательную информацию о продукте.
Для формирования ключей используется SHA-256.
Перед хешированием значения нормализуются:
s.astype("string").str.strip().str.upper()После этого несколько бизнес-атрибутов объединяются в одну строку:
VALUE_1|VALUE_2|VALUE_3
и преобразуются в SHA-256 hash.
Такой подход позволяет получать детерминированные ключи независимо от последовательности загрузок данных.
Пример:
df["Product_HK"] = make_bk_hash(
df,
["Category", "Sub-Category"]
)Исходные данные находятся в:
SampleSuperstore.csv
Скрипт:
loader.py
загружает исходный CSV через pandas, нормализует бизнес-ключи и формирует hash keys для сущностей Data Vault.
Результат сохраняется в:
buisness_data.csv
SQL-структура хранилища описана в:
buisness.sql
Скрипт создаёт:
- schema PostgreSQL;
- Hub-таблицы;
- Link-таблицы;
- Satellite-таблицы;
- связи между сущностями.
Скрипт:
load_to_sql.py
формирует наборы данных для соответствующих Data Vault сущностей и загружает их в PostgreSQL через SQLAlchemy.
- Python
- Pandas
- SQL
- PostgreSQL
- SQLAlchemy
- psycopg2
- SHA-256 / hashlib
- Data Vault
Data-Vault/
│
├── SampleSuperstore.csv # исходный датасет
├── buisness_data.csv # данные после преобразования
│
├── loader.py # preprocessing и генерация hash keys
├── load_to_sql.py # загрузка данных в PostgreSQL
├── buisness.sql # DDL Data Vault
│
├── data.png # схема хранилища
└── README.md
git clone <repository-url>
cd Data-Vaultpython -m venv .venvLinux / macOS:
source .venv/bin/activateWindows:
.venv\Scripts\activatepip install pandas sqlalchemy psycopg2-binaryЕсли требуется автоматическая загрузка датасета через Kaggle:
pip install kagglehubpython loader.pyБудет создан файл:
buisness_data.csv
с исходными данными и дополнительными hash keys.
Выполнить SQL из:
buisness.sql
в PostgreSQL.
Параметры подключения к базе данных рекомендуется хранить в environment variables или .env, а не непосредственно в исходном коде.
Пример:
DATABASE_URL=postgresql+psycopg2://user:password@host:5432/databasepython load_to_sql.pyПроект показывает практическую работу с несколькими задачами Data Engineering:
- проектирование Data Vault;
- преобразование бизнес-данных в Hub / Link / Satellite модель;
- генерация детерминированных hash keys;
- preprocessing данных с Pandas;
- проектирование SQL-схемы;
- организация ETL-пайплайна;
- интеграция Python с PostgreSQL;
- подготовка данных для дальнейшей аналитики.
Data Vault + Python + PostgreSQL
Небольшой проект, демонстрирующий переход от плоского CSV-датасета к структурированному Data Vault хранилищу и ETL-процессу его наполнения.
