Learning Platform
Глоссарий Troubleshooting
Урок 16.05 · 18 мин
Начальный
data-vaulthub-link-satellitedwh-methodologyauditability

Введение в Data Vault как третий путь

Inmon и Kimball — два классических подхода, и оба появились в 1990-х. Но у каждого есть ограничение. Нормализованное ядро Inmon тяжело менять, когда добавляется новый источник: схема ядра завязана на интеграцию всех систем сразу. Размерная модель Kimball отлично подходит для потребления, но плохо приспособлена к роли строго auditable-хранилища сырых данных из множества источников.

Data Vault — третий подход, который появился во многом как ответ на эти ограничения. Его создал Dan Linstedt; первая версия (DV1.0) сформирована в начале 2000-х, а Data Vault 2.0 добавил hash-ключи, паттерны параллельной загрузки и интеграцию с современным тулингом. Этот урок — обзорное введение; подробно Data Vault разбирается в отдельном модуле курса.


Зачем нужен Data Vault

Data Vault решает три задачи, которые плохо даются классическим подходам.

Auditability — полная прослеживаемость. Data Vault хранит ВСЕ данные из источников, как они пришли, со всей историей и метаданными о происхождении. Никогда ничего не удаляется и не перезаписывается — только добавляется. В любой момент можно доказать, какие данные, когда и из какого источника попали в хранилище. Для аудита и регуляторных требований это ключевое свойство.

Гибкость к изменениям. Добавление нового источника или новой сущности в Data Vault не ломает существующую структуру — добавляются новые таблицы, старые не трогаются. Это резко отличается от нормализованного ядра Inmon, где новый источник часто требует переделки схемы.

Параллельная загрузка из многих источников. Структура Data Vault и hash-ключи (о них ниже) позволяют грузить разные таблицы независимо и параллельно, без центрального координатора. Когда источников десятки, это критично для скорости загрузки.

Data Vault обычно располагается между source-системами и витринами потребления — как интегрированный, auditable backbone. Финальные витрины для BI (star schema) строятся уже поверх него.

Стоит понять, почему Data Vault так хорош именно в приёме данных из многих источников. Главная боль интеграции — источники меняются: один добавляет новое поле, другой меняет формат, третий вообще появляется впервые. В нормализованном ядре Inmon такое изменение часто требует переделки схемы ядра, потому что ядро спроектировано как единое целое. Data Vault устроен так, что новый источник или новый атрибут — это всегда добавление таблицы (нового satellite, нового hub, нового link), а не изменение существующих. Структура растёт «вширь» новыми таблицами, и уже работающие загрузки не ломаются. Эта устойчивость к изменениям источников — прямое следствие дробления данных на hub, link и satellite, и она же делает Data Vault удобным фундаментом для долгоживущего хранилища, в которое источники добавляются годами.

Место Data Vault: backbone между источниками и витринами
Source-системыМножество источников данных компании.
параллельная загрузка
Data VaultИнтегрированный auditable backbone. Hub, Link, Satellite. Хранит всё, со всей историей и метаданными.
построение витрин
Размерные витрины (star schema)Consumption-слой для BI. Строится поверх Data Vault, часто в стиле Kimball.

Три строительных блока

Главная идея Data Vault — разделить то, что в обычной таблице слито воедино, на три разных типа таблиц. У каждого — своя единственная роль.

Hub — хранит business keys. Hub представляет одну бизнес-сущность через её business key — устойчивый идентификатор из реального мира (номер клиента, артикул товара). В hub только: hash key (PK), сам business key, дата загрузки, источник записи. Никаких описательных атрибутов. Hub отвечает на вопрос «какие сущости этого типа вообще существуют».

Link — хранит связи. Link представляет связь или транзакцию между бизнес-ключами (всегда трактуется как many-to-many). В link только: собственный hash key, hash-ключи связываемых hubs, дата загрузки, источник. Тоже никаких описательных атрибутов. Link отвечает на вопрос «какие сущности связаны между собой».

Satellite — хранит атрибуты и историю. Satellite содержит описательные атрибуты hub или link И всю их историю во времени. Каждое изменение атрибутов — новая строка satellite. Satellite отвечает на вопрос «какими были атрибуты сущности и как они менялись».

Hub, Link, Satellite — разделение ролей
HubBusiness keys одной сущности. Hash key, business key, дата загрузки, источник. Без описательных атрибутов.
LinkСвязь между business keys, всегда many-to-many. Hash key, hash-ключи hubs, дата загрузки, источник. Без описательных атрибутов.
SatelliteОписательные атрибуты hub или link и вся их история. Каждое изменение — новая строка.

Сравним с обычным подходом. В Kimball-dimension dim_customer в одной таблице слиты: идентификатор клиента, описательные атрибуты, история (через SCD). Data Vault разносит это по трём таблицам: business key клиента — в hub, его атрибуты и история — в satellite, его связь, скажем, с заказами — в link. Зачем такое дробление? Именно оно даёт гибкость (новый атрибут — новый satellite, ничего не ломается) и параллельную загрузку (hub, link, satellite грузятся независимо).

Стоит разобрать, почему дробление так влияет на гибкость. Когда идентификатор, атрибуты и связи слиты в одну таблицу, любое изменение задевает всю таблицу: добавили атрибут — изменили схему dim_customer, поменяли способ связи — снова трогаем ту же таблицу. Когда же эти три аспекта разнесены, каждый меняется независимо. Появился новый набор атрибутов из нового источника — это новый satellite, прицепленный к существующему hub; сам hub и другие satellites не трогаются. Появилась новая связь между сущностями — это новый link; hubs остаются как были. Дробление превращает «изменение схемы» в «добавление таблицы», а добавление таблицы безопасно: оно ничего не ломает в уже работающих загрузках. Это и есть инженерная причина, по которой Data Vault так устойчив к эволюции источников.

Полезно также понять, почему link всегда трактуется как many-to-many, даже если связь сейчас выглядит как «один к одному». Data Vault сознательно закладывает максимальную общность: сегодня у заказа один клиент, но завтра бизнес-правила могут измениться (совместные заказы, смена владельца), и если связь зафиксирована как link, такое изменение — это просто новые строки в существующем link, без переделки структуры. Жёстко зашитая связь «один к одному» при изменении правил потребовала бы миграции. Link как универсальная many-to-many структура — это ещё одно проявление главного принципа Data Vault: проектировать так, чтобы будущие изменения добавляли данные, а не ломали схему.


Hash-ключи: почему не sequence

В Data Vault 2.0 ключи (PK у hub и link) — это hash от business key: MD5 или SHA-256. Не монотонные integer-последовательности, как привычные surrogate keys.

Зачем хеш? Хеш детерминирован: любой процесс, зная business key, независимо вычислит ровно тот же ключ — без обращения к центральному генератору последовательности. А это и открывает параллельную загрузку: hub, его satellites и links можно грузить одновременно разными процессами, каждый сам считает нужные хеши, координация между ними не нужна. С sequence-ключами так нельзя — пришлось бы синхронизироваться вокруг общего счётчика. Бонус хеша — фиксированная ширина ключа (16 байт у MD5, 32 у SHA-256). Цена — риск коллизий и стоимость вычисления хеша. Подробнее — в отдельном модуле про Data Vault.

NOTE

Ключевая связка: hash-ключ детерминирован -> любой процесс вычисляет его независимо -> hub, link, satellite грузятся параллельно без центрального координатора. Параллельная загрузка из многих источников — одно из главных преимуществ Data Vault, и держится оно именно на детерминированности хеша.


Data Vault в ряду трёх подходов

Поставим Data Vault рядом с Inmon и Kimball, чтобы увидеть его нишу.

АспектInmonKimballData Vault
Главный приоритетСогласованность, интеграцияСкорость, BI-потреблениеAuditability, гибкость, параллельная загрузка
СтруктураНормализованное ядро (3NF)Star schemaHub / Link / Satellite
Роль в архитектуреИсточник истиныСлой потребленияИнтегрированный backbone
Реакция на новый источникЧасто переделка схемыНовая витринаНовые таблицы, старые не трогаются

Важно понимать: Data Vault — не замена Inmon или Kimball, а дополнение. Он не предназначен для прямого потребления аналитиками — запросы к hub/link/satellite требуют множества JOIN. Его роль — быть auditable, гибким, параллельно загружаемым backbone. А витрины для BI поверх него почти всегда строят размерными — то есть по Kimball.

Именно поэтому Data Vault так хорошо вписывается в гибридные архитектуры из прошлого урока: он играет роль того самого интегрированного слоя (silver в medallion), а Kimball-витрины — слоя потребления (gold). Современная мейнстрим-связка — Data Vault как backbone плюс Kimball как consumption.

TIP

Не воспринимайте три подхода как конкурентов “кто победит”. Inmon, Kimball и Data Vault решают разные задачи и в зрелой архитектуре сосуществуют: Data Vault интегрирует и хранит auditable-историю, Kimball отдаёт данные в удобном для BI виде, а сама идея слоёв-зрелости приходит из medallion. Понимание всех трёх — это и есть инженерная грамотность в моделировании DWH.

Auditability Data Vault в контексте data governance — lineage и прослеживаемость

Попробуй сам

Возьмите бизнес-сущность «клиент» и её связь с «заказами».

  1. Распределите по трём типам таблиц Data Vault: где будет храниться номер клиента (business key)? где — его имя, адрес и их история? где — факт связи клиента с заказом?
  2. Сравните с тем, как те же данные хранились бы в одной Kimball-dimension dim_customer со SCD2. Что Data Vault разносит по трём таблицам и зачем.
  3. Объясните своими словами: почему детерминированность hash-ключа делает возможной параллельную загрузку, а sequence-ключ — нет.
  4. В гибридной архитектуре «Data Vault + Kimball» — какой слой за что отвечает? Почему витрины для аналитиков всё равно делают размерными, а не запрашивают Data Vault напрямую.

Проверка знанийKnowledge check
Зачем появился Data Vault, как устроены его три строительных блока hub/link/satellite и почему он не заменяет Kimball, а дополняет его?
ОтветAnswer
Data Vault (создатель — Dan Linstedt; DV2.0 добавил hash-ключи и параллельную загрузку) появился как третий подход, отвечающий на ограничения Inmon и Kimball: нормализованное ядро Inmon тяжело менять при добавлении источника, а размерная модель Kimball плохо подходит на роль строго auditable-хранилища сырых данных из многих источников. Data Vault решает три задачи: auditability (хранит все данные как пришли, со всей историей и метаданными о происхождении, ничего не удаляется и не перезаписывается — только добавляется, и всегда можно доказать что/когда/откуда попало в хранилище), гибкость (новый источник или сущность добавляются новыми таблицами, старые не трогаются), параллельная загрузка из многих источников. Три строительных блока разделяют то, что в обычной таблице слито воедино, и у каждого одна роль. Hub хранит business keys одной сущности (устойчивый идентификатор из реального мира) — только hash key, business key, дата загрузки, источник, без описательных атрибутов. Link хранит связь между business keys, всегда трактуемую как many-to-many — только собственный hash key, hash-ключи связываемых hubs, дата загрузки, источник, тоже без описательных атрибутов. Satellite хранит описательные атрибуты hub или link и всю их историю — каждое изменение это новая строка. Например, где Kimball-dimension dim_customer сливает в одну таблицу идентификатор, атрибуты и историю, Data Vault разносит их: business key в hub, атрибуты и история в satellite, связь с заказами в link — это дробление и даёт гибкость и параллельную загрузку. Ключи hub и link — hash (MD5/SHA-256) от business key, а не sequence: хеш детерминирован, любой процесс вычисляет его независимо, и потому hub, link, satellite грузятся параллельно без центрального координатора. Data Vault не заменяет Kimball, а дополняет: он не предназначен для прямого потребления аналитиками (запросы к hub/link/satellite требуют множества JOIN), его роль — auditable, гибкий, параллельно загружаемый backbone между источниками и витринами; витрины для BI поверх него почти всегда строят размерными, по Kimball. Поэтому мейнстрим-связка — Data Vault как интегрированный backbone (silver) плюс Kimball-витрины как слой потребления (gold).

Проверьте понимание

Результат: 0 из 0
Концептуальный
Вопрос 1 из 4. Какие три задачи Data Vault решает лучше, чем классические Inmon и Kimball?

Закончили урок?

Отметьте его как пройденный, чтобы отслеживать свой прогресс

Войдите чтобы оценить урок

Прогресс модуля
0 из 5