Struchkov Mark
d8d8e74b4a
All checks were successful
continuous-integration/drone/push Build is passing
79 lines
6.0 KiB
Markdown
79 lines
6.0 KiB
Markdown
---
|
||
aliases:
|
||
- Таблицы сателиты
|
||
tags:
|
||
- maturity/🌱
|
||
date: 2024-11-25
|
||
---
|
||
![[../../meta/files/images/Снимок экрана 2024-11-25 в 13.57.23.png]]
|
||
|
||
**Основные понятия:**
|
||
- **Хаб (Hub):**
|
||
Таблица, представляющая основную сущность или бизнес-объект, например, клиент, продукт или заказ. В хабе обычно содержатся стабильные и уникальные бизнес-идентификаторы.
|
||
- **Линк (Link):**
|
||
Таблица, представляющая связь между хабами. Она моделирует отношения, например, какой клиент сделал какой заказ.
|
||
- **Сателлит (Satellite):**
|
||
Таблица, привязанная к хабу или линку, которая хранит дополнительные атрибуты и временные данные.
|
||
|
||
**Зачем нужны сателлиты?**
|
||
- **Отделение изменяемых данных от неизменяемых:** Хаб содержит уникальные данные, которые редко изменяются. Все остальные данные, которые могут меняться (например, имя клиента, его адрес или статус заказа), переносятся в сателлиты.
|
||
- **Историзация данных:** Сателлиты поддерживают версионность, т.е. они хранят не только актуальное состояние данных, но и их историю. Это достигается за счет добавления колонок:
|
||
- Дата начала действия версии (`start_date`).
|
||
- Дата окончания действия версии (`end_date`).
|
||
- Индикатор актуальной версии (например, `is_current`).
|
||
- **Разделение областей данных:** Сателлиты позволяют разделить разные типы данных для более удобного хранения и обработки. Например:
|
||
- Один сателлит может хранить адресную информацию.
|
||
- Другой — контактные данные.
|
||
- Третий — финансовую информацию
|
||
- **Облегчение загрузки данных:** При использовании ETL (Extract, Transform, Load) сателлиты упрощают инкрементальную загрузку, так как можно обрабатывать только те записи, которые изменились.
|
||
- **Масштабируемость:** За счет хранения данных в разных таблицах (сателлитах), можно легче управлять растущим объемом данных и делать хранилище более модульным.
|
||
|
||
**Преимущества сателлитных таблиц:**
|
||
- **Поддержка аудита:** История изменений атрибутов сохраняется, что критично для аналитики и соблюдения нормативных требований.
|
||
- **Управление большими данными:** Разделение на хабы, линки и сателлиты делает модель гибкой и позволяет обрабатывать большие объемы данных с меньшими затратами.
|
||
- **Удобство для интеграции:** Модель легко расширяется за счет добавления новых сателлитов без изменения существующей структуры.
|
||
|
||
**Недостатки:**
|
||
- Увеличение количества таблиц и сложности структуры.
|
||
- Медленные запросы из-за множества JOIN-операций.
|
||
- Увеличение объема данных из-за историзации.
|
||
- Сложные и трудоемкие ETL/ELT процессы.
|
||
- Требуется опыт и квалификация для работы с моделью.
|
||
- Ограниченная поддержка в BI-инструментах.
|
||
- Модель может быть избыточной для небольших проектов.
|
||
## Пример
|
||
Предположим, у нас есть сущность "Клиент". В Data Vault модель она будет представлена следующим образом:
|
||
|
||
Хаб (Hub_Client):
|
||
```plaintext
|
||
client_id | business_key | load_date | record_source
|
||
```
|
||
|
||
Сателлит (Satellite_Client_Demographics):
|
||
```plaintext
|
||
client_id | name | birth_date | start_date | end_date | is_current | record_source
|
||
```
|
||
|
||
Сателлит (Satellite_Client_Address):
|
||
```plaintext
|
||
client_id | address | city | country | start_date | end_date | is_current | record_source
|
||
```
|
||
|
||
Здесь:
|
||
- **Hub_Client** хранит уникальный идентификатор клиента (например, ID из CRM).
|
||
- **Satellite_Client_Demographics** хранит демографические данные клиента, которые могут изменяться (например, имя при смене паспорта).
|
||
- **Satellite_Client_Address** хранит адресные данные клиента, включая исторические изменения адресов.
|
||
***
|
||
## Мета информация
|
||
**Область**::
|
||
**Родитель**::
|
||
**Источник**::
|
||
**Создана**:: [[2024-11-25]]
|
||
**Автор**::
|
||
### Дополнительные материалы
|
||
- [Введение в Data Vault / Хабр](https://habr.com/ru/articles/348188/)
|
||
|
||
### Дочерние заметки
|
||
<!-- QueryToSerialize: LIST FROM [[]] WHERE contains(Родитель, this.file.link) or contains(parents, this.file.link) -->
|
||
|