Learning Platform
Глоссарий Troubleshooting
Урок 18.01 · 17 мин
Начальный
medallionlakehousedata-modeling

Medallion architecture: bronze, silver, gold

Предыдущие модули дали вам набор техник моделирования: нормализация, star schema, SCD, Data Vault. Возникает практический вопрос — а как они уживаются в одном реальном хранилище? Ответ современной индустрии — medallion architecture: способ организовать хранилище в три слоя по зрелости данных. Эту схему популяризировала Databricks, и к 2025-2026 она стала де-факто стандартом организации lakehouse.

Сразу зафиксируем важное, чтобы не было главного заблуждения новичков. Medallion — это не методология моделирования. Это не альтернатива Kimball или Data Vault. Medallion говорит, на какие слои поделить хранилище по зрелости данных; но внутри каждого слоя всё равно нужна конкретная модель — 3NF, Data Vault, star schema или OBT. Medallion — про слои, методологии моделирования — про то, как устроены таблицы внутри слоя. Это два ортогональных вопроса.


Зачем вообще слои

Представьте хранилище без слоёв: сырые данные из источников, очищенные таблицы и витрины для BI свалены в одну схему. Проблемы очевидны. Аналитик не понимает, какой таблице доверять — где сырьё, а где готовый результат. Изменение в источнике может неконтролируемо «протечь» прямо в дашборд. Невозможно сказать, на каком этапе данные испортились.

Слои наводят порядок. Каждый слой — это уровень зрелости данных: насколько они обработаны, очищены и готовы к потреблению. Данные текут строго в одну сторону, от менее зрелого слоя к более зрелому. Это даёт изоляцию (изменение в одном слое контролируемо влияет на следующий), понятность (по слою сразу ясен статус данных) и точку отладки (видно, где сломалось).

Три слоя medallion: рост зрелости данных
BronzeСырые данные из источников как есть плюс метаданные приёма. Append-only
очистка, типизация, согласование
SilverОчищенные, типизированные, согласованные между источниками данные
агрегация, денормализация под бизнес
GoldБизнес-готовые витрины: star schema, OBT, агрегаты. Read-оптимизировано

Названия — из спорта: bronze, silver, gold, медали по возрастанию ценности. Чем выше слой, тем ценнее и готовее данные. Разберём каждый и, главное, какая модель данных на нём уместна.

Ещё одно правило, общее для всех слоёв, — однонаправленность потока. Данные текут только снизу вверх: bronze питает silver, silver питает gold. Никогда наоборот и никогда «через слой» — gold не читает напрямую из bronze, минуя silver. Это ограничение кажется формальным, но оно и создаёт изоляцию. Когда поток строго однонаправлен, любое изменение распространяется предсказуемо: правка в silver затронет gold, но физически не может затронуть bronze. Если бы слои читали друг у друга как попало, изоляция исчезла бы, и «где сломалось» снова стало бы неразрешимым вопросом. Однонаправленный поток — это то, что превращает три папки с таблицами в архитектуру.


Bronze: сырьё как есть

Bronze — слой приёма. Сюда данные попадают из источников как есть, с минимальной обработкой или вообще без неё. Структура bronze-таблицы повторяет источник; значения не очищаются, типы часто остаются строковыми, к строкам добавляются только технические метаданные приёма.

Что обычно добавляют к каждой строке в bronze: время загрузки (ingestion_timestamp), имя источника (source_system), имя файла или offset (source_file). Это нужно для отладки и для инкрементальной обработки.

-- Bronze-таблица: повторяет источник, плюс метаданные приёма
CREATE TABLE bronze.orders (
    raw_payload          VARIANT,      -- сырой JSON из источника как есть
    ingestion_timestamp  TIMESTAMP,    -- когда строка принята
    source_system        VARCHAR,      -- 'shop_api'
    source_file          VARCHAR,      -- 'orders_2026-05-20.json'
    is_processed         BOOLEAN       -- обработана ли silver-слоем
);

Bronze почти всегда append-only: новые данные дописываются, существующие не трогаются. Это даёт свойство, знакомое по Data Vault, — возможность переиграть обработку. Если в коде silver-слоя нашли баг, bronze хранит все исходные данные, и silver можно пересобрать с нуля. Bronze — это страховка и точка восстановления.

Какая модель данных на bronze? Практически никакой осознанной — структура диктуется источником. Это сырьё, и моделировать его незачем.


Silver: очищено и согласовано

Silver — слой, где данные приводятся в порядок. Здесь происходит то, что в Data Vault делал Business Vault: очистка, типизация, дедупликация, согласование между источниками.

Типичные операции silver-слоя:

  • Типизация. Строка '2026-05-20' из bronze превращается в настоящий DATE; '1500.00' — в DECIMAL. Это важнее, чем кажется: пока дата лежит строкой, по ней нельзя корректно отфильтровать диапазон или отсортировать, а арифметика над строковой суммой невозможна.
  • Очистка. Телефоны и адреса приводятся к единому формату; явный мусор отсеивается.
  • Дедупликация. Если источник прислал дубли — лишние строки убираются.
  • Согласование источников. Клиент из CRM и из биллинга сводится к единой записи; расхождения разрешаются по правилам.
  • Применение бизнес-ключей. Сущности получают понятные идентификаторы.
-- Silver: типизировано, очищено, дедуплицировано
CREATE TABLE silver.orders AS
SELECT
    CAST(raw_payload:order_id   AS BIGINT)    AS order_id,
    CAST(raw_payload:customer_id AS BIGINT)   AS customer_id,
    CAST(raw_payload:order_date  AS DATE)     AS order_date,
    CAST(raw_payload:amount      AS DECIMAL(12,2)) AS amount,
    source_system
FROM bronze.orders
WHERE raw_payload:order_id IS NOT NULL          -- отсев мусора
QUALIFY ROW_NUMBER() OVER (
    PARTITION BY raw_payload:order_id
    ORDER BY ingestion_timestamp DESC) = 1;     -- дедупликация

Какая модель данных на silver? Здесь важная оговорка. У silver-слоя нет одной канонической модели — выбор зависит от организации и инструментов. На практике silver commonly моделируют write-оптимизированно: часто это структуры, близкие к 3NF, либо Data Vault-подобные. Логика такая: silver — это чистое, согласованное представление сущностей, а нормализованные или Data Vault-структуры хорошо хранят согласованные данные с историей. Но это распространённая практика, а не предписание: некоторые команды держат silver ближе к источнику, другие — уже частично размерным. Не запоминайте «silver = 3NF» как закон; запоминайте «silver — слой согласованных сущностей, моделируется write-оптимизированно».


Gold: бизнес-готовые витрины

Gold — верхний слой, то, с чем работают аналитики и BI. Данные здесь бизнес-готовые: агрегированные, денормализованные, оптимизированные под чтение и понятные не-инженеру.

Какая модель данных на gold? Здесь как раз вступают в дело методологии из предыдущих модулей. Gold-слой — это обычно:

  • Star schema — классическая размерная модель Kimball: fact в центре, dimensions вокруг.
  • One Big Table (OBT) — одна широкая денормализованная таблица (подробно — в следующем уроке).
  • Агрегаты — предвычисленные сводки: выручка по месяцам, метрики по сегментам.

Gold оптимизирован под чтение: денормализация уместна и желательна, JOIN-ов мало, запросы быстрые. Именно здесь живут dim_customer, fct_orders, agg_monthly_revenue.

Какая модель на каждом слое medallion
BronzeМодель диктуется источником, осознанного моделирования нет — это сырьё
SilverНет единой канонической модели; commonly write-оптимизировано: 3NF-подобное или Data Vault
GoldRead-оптимизировано: размерная модель или широкая таблица

Почему именно три слоя, а не один или десять

Можно спросить: зачем три? Почему не грузить из bronze сразу в gold?

Каждый слой решает свою задачу, и пропуск любого больно бьёт:

  • Без bronze теряется возможность переиграть обработку — нет исходных данных, баг в трансформации означает потерю.
  • Без silver очистка и согласование размазываются по витринам gold; одна и та же логика дублируется в каждой витрине, расходится, и единого «согласованного представления сущностей» нет.
  • Без gold аналитик работает с нормализованными silver-таблицами — десятки JOIN, медленно, непонятно бизнесу.

Три слоя — это разделение трёх разных ответственностей: принять, согласовать, подать. А почему не десять? Больше слоёв — больше копий данных, больше пайплайнов, больше задержка. Три — проверенный баланс. При необходимости внутри слоя делают подслои (silver.staging, silver.core), но базовых уровней зрелости остаётся три.

СлойЗрелостьЗапись/чтениеТипичная модель
BronzeСырьёAppend-onlyСтруктура источника
SilverОчищено, согласованоWrite-оптимизировано3NF-подобное / Data Vault (commonly)
GoldБизнес-готовоRead-оптимизированоStar schema / OBT / агрегаты
TIP

Когда вы слышите спор «Kimball против Data Vault» — частый ответ в архитектуре с medallion: оба, на разных слоях. Data Vault или 3NF-подобная модель на silver как согласованный backbone; Kimball star schema на gold как consumption-слой. Medallion даёт каркас, в котором обе методологии не конкурируют, а дополняют друг друга.

Medallion в production — как bronze/silver/gold реализуются в batch-пайплайне Delta Lake как хранилище для medallion — ACID и time travel на каждом слое

Попробуй сам

Возьмите источник — например, выгрузку заказов интернет-магазина в JSON.

  1. Опишите, как выглядела бы строка этого заказа в bronze-таблице. Какие технические метаданные приёма вы бы добавили?
  2. Перечислите 4-5 операций, которые произойдут с этими данными на пути bronze -> silver (типизация, очистка, дедупликация, согласование).
  3. Опишите 2-3 gold-таблицы, которые вы построили бы поверх silver для типичных вопросов бизнеса («выручка по месяцам», «топ клиентов»). Какая модель — star schema или OBT?
  4. Объясните себе, почему нельзя просто грузить из bronze сразу в gold, минуя silver. Что конкретно потеряется?

В следующем уроке детально разберём One Big Table — одну из главных моделей gold-слоя — и её компромисс «storage против compute».


Проверка знанийKnowledge check
Что описывает medallion architecture, почему это НЕ методология моделирования, и какая модель данных уместна на каждом из трёх слоёв?
ОтветAnswer
Medallion architecture описывает организацию хранилища в три слоя по зрелости данных: bronze (сырьё из источников как есть, append-only, плюс метаданные приёма), silver (очищенные, типизированные, дедуплицированные, согласованные между источниками данные) и gold (бизнес-готовые витрины, оптимизированные под чтение). Это НЕ методология моделирования и не альтернатива Kimball или Data Vault: medallion говорит только про слои зрелости, а внутри каждого слоя всё равно нужна конкретная модель — это ортогональные вопросы. На bronze осознанной модели практически нет — структура диктуется источником, это сырьё. Silver не имеет одной канонической модели, но commonly моделируется write-оптимизированно: часто 3NF-подобные или Data Vault-подобные структуры, потому что это слой согласованных сущностей. Gold моделируется read-оптимизированно: star schema (Kimball), One Big Table или предвычисленные агрегаты. Три слоя разделяют три ответственности — принять, согласовать, подать; пропуск любого из них теряет соответственно возможность переиграть обработку, единое согласованное представление сущностей или удобство для аналитика.

Проверьте понимание

Результат: 0 из 0
Концептуальный
Вопрос 1 из 4. Что из перечисленного точнее всего описывает medallion architecture?

Закончили урок?

Отметьте его как пройденный, чтобы отслеживать свой прогресс

Войдите чтобы оценить урок

Прогресс модуля
0 из 5