Ответ
Слои Staging (STG) и Data Mart (DM) — ключевые компоненты архитектуры хранилища данных (DWH), каждый со своей целью.
Staging (Промежуточный слой)
- Назначение: Временное хранение «сырых» данных, загруженных из источников (source systems), в их исходном виде или с минимальной очисткой (например, удаление явных дубликатов).
- Цель: Изолировать процессы извлечения (Extract) и загрузки (Load) от сложных преобразований (Transform). Это позволяет повторно загружать данные из STG в случае сбоя на этапе трансформации, не обращаясь к источникам.
- Структура: Часто повторяет структуру источника. Данные обычно хранятся недолго (сутки/неделя).
Data Mart (Витрина данных)
- Назначение: Слой, ориентированный на конкретную предметную область или бизнес-подразделение (например, продажи, маркетинг, финансы).
- Цель: Предоставить конечным пользователям (аналитикам, отчетным системам) готовые, агрегированные и удобные для анализа данные в форме, оптимизированной под их запросы (звёздная/снежинковая схема).
- Структура: Денормализованные таблицы фактов и измерений.
Пример потока данных:
-- 1. Загрузка в Staging (сырые данные)
INSERT INTO stg.orders
SELECT * FROM source_system.orders WHERE load_date = CURRENT_DATE;
-- 2. Преобразование и загрузка в Data Mart (очищенные, агрегированные данные)
INSERT INTO dm.sales_daily (sale_date, product_category, total_revenue, total_units)
SELECT
DATE_TRUNC('day', o.order_date) AS sale_date,
p.category AS product_category,
SUM(o.amount) AS total_revenue,
COUNT(o.id) AS total_units
FROM stg.orders o
JOIN stg.products p ON o.product_id = p.id
WHERE o.status = 'completed'
GROUP BY DATE_TRUNC('day', o.order_date), p.category;
Таким образом, STG — это «сырьё», а DM — «готовый продукт» для анализа.
Ответ 18+ 🔞
Давайте разберем эту архитектуру, чтобы не было ощущения, будто на дворе 2002-й год и мы просто сваливаем всё в одну кучу. Есть две ключевые сущности: Staging (STG) и Data Mart (DM). И между ними — пропасть, хуй с горы не перепрыгнешь.
Staging (Промежуточный слой, он же «свалка сырья»)
- Назначение: Это место, куда ты сгребаешь все данные из источников — в том виде, в каком они вылезли. Минимальная обработка, может, явные дубликаты выкинуть, и всё. Цель — изолировать процесс выгрузки от последующего пиздеца. Если на этапе преобразований всё накроется медным тазом, ты просто возьмёшь эти сырые данные из STG и начнёшь заново, не дергая сраные источники каждые пять минут. Доверия к данным здесь — ебать ноль. Они просто лежат.
- Структура: Обычно зеркалит структуру источника. Данные тут не живут вечно — неделя, сутки, потом их можно вычищать. Это временное хранилище, а не музей.
Data Mart (Витрина данных, он же «готовый продукт для аналитиков»)
- Назначение: А вот это уже для людей. Конкретный слой под конкретную задачу: продажи, маркетинг, финансы. Здесь данные уже приведены в божеский вид: очищены, сгруппированы, агрегированы. Цель — чтобы аналитик или отчетная система не ебались с сырьём, а сразу брали готовое.
- Структура: Здесь уже царят денормализованные таблицы — «звёздочки» и «снежинки». Факты, измерения, всё красиво. Подозрение ебать чувствую, когда кто-то лезет сюда с сырыми запросами.
Пример потока, чтобы стало совсем ясно: Сначала грузим сырьё в staging, будто бы на склад:
-- 1. Загрузка в Staging (всё как есть, без души)
INSERT INTO stg.orders
SELECT * FROM source_system.orders WHERE load_date = CURRENT_DATE;
А потом уже делаем из этого человеческие данные для витрины:
-- 2. Преобразование и загрузка в Data Mart (тут уже магия)
INSERT INTO dm.sales_daily (sale_date, product_category, total_revenue, total_units)
SELECT
DATE_TRUNC('day', o.order_date) AS sale_date,
p.category AS product_category,
SUM(o.amount) AS total_revenue,
COUNT(o.id) AS total_units
FROM stg.orders o
JOIN stg.products p ON o.product_id = p.id
WHERE o.status = 'completed'
GROUP BY DATE_TRUNC('day', o.order_date), p.category;
Короче, если STG — это грязный цех с сырым металлом, то DM — это уже блестящий автомобиль в шоу-руме. И пытаться построить отчёт прямо из staging — это всё равно что просить инженера собирать двигатель прямо на руднике. Э, бошка, думай!