Data Vault 2.0: хабы, линки, сателлиты
Data Vault — методология моделирования детального слоя хранилища, рассчитанная на частые изменения источников и полную историчность. Она не заменяет витрины: пользователи по-прежнему работают со звёздами и плоскими таблицами, а Data Vault служит устойчивым слоем между источниками и витринами.
Три типа сущностей
| Сущность | Что хранит | Пример |
|---|---|---|
| Хаб | Уникальный бизнес-ключ и технические атрибуты загрузки | hub_client: ИНН или номер клиента |
| Линк | Связь между двумя и более хабами | link_client_contract |
| Сателлит | Описательные атрибуты с историей изменений | sat_client_profile: адрес, сегмент |
Когда подход оправдан
- много источников, которые описывают одни и те же бизнес-объекты по-разному;
- источники часто меняют структуру, а загрузку нельзя останавливать;
- нужна полная история и возможность восстановить состояние данных на любую дату.
Для небольшого хранилища с одним-двумя стабильными источниками Data Vault обычно избыточен: число таблиц растёт в разы, а выгоды не видно.
Хэш-ключи
В версии 2.0 суррогатные ключи заменены хэшами от бизнес-ключей. Это позволяет загружать хабы, линки и сателлиты параллельно, не дожидаясь генерации последовательностей.
md5(upper(trim(coalesce(client_code, '')))) AS hk_client
Нормализацию ключа — регистр, пробелы, пустые значения — нужно зафиксировать один раз и использовать во всех потоках, иначе один клиент получит несколько хэшей.
Частые ошибки
- в хаб попадает технический идентификатор источника вместо бизнес-ключа;
- сателлиты собирают атрибуты с разной частотой изменений в одну таблицу — история разрастается;
- витрины строятся прямо поверх сырого слоя без промежуточного бизнес-слоя.