Перейти к содержанию

Medallion Architecture

Раздел 01 · Уровни и общие гарантии

Тип материала: архитектурный разбор. Схемы и примеры иллюстративные, если не указано иное.

Уровень: логическая организация качества и представлений данных. Проверка источников: 2026-11-02.

1. Назначение и решаемая проблема

Medallion делает явным переход от принятого input к проверенным данным и бизнес-показателям. Она полезна, когда аналитики, data scientists и аудиторы нуждаются в разных представлениях одной истории и должны понимать, где были применены правила качества.

Bronze/Silver/Gold — роли данных, не три обязательных физических копии и не встроенная гарантия достоверности. Ошибочная сумма не становится правильной после перемещения в каталог gold.

2. Принцип работы

Bronze сохраняет исходные сообщения и ingestion metadata. Silver нормализует типы, проверяет ключи, обрабатывает duplicates и связывает revisions. Gold строит бизнес-модель: например оборот по merchant и currency.

Ошибочные записи переводятся в quarantine с причиной и исходным идентификатором; их нельзя незаметно терять. Каждая выходная версия должна указывать input versions и rule version. Это позволяет отличать «данные ещё не дошли» от «данные отклонены» и повторить только нужный участок.

3. Архитектурная схема

flowchart TB
    S["Events и batch files"] --> B["Bronze: raw и provenance"]
    B --> V["Validation и normalization"]
    V --> X["Quarantine с причиной"]
    V --> I["Silver: canonical records"]
    X --> C["Исправление и повторная проверка"]
    C --> V
    I --> G["Gold: versioned metrics"]
    G --> U["BI и ML"]

4. Walkthrough движения данных

  1. В bronze поступают settlement file и live events. Сохраняются оригинальные payload, source position, schema version и received_at.
  2. Validation проверяет обязательные поля, currency и business key. Две доставки event_id не должны дать две операции.
  3. Silver сохраняет canonical transaction и revision; связь с raw позволяет объяснить каждую строку. Нераспознанный currency code отправляется в quarantine.
  4. После исправления справочника этот input повторно проходит validation. Нельзя просто переписать gold без следа изменения.
  5. Gold пересчитывает затронутый период или делает корректирующий upsert; отчёт получает dataset version и completeness status.
  6. Закрываемый финансовый отчёт читает согласованный набор версий, а не произвольный latest каждой таблицы.

5. Технологии реализации

Варианты: Spark/dbt для transformations; Delta Lake, Iceberg или Hudi для table storage; Kafka/Connect для ingestion; catalog и lineage store для provenance. Это логический паттерн и он может реализовываться также SQL schemas в warehouse.

FACT: документация Databricks называет Bronze/Silver/Gold слоями качества. INFERENCE: из этих названий не следует одна ACID transaction через весь pipeline; проверять нужно конкретный table/engine contract. Databricks, обновление 2026-10-29.

6. Консистентность и гарантии обработки

Atomic commit одной таблицы не означает атомарное обновление нескольких слоёв. Для согласованного отчёта потребуется published manifest input/output versions либо orchestration gate. Между слоями допустим lag, но он должен быть наблюдаемым.

Важны два разных контроля: idempotent ingestion предотвращает duplicate effect, а semantic validation проверяет смысл. Дедупликация по неверному ключу может удалить легитимные две одинаковые по сумме операции. «Exactly-once gold» не исправляет такой key design.

7. Отказы и восстановление

Сбой Восстановление Проверка
Silver job упал до commit Повторить из bronze с тем же input scope Нет частично видимого результата
Изменилось quality rule Новая rule version и controlled backfill Разница объяснима по IDs/причинам
Gold обновлён, dimension ещё старый Не публиковать report manifest Читатель не видит смешанный release
Quarantine растёт Alert owner, исправить правило/producer Учёт unique accepted + duplicates + quarantined + pending покрывает input

Удаление raw ради экономии ограничивает reprocessing. Retention согласовывать с recovery и privacy; «raw immutable» не означает бессрочное хранение любых PII.

8. Масштабирование и узкие места

Основные затраты: repeated scans, small files, merge/update amplification и lineage metadata. Partitioning выбирается по доступу и backfill scope, а не по каждому high-cardinality business ID. Gold tables могут быть узкими, silver — детальными, bronze — append-oriented.

По мере роста важнее точный incremental dependency graph, чем дополнительные слои. Не каждый промежуточный transform нужно сохранять физически. Следить за freshness каждого слоя и количеством input без конечного решения.

9. Преимущества и недостатки

Плюсы: прозрачные quality gates, traceability, повторная обработка из raw и разные формы потребления. Минусы: дополнительное storage/compute, задержка между слоями и необходимость version-aware публикации.

Простому отчёту из одной контролируемой OLTP-таблицы три слоя могут добавить лишнюю работу. Слои полезны, когда соответствуют разным контрактам и owners.

10. Альтернативные решения

Прямое ELT в marts подходит при малом числе источников и уже качественных данных. Warehouse staging/core/marts решает похожую задачу другим словарём. Kappa и Lambda описывают execution/recompute и могут проходить через все три слоя. Data Mesh определяет ownership, включая владельцев этих quality contracts.

11. Реальные примеры и границы подтверждения

FACT: статья Patrick Brown, Lead Product Manager Data Platform FedEx, от 2025-12-15 прямо описывает Medallion как основу Enterprise Data Platform. Совместная публикация FedEx/Databricks.

UNKNOWN: из текста нельзя вывести универсальный transaction protocol между слоями или считать каждый опубликованный gold dataset финансово закрытым. Это документированный пример слоёв, не benchmark.

12. Применение в FinTech и iGaming

FinTech: raw bank reports → canonical ledger/provider records → reconciled reporting datasets. Расхождения сохранять отдельно, не исправлять изменением исходного файла.

iGaming: original bet/result messages → canonical bet revisions → player/market aggregates. Late correction должна заново затронуть silver и зависимые gold metrics. Bronze telemetry сама по себе не служит authoritative wallet ledger.

13. Типичные ошибки проектирования

  • Считать quality gate обычным cast с silent NULL.
  • Удалять quarantine rows из контроля completeness.
  • Терять исходный payload при schema evolution.
  • Считать ACID таблицы общей транзакцией bronze/silver/gold.
  • Создавать gold без owner и определения метрики.

14. Вопросы технического интервью с ответами

Обязателен ли Delta Lake? Нет, это логическая организация; нужны подходящие guarantees выбранного storage/compute.

Что означает completeness gold? Что определённый input scope обработан по установленным правилам, включая явный учёт quarantine и pending; не просто успешный job.

Как изменить правило дедупликации? Выпустить rule version, пересчитать staging dataset, объяснить differences и опубликовать новое поколение.

15. Практическое упражнение

HYPOTHETICAL: шесть input rows содержат один повтор event_id и одну запись с неизвестной currency. Спроектируйте bronze metadata, quarantine reason и silver business key.

Ожидается четыре принятых unique events, один duplicate и один quarantine при заданном различии ключей. После исправления currency ожидается пять принятых unique events и новый gold release. Опишите, как доказать баланс input без потери исходных шести строк.

Дополнительные источники

Medallion docs; FedEx; Delta: concurrency control.