Data Vault 2.0 на собеседовании Data Engineer
Карьерник — Duolingo для аналитиков: 10 минут в день тренируй SQL, Python, A/B, статистику, метрики и ещё 3 темы собеса. 1500+ вопросов в Telegram-боте. Бесплатно.
Содержание:
Зачем разбирать на собесе
Data Vault — современный подход к корпоративным DWH, особенно популярен в банках. На собесе DE: «зачем hub-link-satellite», «hash keys», «raw vs business vault».
Идея Data Vault
Дэн Линштедт. Альтернатива Inmon (3НФ EDW) и Kimball (star marts). Цель — масштабируемый, audit-ready, гибкий DWH.
Принципы:
- Insert-only (никогда не UPDATE).
- Полная история изменений.
- Параллельная загрузка независимых сущностей.
- Audit trail — где, когда, из какого источника пришло значение.
Hub, link, satellite
Три типа сущностей.
Hub. Список бизнес-ключей. Только сам ключ + метаданные.
CREATE TABLE hub_customer (
customer_hash_key BYTES, -- hash of business key
customer_business_key VARCHAR, -- e.g. "CUST-12345"
load_date TIMESTAMP,
record_source VARCHAR -- e.g. "CRM"
);Link. Связь между двумя+ хабами.
CREATE TABLE link_customer_order (
link_hash_key BYTES,
customer_hash_key BYTES,
order_hash_key BYTES,
load_date TIMESTAMP,
record_source VARCHAR
);Satellite. Атрибуты hub'а или link'а с историей.
CREATE TABLE sat_customer_details (
customer_hash_key BYTES,
load_date TIMESTAMP, -- start of validity
load_end_date TIMESTAMP, -- END (или NULL для актуальной)
hash_diff BYTES, -- hash of ALL attributes
name VARCHAR,
email VARCHAR,
phone VARCHAR,
record_source VARCHAR,
PRIMARY KEY (customer_hash_key, load_date)
);История изменений атрибутов хранится в satellite. Новые atributes — новый record с новой load_date.
Hash keys и hash diff
Hash key. SHA-1 / MD5 hash от business key. Используется как PK везде вместо текстовых ключей.
customer_hash_key = MD5("CUST-12345")Зачем:
- Параллельная загрузка независима — нет ожидания generation новых surrogate key'ев.
- Хеш одинаковый между разными источниками для одного business key.
- Фиксированный размер (16 / 20 байт) — равномерные joins.
Hash diff. Hash от всех атрибутов. Используется в satellite для определения «изменилось / не изменилось».
hash_diff = MD5(name + email + phone)Если hash_diff отличается от последней записи в satellite — вставляем новую запись (новая версия атрибутов).
Raw vault vs Business vault
Raw vault — точное отражение источников. Никаких преобразований кроме хеширования и метаданных.
Business vault — производные правила бизнеса (calculated fields, business rules). Опциональный слой.
Information mart (data mart) — на верху, для BI / аналитики. Star schema или denormalized.
Source (CRM, ERP) → Staging → Raw Vault → Business Vault → Information Mart → BIКогда применять
Подходит:
- Большие корпорации (банки, страховщики, телеком).
- Регуляторика требует полный audit (Basel, IFRS).
- Множество источников с разной семантикой.
- Команда DE 5+ человек, опытный team.
Не подходит:
- Стартапы / средний бизнес — overkill.
- Быстрый MVP.
- Маленькая команда DE — DV сложен в эксплуатации.
- Простой случай (1-2 источника, известная схема) — Kimball проще.
Частые ошибки
Дублировать атрибуты в hub. Hub — только бизнес-ключ. Атрибуты — в satellite.
Слишком гранулярные satellites. Можно делать satellite per source / per category, но не на каждый атрибут отдельно — будет overhead.
Использовать DV для analytics. DV не для прямых запросов аналитика. Информационный mart нужен.
Игнорировать hash collisions. MD5 имеет коллизии при огромных объёмах. Многие команды переходят на SHA-1 или SHA-256.
UPDATE в satellite. Никогда. Только INSERT новой версии.
Не загружать в параллели. Главная фишка DV — параллельность. Если делаете последовательно — теряете преимущество.
Связанные темы
- Inmon vs Kimball для DE
- SCD типы для DE
- Star schema vs Snowflake для DE
- DWH ClickHouse на собесе DE
- Подготовка к собесу Data Engineer
FAQ
DV работает на ClickHouse?
С трудом. CH не любит частые INSERT мелкими батчами и не блестит в JOIN. На облачном DWH (Snowflake, BigQuery) DV приживается лучше.
Сколько satellites на один hub?
Обычно 2-5. По логическим группам атрибутов или по источникам.
Effectivity satellite — что это?
Специальный satellite для отметки «активна ли связь / атрибут в данный момент». Используется для temporal queries.
Это официальная информация?
Нет. Статья основана на работах Дэна Линштедта (Linstedt 2000+, Data Vault 2.0).
Тренируйте Data Engineering — откройте тренажёр с 1500+ вопросами для собесов.