Data Vault 2.0 на собеседовании Data Engineer

Готовься к собесу аналитика как в Duolingo
10 минут в день — SQL, Python, A/B, метрики. 1700+ вопросов в Telegram
Открыть Карьерник в Telegram

Карьерник — 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. Список бизнес-ключей. Только сам ключ + метаданные.

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 — вставляем новую запись (новая версия атрибутов).

Готовься к собесу аналитика как в Duolingo
10 минут в день — SQL, Python, A/B, метрики. 1700+ вопросов в Telegram
Открыть Карьерник в Telegram

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 — параллельность. Если делаете последовательно — теряете преимущество.

Связанные темы

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+ вопросами для собесов.