Медальон-архитектура на собеседовании Data Engineer
Карьерник — Duolingo для аналитиков: 10 минут в день тренируй SQL, Python, A/B, статистику, метрики и ещё 3 темы собеса. 1500+ вопросов в Telegram-боте. Бесплатно.
Содержание:
Зачем разбирать на собесе
Медальон — стандартный паттерн lakehouse-архитектуры. На собесе DE: «отличия слоёв», «зачем bronze, если есть source», «какие тесты на gold». Senior — нюансы time-travel, schema evolution, CDC.
Layer Bronze
Сырьё.
Что хранить:
- Точная копия источника (или минимально трансформированная).
- Все колонки, включая «мусорные».
- Append-only — никогда не перезаписывать.
- Метаданные: load_timestamp, source_file, ingest_id.
Преобразования:
- Парсинг JSON / Avro в табличную форму.
- Type casting (string → int / date).
- Никакой бизнес-логики.
CREATE TABLE bronze.events (
raw_data VARIANT, -- raw JSON
user_id BIGINT,
event_at TIMESTAMP,
ingested_at TIMESTAMP,
source_file STRING
);Зачем нужен. При смене бизнес-правил можно переиграть pipeline без перезагрузки источников. Пожизненный «временной снимок».
Layer Silver
Очищенный, нормализованный, joined.
Что делать:
- Очистка (дубли, NULL, edge values).
- Нормализация типов (timestamps в UTC, currency в основной валюте).
- Joining с справочниками (lookup, dim).
- SCD2 для изменяющихся атрибутов.
- Идемпотентность (можно перезапустить без поломки).
Чего не делать:
- Бизнес-агрегаций (это gold).
- Отчётной денормализации.
CREATE TABLE silver.events (
event_id STRING,
user_id BIGINT,
user_country STRING, -- joined FROM dim_user
event_type STRING,
event_at TIMESTAMP, -- UTC
amount_usd DECIMAL, -- normalized
device_type STRING,
is_test BOOLEAN
);Silver — «source of truth» для аналитики и ML. Большинство downstream читает отсюда.
Layer Gold
Витрины для бизнеса.
Что делать:
- Star schema или denormalized (под конкретные dashboard'ы).
- Pre-aggregations (DAU, weekly revenue).
- Бизнес-метрики, KPIs.
- Оптимизировано под BI-производительность.
CREATE TABLE gold.daily_revenue (
DATE DATE,
country STRING,
product_category STRING,
revenue_usd DECIMAL,
orders_count BIGINT,
unique_users BIGINT
);Gold-таблиц обычно меньше, чем silver — каждая под конкретное потребление (Tableau dashboard, ML feature, ad-hoc анализ).
Тесты на каждом уровне
Bronze:
- Row count > 0 (источник не пустой).
- Schema match (новых колонок нет / есть).
- Freshness (свежесть load).
Silver:
- Uniqueness (PK constraint).
- Not null (NOT NULL обязательных).
- Referential integrity (FK существуют).
- Accepted values (status в enum).
Gold:
- Business rules (revenue > 0).
- Reconciliation (sum по dim'ам = total в fact).
- Sanity (DAU < users count).
- Custom metrics (соответствие историческим трендам).
В dbt — tests/, в Great Expectations / Soda — отдельные suites. Запускать на каждом dbt run.
Data contracts
Современная практика — explicit data contracts между layers.
Контракт описывает:
- Schema (колонки, типы).
- Constraints (PK, FK, NOT NULL).
- Freshness SLA (silver обновляется каждые 6 часов).
- Quality SLA (uniqueness ≥ 99.9%).
- Versioning (semver).
Tools: Soda Contracts, Great Expectations, dbt schema, Apache Avro Schema Registry.
Контракты особенно важны на границе bronze ↔ source (provider'ом не контролируется) и silver ↔ gold (consumer'ы downstream).
Частые ошибки
Skip bronze. Сразу пишем silver — теряем возможность переиграть.
Деформировать bronze. Бизнес-правила в bronze = пайплайн ломается при изменении правил.
Slid silver и gold. Если в silver уже агрегации — gold становится копией. Граница потеряна.
Тесты только на gold. Ошибки замечают на финале — пайплайн уже залил мусор.
Не вести lineage. В медальоне особенно важно знать, какая колонка из какой таблицы.
One-shot rebuild каждого слоя. Incremental на bronze, silver, gold — must-have для production.
Игнорировать time-travel. Iceberg / Delta дают версионирование таблиц — крайне полезно для audit и rollback.
Связанные темы
- ETL vs ELT для DE
- Lakehouse Iceberg Delta для DE
- dbt incremental models для DE
- Star schema vs Snowflake для DE
- Подготовка к собесу Data Engineer
FAQ
Bronze — это data lake?
Часто да. Bronze может быть в S3 / GCS (parquet / Iceberg / Delta). Silver / Gold — внутри DWH (Snowflake / Databricks / CH).
Сколько слоёв оптимально?
3 (bronze / silver / gold) — стандарт. Иногда дополнительный слой (raw, archive). Не более 5.
Можно ли пропустить silver?
Для маленьких pipeline'ов (1-2 источника, известная схема) — да, ETL-style напрямую в gold. На сложных — silver важен.
Это официальная информация?
Нет. Статья основана на материалах Databricks (medallion architecture), dbt Labs, Lakehouse pattern.
Тренируйте Data Engineering — откройте тренажёр с 1500+ вопросами для собесов.