Ответ
В Data Vault 2.0 сателлиты (Satellites) хранят контекстные атрибуты и историю изменений для хабов (Hubs) или линков (Links). Широкую таблицу (wide table) декомпозируют по следующим принципам:
- Выделение сущностей (Hubs): Определите бизнес-ключи (например,
CustomerID,OrderID) и создайте для них отдельные хабы. - Выделение связей (Links): Если между ключами есть много-ко-многим отношения (например,
Order-Product), создайте линк-таблицу. - Группировка атрибутов по темпоральности и источнику (Satellites):
- По скорости изменения: Атрибуты, меняющиеся с разной частотой (например,
emailvslast_login_date), можно вынести в разные сателлиты. - По источнику системы (Record Source): Атрибуты из разных систем-источников (CRM, ERP) размещаются в отдельных сателлитах. Это сохраняет трассируемость.
- По семантической группе: Например, все адресные данные клиента (
street,city,zip) — в один сателлит, демографические (birth_date,gender) — в другой.
- По скорости изменения: Атрибуты, меняющиеся с разной частотой (например,
Пример декомпозиции таблицы Customer:
-- Хаб
CREATE TABLE Hub_Customer (
CustomerHashKey CHAR(32) PRIMARY KEY,
CustomerID VARCHAR(50),
LoadDate TIMESTAMP,
RecordSource VARCHAR(20)
);
-- Сателлит с основными данными (из CRM)
CREATE TABLE Sat_Customer_Core (
CustomerHashKey CHAR(32),
LoadDate TIMESTAMP,
FirstName VARCHAR(100),
LastName VARCHAR(100),
Email VARCHAR(255),
HashDiff CHAR(32),
PRIMARY KEY (CustomerHashKey, LoadDate)
);
-- Сателлит с адресом (из другой системы)
CREATE TABLE Sat_Customer_Address (
CustomerHashKey CHAR(32),
LoadDate TIMESTAMP,
Street VARCHAR(200),
City VARCHAR(100),
Country VARCHAR(50),
HashDiff CHAR(32),
PRIMARY KEY (CustomerHashKey, LoadDate)
);
Такой подход повышает гибкость, упрощает загрузку новых источников и улучшает производительность, так как запросы часто затрагивают только нужные группы атрибутов.