DWH Flashcards

1
Q

Что такое Data Lake и Lakehouse?

Теги: #собес

A

Озеро данных

Озеро данных (Data Lake) – это хранилище большого объема неструктурированных данных, собранных или генерированных одной компанией. В таком подходе в озеро данных поступают все данные, которые собирает компания, без предварительной очистки и подготовки.

Примеры данных:

Видеозаписи с беспилотников и камер наружного наблюдения.
Транспортная телеметрия.
Фотографии.
Логи пользовательского поведения.
Метрики сайтов.
Показатели нагрузки информационных систем и пр.

Эти данные пока непригодны для типового использования в ежедневной аналитике в рамках BI-систем, но могут быть использованы для быстрой отработки новых бизнес-гипотез с помощью ML-алгоритмов.
Основные особенности использования подхода:

Хранятся все данные, включая «бесполезные», которые могут пригодиться в будущем или не понадобиться никогда.
Структурированные, полуструктурированные и неструктурированные разнородные данные различных форматов: от мультимедийных файлов до текстовых и бинарных из разных источников.
Высокая гибкость, позволяющая добавлять новые типы и структуры данных в процессе эксплуатации.
Из-за отсутствия четкой структуры необходима дополнительная обработка данных для их практического использования.
Озеро данных дешевле DWH с точки зрения проектирования.

Преимущества озера данных:

Масштабируемость: распределенная файловая система позволяет подключать новые машины или узлы без изменения структуры хранилища.
Экономичность: Data Lake можно построить на базе свободного ПО Apache Hadoop, без дорогих лицензий и серверов.
Универсальность: большие объемы разнородных данных могут использоваться для различных исследовательских задач (например, прогнозирование спроса или выявление пользовательских предпочтений).
Быстрота запуска: накопленные объемы Data Lake позволяют быстро проверять новые модели, не тратя время на сбор информации из различных источников.

Lakehouse – Databricks определяет Lakehouse как систему управления данными на базе недорогих хранилищ, которая расширяет функции управления и производительности традиционных аналитических СУБД, таких как ACID-транзакции, версионирование, кэширование и оптимизация запросов. Таким образом, Lakehouse сочетает в себе преимущества обоих миров. В следующих разделах мы познакомимся с возможным дизайном Lakehouse, предложенным Databicks.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

В чем разница между OLTP и OLAP (тип нагрузки, принципы)?

Почему OLAP считается append-optimized, а OLTP — нет?

Теги: #wildberries #ЛеруМерлен #🐺 #okko #cобес

A

OLTP для дата инженера это источник данных, production база или её реплика, откуда забираем данные. Строковый тип хранения, работа преимущественно с одной строкой за раз, частые операции вставки/изменения/чтения/удаления. Много простых запросов с высокой степенью concurrency (два и более запроса с пересекающимся временным диапазоном запуска, которые обращаются к одному объекту БД). Может выполнять аналитические запросы, но не оптимизирована для них. Обычно на порядки (в десятки и сотни раз) меньше OLAP базы. Редко хранит историю, чаще SCD1 (перезапись). С ней чаще работают приложения, а не люди напрямую. Примеры: Postgres, MySQL, SQL Server.

OLAP это приёмник данных, зачастую – собственно и представляет собой хранилище (DWH). Может выполнять транзакционные запросы, но не оптимизирована для них. Ориентирована на сложные аналитические запросы (джоины, агрегации, цепочки CTE и/или подзапросов), преимущественно на чтение. Обновление и удаление строк часто ограничено или оптимизировано под замену целиком партиции (insert overwrite table <table> partition (year=<year>, month=<month>) и т.п.). Часто хранит историю (напр. SCD2). К ней могут часто писать ad-hoc запросы (одноразовые, для проверки гипотезы или изучения данных).
Примеры: Greenplum, Clickhouse, Bigquery.</month></year>

  • OLAP считается append-optimized, так как в аналитических системах в основном добавляются новые данные, а обновления минимальны.
  • OLTP не оптимизирован под append, так как делает частые апдейты и удаления, ориентировано на быструю транзакционную обработку.

Сравнение OLAP и OLTP систем

Property | OLAP | OLTP |
|—————————|————————————————————|———————————————–|
| Степень детализации | Хранение детализированных и обобщенных (агрегированных) данных | Хранение детализированных данных |
| Формат хранения | Единый согласованный | Варьируется от задач |
| Допущение избыточности| Контролируемая избыточность | Максимальная нормализация, сложные структуры |
| Управление данными | Периодическое добавление данных | Добавление\удаление\изменение в любое время |
| Количество хранимых данных | Должны быть доступны все данные, в том числе исторические | Должны быть доступны все оперативные данные |
| Характер запросов к данным | Произвольные запросы (ad-hoc анализ данных) | Заранее составленные запросы |

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Чем отличаются колоночные СУБД от строковых, и в каких сценариях используются?

теги #wildberries

A

Строковые (Row-based) СУБД
Принцип хранения данных:
* Данные хранятся построчно — каждая строка полностью записывается в смежных блоках памяти или на диске.
* Это означает, что для каждой строки хранятся значения всех её полей в одном месте.
Преимущества:
1. Оптимальны для транзакционных нагрузок (OLTP):
o Частые операции INSERT, UPDATE, DELETE выполняются быстрее, так как строка читается или изменяется целиком.
o Эффективны для работы с большим количеством небольших транзакций, часто затрагивающих всю строку.
2. Поддержка сложных транзакций:
o Поддерживают ACID-свойства, что делает их идеальными для систем с критичными данными (банковские системы, ERP, CRM).
3. Нативная работа с нормализованными данными:
o Хорошо подходят для моделей данных с высокой степенью нормализации и сложными связями (JOIN-ами).
Недостатки:
* Слабая производительность в аналитических запросах:
o Чтение больших объемов данных для агрегаций или выборки по нескольким полям менее эффективно.
* Слабое сжатие данных:
o Разнотипные значения в строках хуже поддаются сжатию, по сравнению с однотипными колонками.
Сценарии использования:
* OLTP-системы:
o Интернет-магазины, банковские системы, CRM/ERP.
* Системы с большим количеством коротких транзакций:
o POS-системы, системы бронирования.
Примеры строковых СУБД:
* Oracle Database
* PostgreSQL
* MySQL
* Microsoft SQL Server

________________________________________
Колоночные (Column-based) СУБД
Принцип хранения данных:
* Данные хранятся по столбцам — все значения одного столбца записываются в смежных блоках памяти или на диске.
* Это позволяет читать только нужные столбцы для выполнения запросов, игнорируя остальные.
Преимущества:
1. Оптимальны для аналитических нагрузок (OLAP):
o Эффективны для операций агрегации и сканирования больших массивов данных по отдельным колонкам.
o Запросы типа SUM, AVG, COUNT по миллионам строк выполняются быстрее.
2. Эффективное сжатие данных:
o Однотипные значения в колонках хорошо сжимаются.
o При ручной сортировке данных компрессия может увеличиться в разы (до 300x), улучшая производительность и снижая требования к памяти.
3. Поддержка in-memory вычислений:
o Благодаря сильному сжатию данные могут быть загружены в оперативную память, обеспечивая крайне высокую скорость выполнения запросов.
4. Гибкость в построении моделей данных:
o Нормализация данных не обязательна — колоночные СУБД поддерживают денормализованные схемы (звезда, снежинка), упрощая аналитику.
5. Семантика аналитических выражений:
o Поддержка специализированных аналитических функций (скользящие окна, оконные функции, агрегаты).
Недостатки:
* Слабо подходят для OLTP:
o Частые INSERT/UPDATE/DELETE операции менее эффективны, так как затрагивают несколько колонок одновременно.
* Оверхед на запись:
o Необходимость обновления индексов и поддержания сжатия увеличивает время записи данных.
Сценарии использования:
* OLAP-системы:
o Хранилища данных (DWH), BI-решения, аналитика больших данных.
* Системы с интенсивными аналитическими запросами:
o Отчёты, дашборды, прогнозные модели.
Примеры колоночных СУБД:
* ClickHouse
* Amazon Redshift
* Google BigQuery
* Apache Druid
* Vertica
* Microsoft SSAS

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Что такое индексы в базах данных, какие бывают типы? Как они работают в OLTP-системах, как влияют на вставку данных и как решать возникающие проблемы?

Теги: #wildberries #🐺 #open

A
  • Индексы — специальные структуры для ускорения поиска строк в таблице.
  • Типы:
    o B-Tree (подходит для диапазонных запросов)
    o Hash (для точного поиска по ключу)
    o Есть и другие (GiST, GIN и т.п.)
  • Работа в OLTP: ускоряют SELECT, но замедляют INSERT/UPDATE/DELETE и занимают место, так как нужно поддерживать структуру индекса.
  • Решение проблем: оптимальный набор индексов, регулярная перестройка и реорганизация, шардинг/партиционирование.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Что такое модель данных Data Vault?

теги #wildberries #Астон #ПетровичТех #okko

A

Что такое Data Vault
Data Vault – это методология моделирования и построения хранилищ данных (DWH), ориентированная на гибкость, масштабируемость и историзацию данных. Основная идея заключается в разделении логических сущностей (бизнес-ключи, связи, описательные признаки) по разным типам таблиц, что упрощает как процесс интеграции данных из множества источников, так и дальнейшее развитие хранилища.

Основные объекты Data Vault
1. Hub (Хаб)
o Содержит уникальные бизнес-ключи (Business Keys, BK).
o Физически представляет собой таблицу, состоящую как минимум из:
 Бизнес-ключа
 Технического (суррогатного) ключа (обычно называемого HubKey или HashKey)
 Метаданных (LoadDate, RecordSource и т.д.)
o Хабы отвечают на вопрос «Кто / что является центральной сущностью?»
2. Link (Линк)
o Отражает связи (отношения) между хабами (бизнес-ключами).
o Физически содержит ссылки (суррогатные ключи) на все соответствующие хабы, плюс собственный суррогатный ключ и метаданные.
o Линки отвечают на вопрос «Как эти сущности связаны между собой?»
3. Satellite (Сателлит)
o Содержит контекстные (описательные) атрибуты для хаба или линка.
o Физически содержит:
 Суррогатный ключ ссылки на хаб или линк
 Дескриптивные поля (атрибуты)
 Метаданные (LoadDate, RecordSource, иногда дату закрытия версии и т.д.)
o Сателлиты отвечают на вопрос «Какие свойства / характеристики были у данной сущности / связи в конкретный момент?»

Как устроена модель
С точки зрения логики:
* Hub – «центральная точка»: каждая уникальная бизнес-сущность (например, «клиент», «продукт», «заказ») имеет свой хаб.
* Link – «отношения между хабами»: например, «клиент сделал заказ», «товар поставлен в магазин».
* Satellite – «история и контекст»: к каждому хабу или линку может быть один или несколько сателлитов с разными наборами атрибутов (например, Сателлит для личных данных клиента, Сателлит для адресов клиента и т.д.).

Таким образом, Data Vault предполагает, что вы сначала фиксируете «что/кто?» и «как они связаны?», а всю динамику и описательные характеристики храните в отдельных таблицах (сателлитах). Это упрощает реорганизацию модели при добавлении новых источников или изменении структуры данных.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Как обрабатывать историчность в сателлитах дата волт и что происходит при изменении объектов дата волт один и два?

Теги: #wildberries #Астон #ПетровичТех #okko

A

Историчность в сателлитах Data Vault

Сателлиты (satellites) — это таблицы в Data Vault, которые хранят исторические значения изменяемых атрибутов, связанных с хабами (hubs) или линками (links). Они реализуют SCD Type 2, но с рядом особенностей. Историзация означает, что при изменении данных создаются новые версии, а старые не удаляются и не обновляются.

Общее устройство сателлита (DV 1.0 и 2.0)

  • Hub_ID или Link_ID — внешний ключ (обычно HashKey) на хаб или линк
  • Изменяемые атрибуты — бизнес-данные (например, email, phone)
  • LoadDate / LoadDTS — дата загрузки (момент фиксации версии)
  • RecordSource — название источника (система, откуда пришли данные)

Дополнительно (в DV 1.0, опционально в DV 2.0):
- EndDate — дата завершения действия версии
- IsCurrent — булевый флаг “текущая ли версия”

Только в DV 2.0:
- HashDiff — хэш от бизнес-атрибутов для определения изменений

Как фиксируются изменения?

DV 1.0: классическая модель

  1. Находится последняя строка по Hub_ID через MAX(LoadDate) или флаг IsCurrent.
  2. Идёт побайтовое сравнение всех атрибутов:
    • Если изменений нет — запись не вставляется.
    • Если атрибуты изменились — добавляется новая строка.
  3. Дополнительно (опционально):
    • У предыдущей версии ставится EndDate = New.LoadDate - 1
    • Или сбрасывается флаг IsCurrent = false

Минусы:
- Трудно масштабируется при большом количестве атрибутов.
- Сложности с null-ами и форматами (например, “123” против 123)

DV 2.0: хеш-базированный подход

  1. Для каждого входного набора атрибутов считается HashDiff:
    Пример: MD5(CONCAT_WS(‘|’, COALESCE(attr1, ‘∅’), COALESCE(attr2, ‘∅’), …))
  2. HashDiff сравнивается с последним сохранённым HashDiff по ключу (Hub_ID).
    • Если совпадает — изменений нет.
    • Если различается — создаётся новая версия с новым LoadDate.
  3. EndDate не используется — “текущая” версия определяется аналитикой:
    Пример: ROW_NUMBER() OVER (PARTITION BY Hub_ID ORDER BY LoadDate DESC)

Плюсы:
- Масштабируемо, даже с сотнями полей.
- Стандартизирует diff-логику, решает проблемы null-ов.

Пример изменения объекта (клиента)

Изменение email клиента:

Было:
Hub_ID: 123
Email: a@x.com
Phone: 111
LoadDate: 2025-01-01
HashDiff: A1B2

Стало:
Hub_ID: 123
Email: b@x.com
Phone: 111
LoadDate: 2025-04-10
HashDiff: C3D4

→ В сателлит добавляется новая строка, старая остаётся.

Сравнение DV 1.0 и DV 2.0 по историчности

Фича: | DV 1.0 | DV 2.0
—————————–|——————————–|———————————–
Сравнение изменений | По атрибутам | По HashDiff
Обозначение текущей версии | EndDate / IsCurrent | Аналитика (ROW_NUMBER / LEAD)
Null-safe сравнение | Нужно кастомизировать | Стандартизировано через COALESCE
Масштабируемость | Плохо на больших схемах | Отлично масштабируется
Поддержка параллелизма | Сложно | Хорошо реализуется
Расширяемость | Модификации трудоёмки | HashDiff автоматически адаптируется
Тип хранилища | Обычно EDW на RDBMS | DV 2.0 лучше ложится на Big Data, DWH, MPP

Дополнительные нюансы (редкие кейсы)

  • Split Satellite: если атрибуты изменяются с разной частотой — разделяются на разные сателлиты (например, личные данные и адреса отдельно).
  • Out-of-order ingestion: если данные приходят позже, чем LoadDate — требуется обработка через LEAD() и повторная запись EndDate, если используется.
  • Soft deletes: логическое удаление можно фиксировать флагом в сателлите (например, is_deleted = true).
  • HashDiff коллизии: крайне редки, но в критичных системах можно использовать SHA-256.

Итог

Оба подхода сохраняют историю изменений через вставку новых строк.
DV 1.0 проще, но не масштабируется и не стандартизирует diff-логику.
DV 2.0 — индустриальный стандарт: использует HashDiff, отказывается от EndDate, ориентирован на автоматизацию и большие объёмы.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

чем хороша и чем плоха дата ваолт?

Теги: #wildberries #Астон #ПетровичТех #okko

A

Преимущества и недостатки Data Vault

Преимущества
Гибкость и масштабируемость
o Добавление нового источника в модель в большинстве случаев требует лишь добавления новых сателлитов (а иногда и линков, если появились новые связи) без перестройки всех существующих таблиц.
o Модель легко расширяется на новые бизнес-области.
Историзация «из коробки»
o Сателлиты по своей природе уже учитывают историчность: при изменении данных всегда создаётся новая версия записи в сателлите.
o Нет сложностей с поддержанием «эффективных дат» в основных таблицах, как в классической «медленно меняющейся размерности» (SCD) по Кимбаллу.
Разделение ответственности
o Хранение «факта существования сущности/связи» отдельно от «состояния и описательных полей» упрощает логику загрузки и исправления/перезагрузки данных.
Агильная разработка
o Data Vault ориентирован на поэтапное развитие (iterative & incremental). Удобен при больших, часто меняющихся требованиях.

Недостатки
Рост количества таблиц
o Data Vault-модель содержит большее число таблиц по сравнению с классическими звёздными схемами. Это может усложнять её понимание и сопровождение.
o Для аналитиков и бизнес-пользователей такая модель часто выглядит избыточной: она «труднее читать» напрямую без создания витрин.
Сложность формирования витрин
o Чтобы получить «понятные» аналитические витрины (звёздные схемы, дэшборды), нужно строить дополнительные слои (например, Data Marts в звёздной схеме).
o Сложнее SQL-запросы при необходимости напрямую стыковаться с Data Vault-структурами.
Относительно высокая пороговость для вхождения
o Требуются специальные знания методологии.
o Если команда не знакома с принципами Data Vault, кривая обучения может быть достаточно крутой.
Проблемы при работе с «волатильными» бизнес-ключами
o Если бизнес-ключи часто меняются или неустойчивы, это может создавать сложности и приводить к росту сателлитов или другим обходным решениям (например, искусственным ключам).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Что такое Anchor-модель (Anchor modeling), в чем ее особенности и как она устроена?

Теги: #wildberries #Астон

A

Anchor Modeling – гибкий метод моделирования, подходящий для работы с постоянно растущими объемами данных, которые меняются по структуре или содержанию. Якорная модель позволяет воспользоваться преимуществами высокой степени нормализации, при этом оставаясь интуитивно понятной.

Якорная модель включает конструкции:
* Якорь – представляет собой сущность или событие, содержит суррогатные ключи, ссылку на источник и время добавления записи
* Атрибут – используется для моделирования свойств и характеристик якорей, содержит суррогатный ключ якоря, значение атрибута, ссылку на источник записи и время добавления записи
* Связь – моделирует отношения между якорями
* Узел – используется для моделирования общих свойств (состояния)

Плюсы Anchor Modeling
* Нормализованная модель, которая эффективно обрабатывает изменения и позволяет масштабировать хранилища данных без отмены предыдущих действий
* Можно независимо разрабатывать смежные источники, так как данные почти полностью отвязаны друг от друга
* Значительная экономия места в связи с отсутствием нулевых значений (null) и дублирования

Минусы Anchor Modeling
* Создает высокую нагрузку на базу даже для основных видов запросов
* Сложно настроить проверку данных, так как модель состоит из большого количества сущностей со сложными связями
* Большое количество таблиц и join’ов, повышающих риск ошибок
* Требует постоянной поддержки и документирования, так как документация уникальна для каждого бизнеса. Специалистам необходимы дополнительные знания для понимания документации

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Что такое SCD (Slowly Changing Dimensions) и какие существуют типы?

Теги #мир #ЛеруМерлен #Иннотех

A
  • SCD — механизм ведения историчности в измерениях (Dimensions) в DWH.
  • Типы:
    o Type 1: данные перезаписываются (нет истории)
    o Type 2: создаётся новаые строки с датой начала/окончания (история сохраняется)
    o Type 3: В самой записи содержатся дополнительные поля для предыдущих значений атрибута. При получении новых данных, старые данные перезаписываются текущими значениями. Те есть колонка апдейт дейт и текущая версия и старый
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Работали ли вы с Delta Lake?

теги #мир

A

Delta Lake — это хранилище данных с поддержкой ACID-транзакций поверх Apache Spark и Apache Parquet. Разработанное Databricks, оно предоставляет функционал Data Lakehouse, объединяя гибкость Data Lake с надежностью и управляемостью традиционных хранилищ данных (Data Warehouse).

🔑 Основные особенности Delta Lake:
1. ACID-транзакции:
Поддержка атомарных операций гарантирует целостность данных, что особенно важно для параллельных потоков ETL.
2. Схема Enforcement и Evolution:
Delta Lake следит за структурой данных. Он предотвращает загрузку несовместимых данных и поддерживает автоматическую эволюцию схемы (например, добавление новых колонок).
3. Time Travel:
Возможность “путешествовать во времени” и обращаться к старым версиям данных благодаря поддержке версионности.
4. Управление метаданными:
Delta Lake хранит метаданные внутри файлового слоя, что упрощает управление большими данными по сравнению с классическими Metastore.
5. Управление удалением данных (Data Deletion):
Поддержка команд DELETE, UPDATE, и MERGE (Upserts) прямо по данным в хранилище.
6. Управление качеством данных:
Delta Lake позволяет реализовать Data Quality через Delta Live Tables и правила валидации.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Что такое CDC (Change Data Capture)?

Теги: #ЛеруМерлен

A

CDC (Change Data Capture) — что это?

CDC (Change Data Capture) — это способ получения данных из базы без прямого запроса к таблицам (SELECT). Вместо этого система читает изменения (вставки, обновления, удаления) напрямую из журнала транзакций базы данных. Это позволяет избежать дополнительной нагрузки на рабочие таблицы, где может идти активная работа под продакшен-нагрузкой.

Чем CDC лучше обычной батч-загрузки?
Обычная батч-загрузка (например, раз в час) просто берет срез данных на момент запроса, но не видит промежуточные изменения, произошедшие в течение периода. CDC же фиксирует каждое изменение, поэтому:
✅ Можно восстановить полную историю изменений записей.
✅ Нет необходимости делать тяжёлые запросы к самой таблице — всё берётся из журнала транзакций.
✅ Данные можно получать в реальном времени, без задержек, как в обычной батч-загрузке.

Проблема с лишними версиями данных
CDC записывает все версии изменений. Если данные обновлялись несколько раз за короткий промежуток времени, их нужно схлопывать — например, оставлять только последнее изменение или брать среднее значение за период.

Пример использования
Допустим, у нас есть интернет-магазин, в котором все заказы хранятся в PostgreSQL. Эта база работает в режиме OLTP и используется для обработки покупок клиентов.

Однако для аналитики и отчетности нам нужно переносить данные в ClickHouse, который гораздо быстрее обрабатывает большие объёмы информации.

Как это сделать с минимальной нагрузкой на PostgreSQL? Используем CDC через Airflow и Python:
1. Извлекаем изменения из PostgreSQL: Вместо того, чтобы делать тяжёлые SQL-запросы, мы читаем изменения из журнала транзакций базы. Это позволяет получать только изменённые записи, а не всю таблицу заново.
2. Обрабатываем изменения в Airflow: Airflow каждые 5 минут запускает задачу, которая собирает изменения. Например, если заказ обновился 3 раза за период, то мы видим все версии.
3. Записываем данные в ClickHouse: Перед записью мы схлопываем изменения, оставляя только актуальную версию заказа, чтобы избежать лишних записей.

В результате, мы имеем поток обновлений в ClickHouse почти в реальном времени без избыточной нагрузки на PostgreSQL. Такой подход удобен для построения дашбордов и аналитики.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

В чём разница между логической и физической моделью данных?

Теги: #ЛигаЦифровогоИнтернета

A
  • С помощью логической модели данных бизнес-аналитики и архитекторы данных могут визуализировать операционные или транзакционные процессы на диаграмме взаимоотношений между сущностями. Логические модели данных определяют, как работают и взаимодействуют объекты данных, понятным для заинтересованных представителей бизнеса способом. По этой причине они разрабатываются независимо от реальной базы данных, в которой позже будут развернуты данные.
  • Физические модели данных предоставляют подробные сведения, на основе которых администраторы и разработчики баз данных воспроизводят бизнес-логику в физической базе данных. Эти модели содержат дополнительные атрибуты, которых не было в логической модели данных, например триггеры, хранимые процедуры и типы данных. Поскольку физические модели данных сопоставляют элементы данных с реальной базой данных, в них должны учитываться специфические ограничения платформы, в том числе соглашения об именовании и зарезервированные слова.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Знакомы ли вы с архитектурами Lambda и Kappa? Расскажите архитектуру и плюс и минусы

Теги: #Иннотех

A

**Основы Kappa **
Kappa-архитектура — это архитектура только потоковой обработки данных. При этом есть возможность сохранять данные из Serving layer в долговременное хранилище.

Ключевые аспекты:
Стриминговая обработка данных: Основным принципом Kappa является стриминговая обработка данных, что позволяет анализировать и обрабатывать данные по мере их поступления. Это означает, что данные обрабатываются в режиме реального времени, что особенно важно для приложений, где требуется моментальный отклик.
* Унификация обработки данных: Kappa обеспечивает унифицированный способ обработки данных, независимо от их типа или источника. Это делает его гибким решением, подходящим для разнообразных приложений, включая IoT, аналитику веб-трафика, мониторинг систем и другие.
* Преимущества масштабируемости: Kappa позволяет легко масштабировать систему при увеличении объема данных. Стриминговые платформы, такие как Apache Kafka, предоставляют средства для горизонтального масштабирования.
* Отсутствие необходимости в хранилище “сырых” данных: В Kappa не требуется хранить данные в двух различных хранилищах, как в архитектуре Lambda. Это упрощает архитектуру и снижает накладные расходы на обслуживание.

Лямбда-архитектура: Адаптация к динамике рынка
Лямбда-архитектура представляет собой service-based подход, способный быстро адаптироваться к изменениям рынка и обеспечивать релевантность предложений. Эта архитектура становится особенно актуальной, когда речь идет о таких задачах, как рассылка персонализированных предложений о скидках, где необходимо учитывать как исторические данные клиентов, так и их текущее местоположение.

Если мы объединим потоковую и пакетную обработку, то получим Lambda-архитектуру. У Lambda-архитектуры очень простой подход: мы делим общий поток данных на два потока. Первый поток — это пакетная обработка (Batch layer), а второй поток — это потоковая обработка (Real-time layer).

В Batch layer представлены Primary data layer и Core layer из классического DWH. Затем данные из Batch layer попадают в Serving layer, где находится витрина данных. В Real-time layer появляются представления Real-time View, которые попадают в Serving layer и к которым могут обращаться аналитики.

У Lambda-архитектуры есть свой минус: нам необходимо дублировать логику в оба потока обработки данных. Если нам не нужна пакетная обработка, мы можем убрать её из архитектуры.

Компоненты Лямбда-архитектуры:
1. Пакетный уровень (Batch Layer) - “холодный путь”: Здесь данные хранятся в исходном виде и обрабатываются с задержкой. Этот уровень содержит “сырые” данные, включая нормативно-справочную информацию, изменяющуюся редко. Используя методы машинного обучения, на пакетном уровне проводится анализ исторических данных для сегментации клиентов и создания прогнозных моделей.
2. Скоростной уровень (Speed Layer) - “горячий путь”: Этот уровень обеспечивает анализ данных в реальном времени с минимальной задержкой. Он использует фреймворки потоковой обработки данных, такие как Apache Spark, Storm или Flink, для обработки информации с коротким жизненным циклом. В этом слое делаются некоторые компромиссы в точности в пользу скорости.
3. Сервисный уровень (Serving Layer): Сервисный уровень предоставляет интерфейс для объединения данных из пакетного и скоростного уровней. Он позволяет пользователям получить доступ к консолидированным, актуализированным данным для аналитических целей.
Лямбда-архитектура представляет собой гибкий подход, позволяющий быстро адаптироваться к изменениям и обеспечивать релевантность предложений, что критично в условиях динамичного рыночного окружения.

Отличия от Lambda
1. Kappa vs. Lambda: В архитектуре Lambda данные обрабатываются в двух параллельных потоках: “сырые” данные хранятся в “сыром” хранилище (например, HDFS), а затем обрабатываются и сохраняются в “обработанном” хранилище (например, HBase). Это увеличивает сложность архитектуры и может вызвать задержки между появлением данных и их доступностью.
2. Упрощенная архитектура Kappa: В Kappa данные обрабатываются только в потоке реального времени, и нет необходимости в разделении хранилищ. Это упрощает архитектуру, уменьшает задержки и снижает затраты на обслуживание.
3. Сложность и надежность: Хотя Lambda может быть более надежным при обработке больших объемов данных, Kappa обеспечивает более простую масштабируемость и обновления системы.
4. Пример гибкости Kappa: Представьте себе систему мониторинга событий в реальном времени, где Kappa позволяет обрабатывать и анализировать потоки событий мгновенно, в то время как Lambda может создать задержки в обработке данных.
С учетом этих различий и тенденции к обработке данных в реальном времени, Kappa становится предпочтительным выбором для многих профессиональных разработчиков, особенно в сферах, где скорость и масштабируемость играют важную роль.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Есть ли у вас опыт с CI/CD? Как понимаете этот процесс?

Теги: #Астон

A

CI (Continuous Integration — непрерывная интеграция)
* Разработчики часто заливают код в общий репозиторий (Git).
* При каждом изменении код автоматически проверяется на ошибки (линтеры, статический анализ).
* Запускаются автоматические тесты (юнит-тесты, интеграционные тесты).
* Если что-то сломалось, разработчики сразу узнают и могут исправить.
🔧 Пример инструментов CI:
Jenkins, GitLab CI/CD, GitHub Actions, TeamCity, Travis CI.
________________________________________
CD (Continuous Delivery — непрерывная доставка)
* После CI код собирается в артефакт (Docker-образ, JAR, ZIP).
* Можно в любой момент развернуть его вручную на тестовой/продуктовой среде.
* Часто используется staging-среда для финальных проверок.
🔧 Пример инструментов CD:
ArgoCD, Spinnaker, Octopus Deploy, Ansible, Helm (для Kubernetes).
________________________________________
CD (Continuous Deployment — непрерывное развертывание)
* Полностью автоматизированный процесс, код сразу уходит в прод.
* Тестирование, сборка, деплой без участия человека.
* Требует мощных автоматических тестов и продвинутого мониторинга.
🔧 Популярные инструменты для деплоя:
Kubernetes, Terraform, Docker Swarm, AWS CodeDeploy, Azure DevOps.
________________________________________
Как всё это выглядит вместе?
1. Разработчик делает git push.
2. CI запускает тесты, проверяет качество кода.
3. Если всё ок — создаётся Docker-образ или другой артефакт.
4. CD доставляет код в staging или сразу в прод.
5. Если Continuous Deployment — код автоматически уходит в бой.
🔍 Главные плюсы CI/CD: ✔ Быстрая обратная связь (если код сломан, узнаём сразу).
✔ Минимум ручных ошибок.
✔ Быстрое развертывание новых фич.
✔ Лёгкий откат (rollback) в случае проблем.
Если работаешь с Big Data, то CI/CD может быть полезен не только для кода, но и для ETL-пайплайнов, например, с Airflow или dbt.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Знакомы ли вы со схемами «звезда» и «снежинка»? В чем разница между таблицами фактов и измерений?

Теги: #Астон #Yandex

A

Схемы «звезда» и «снежинка» — это два способа структурировать хранилище данных.

Схема типа «звезда» (пространственная модель, модель измерений и фактов, модель «сущность-связь», dimensional model, star schema) представляется двумя видами таблиц: таблицами фактов и таблицами измерений, которые описывают факты. Схема разбивает таблицу фактов на ряд денормализованных таблиц измерений. Таблица фактов содержит агрегированные данные, которые будут использоваться для составления отчетов, а таблица измерений описывает хранимые данные. Денормализованные проекты менее сложны, потому что данные сгруппированы. Таблица фактов использует только одну ссылку для присоединения к каждой таблице измерений. Более простая конструкция звездообразной схемы значительно упрощает написание сложных запросов.

Схема типа «снежинка» отличается тем, что использует нормализованные данные. Нормализация означает эффективную организацию данных так, чтобы все зависимости данных были определены, и каждая таблица содержала минимум избыточности. Таким образом, отдельные таблицы измерений разветвляются на отдельные таблицы измерений. Схема «снежинки» использует меньше дискового пространства и лучше сохраняет целостность данных. Основным недостатком является сложность запросов, необходимых для доступа к данным — каждый запрос должен пройти несколько соединений таблиц, чтобы получить соответствующие данные.

Таблица фактов — главная таблица, в которой пишутся события, например, текущие заказы или действия пользователей на сайте. Т.е. некие события, которые скорее всего имеют уникальный характер.

Таблица измерений (англ. dimension table) — таблица, в которой хранятся описания объектов. Например id, ФИО курьера, который доставил заказ. Или данные каждого клиента. Таблицы измерений удобны тем, что там можно хранить те данные, которые не часто меняются. Очевидно, что писать в таблице фактов номер телефона клиента будет избыточно. Нам достаточно один раз его записать в таблицу измерений и дать ссылку на это в таблице фактов. И при любом запросе к определенному заказу, мы всегда получим актуальный номер телефона клиента, потому что мы изменили его в таблице измерений.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Как строите/организуете процесс ETL и какие есть принципы построения? С какими инструментами и технологиями работали?

Теги: #Астон #TezaHedgeFund

A
  • ETL: Extract (извлечение данных), Transform (преобразование), Load (загрузка в DWH или хранилище).
  • Шаги:
    1. Получение данных из источников (API, DB, файлы).
    2. Очистка, агрегация, обогащение.
    3. Загрузка в целевую систему (DWH/Data Lake).
  • Инструменты: Airflow, Oozie, NiFi, SSIS, Talend, dbt, Spark.

🔧 Архитектурные и инженерные
1. Идемпотентность
Повторный запуск пайплайна с теми же данными должен давать тот же результат. Используйте MERGE вместо INSERT, избегайте дублей.

  1. Инкрементальность
    Считайте и загружайте только новые или изменённые данные. Используйте поля типа last_updated, created_at, контрольные суммы, CDC и пр.
  2. Работа с репликой источника
    Используйте только реплики баз данных, чтобы не повлиять на продакшн-системы.
  3. Оптимизация забора данных
    Пишите эффективные SQL-запросы или используйте CDC, используйте индексы и WHERE-фильтры, загружайте только нужные столбцы.
  4. Модульность
    Разделяйте пайплайн на независимые блоки: extract, transform, load, validate, notify.
17
Q

Строили ли вы Data Mart (витрину данных)? Что это?

Теги: #Астон

A
  • Data Mart: узконаправленный раздел (витрина) DWH, оптимизированный под конкретную бизнес-задачу (отдел продаж, маркетинг и т.д.).
  • Часто реализуется по звёздной схеме (Fact + Dimensions) для удобства аналитиков.
18
Q

Какие слои могут быть в DWH (хранилище данных), и каковы цели каждого слоя?

Теги: #wildberries

A
  • Staging (Landing): сырые данные без изменений, промежуточное хранение.
  • ODS (Operational Data Store): нормализованные, очищенные данные, близкие к источникам.
  • Core (Enterprise Data Warehouse Layer): интеграция и консолидация, единая модель данных.
  • Data Marts: витрины под нужды конкретных бизнес-задач.
19
Q

Batch vs Streaming. Какие отличия?

Теги: #Ярослав

A
  • Batch: обработка больших объёмов данных «пакетами» по расписанию.
  • Streaming: непрерывная (или почти непрерывная) обработка в реальном времени, по мере поступления данных.

Batch Processing (Пакетная обработка)
Batch Processing — это обработка данных, собранных за определённый период, одним большим пакетом. Это подходит для задач, где не требуется мгновенная реакция.
Частота: Периодическая (например, раз в час, день).
Задержка: Высокая, данные обрабатываются с временной задержкой.
Инфраструктура: Эффективна для больших объемов данных (ETL, ML-модели).
Примеры: Ежедневные отчеты, создание рекомендаций, аналитика.
Преимущества: Обработка больших данных эффективна, позволяет проводить сложную аналитику на полном наборе данных.
Недостатки: Задержка не подходит для задач, требующих реального времени.

Streaming Processing (Потоковая обработка)
Streaming — это обработка данных по мере их поступления, практически в реальном времени. Подходит для задач с минимальной задержкой и немедленным реагированием.
Частота: Постоянная, данные обрабатываются сразу.
Задержка: Минимальная.
Инфраструктура: Требует платформы с низкой задержкой (например, Apache Kafka, Flink).
Примеры: Мониторинг событий, обработка транзакций, отслеживание активности пользователей.
Преимущества: Быстрая реакция на события, позволяет анализировать и обрабатывать данные по мере поступления.
Недостатки: Сложность в реализации, возможно дублирование данных и менее точный результат, чем в Batch.
Итог: Batch — для задач с более длинным циклом обработки и сложной аналитики, а Streaming — для задач с требованием к скорости и минимальной задержке.

20
Q

Что такое нормализация данных и нормальные формы (1NF, 2NF, 3NF, BCNF)? Как связаны нормализация и денормализация, и как это влияет на производительность?

Теги: #🐺 #cобес

A
  • Нормализация – это процесс организации структуры таблиц в базе данных, чтобы уменьшить дублирование данных и повысить целостность (то есть взаимную непротиворечивость) данных.
  • Нормальные формы (1NF, 2NF, 3NF и BCNF) – это последовательные «ступени» требований к таблицам, каждая из которых ужесточает правила и уменьшает избыточность:
    o 1NF: каждая ячейка содержит одно значение, нет повторяющихся групп полей.
    o 2NF: для таблиц, где есть составной (композитный) первичный ключ, все неключевые поля должны зависеть от всего ключа, а не от части.
    o 3NF: в таблице не должно быть транзитивных зависимостей (когда поле зависит не напрямую от ключа, а от другого неключевого поля).
    o BCNF: общее правило – любая детерминирующая зависимость должна идти от ключа, ещё более строгая форма, чем 3NF.
  • Денормализация – это сознательное «ослабление» нормализации (добавление дублирующих полей или таблиц), чтобы ускорить чтение данных. Как следствие:
    o Ускоряется выборка (меньше джойнов, данные уже «под рукой»).
    o Усложняется обновление (при изменении данных необходимо править их копии).

Почему это важно для производительности?
* Сильная нормализация повышает целостность и уменьшает объём хранимых данных, но иногда замедляет сложные запросы (т.к. нужно делать много JOIN-ов).
* Денормализация ускоряет аналитические запросы, но «драгоценную плату» за это – усложнение внесения изменений, рост объема данных и контроль целостности.

21
Q

Какие паттерны/принципы проектирования приложений используете?

Теги: #TezaHedgeFund

A
  • TDD (Test-Driven Development): сначала пишем тесты, отражающие нужное поведение кода, затем код, который их проходит, и в конце рефакторим.
  • KISS (Keep It Simple, Stupid): не усложняйте дизайн и код, когда это не нужно.
  • YAGNI (You Aren’t Gonna Need It): не добавляйте функциональность «на будущее», пока она действительно не потребуется.
  • DRY (Don’t Repeat Yourself): не дублируйте логику, используйте переиспользуемые модули/методы.
  • SOLID (набор принципов для ООП: Single Responsibility, Open/Closed, Liskov Substitution, Interface Segregation, Dependency Inversion).
    Каждый из принципов, в общем, направлен на то, чтобы сделать код более поддерживаемым, понятным и гибким к изменениям.
22
Q

В чём разница между «DWH по Кимбаллу» и «DWH по Инмону»?

Теги: #cобес

A

Кимбалл (Kimball):
* Подход «снизу вверх» (bottom-up):
o Начинаем с отдельных мартов (Data Marts) в формате звёздных (star) или снежинок (snowflake) схем.

Инмон (Inmon):
* Подход «сверху вниз» (top-down):
o Сначала строится Enterprise Data Warehouse (EDW) в более «нормализованном» виде (3NF или близко к этому).
o Сверху для бизнеса создаются витрины (Data Marts) на основании общего корпоративного хранилища.
* Структура более нормализована, изначально ориентирована на целостность и гибкость в долгосрочной перспективе.

23
Q

На одном сервере две базы данных. Можно ли «подключить» таблицу из одной базы в другую и как это сделать?

Теги: #open

A
  • Да, существуют механизмы, которые позволяют делать запросы к таблицам в другой базе данных, как будто они находятся локально:
    o Linked Server в MS SQL Server или Database Link в Oracle.
    o FDW (Foreign Data Wrapper) в PostgreSQL.
    o Synonyms (Oracle, SQL Server) – создаётся объект «синоним», указывающий на удалённую таблицу.
  • Они упрощают написание запросов, так как не нужно постоянно вручную подключаться к другой БД.
24
Q

Какие есть подходы к проектированию DWH? #тг

A

В зависимости от наличия центрального слоя существует два основополагающих подхода
DWH по Инмону - проектирование сверху вниз
DWH по Кимбаллу - проектирование снизу вверх

25
Назовите критерии качества данных. #тг
Ценность (Value) - критерии оценки необходимости использования данных. Проверки: - Использование данных - чем больше объектов или субъектов используют наши данные, тем они ценнее - Выявление застойных данных - поиск данных, которые в настоящее время потеряли актуальность и не используются вообще (например были заменены другим датасетом). Актуальность (Relevance) Актуальность (Relevance) - совокупность характеристик относящихся к соблюдению сроков, синхронизаций или обновления. Проверки: - Время задержки. - Время последней синхронизации. - Время последнего обновления данных в хранилище. Полнота (Completeness) Полнота (Completeness) - мера измерения доли пробелов в данных. Проверки: - Наличие обязательных полей - Наличие необязательных полей - Неполное множество - отсутствие части набора данных по неизвестным причинам. Согласованность (Consistency) Согласованность (Consistency) - мера измерения связанности данных. Пример: данные о пользователях содержат не все данные об их покупках. Датасет покупок частично не связан с датасетом пользователей. Проверки: - Отсутствие расхождения в данных - Корректность связей Доступность (Availability) Доступность (Availability) - процессы и инструменты доступа к данным (юридическая, техническая, операционная). Проверки: - Анализ метрик изменения данных - Анализ метрик чтения данных Достоверность (Veracity) Достоверность (Veracity) - набор свойств для обеспечения однозначности и релевантности данных. Пример: возраст должен быть в адекватных пределах - от 0 до 100. Проверки: - Значения однозначны - Значения действительно возможны и в допустимых пределах.
26
В чем разница между ELT и ETL? #Я
ETL (Extract, Transform, Load) ETL сначала извлекают данные из пула источников данных. Данные хранятся во временной промежуточной базе данных. Затем выполняются операции преобразования, чтобы структурировать и преобразовать данные в подходящую форму для целевой системы хранилища данных. После этого структурированные данные загружаются в хранилище и готовы к анализу. ELT (Extract, Load, Transform) В случае ELT данные сразу же загружаются после извлечения из исходных пулов данных. Промежуточная база данных отсутствует, что означает, что данные немедленно загружаются в единый централизованный репозиторий. Данные преобразуются в системе хранилища данных для использования с инструментами бизнес-аналитики и аналитики.
27
Что такое CAP теорема? #Я
In database theory, the CAP theorem, also named Brewer's theorem after computer scientist Eric Brewer, states that any distributed data store can provide only two of the following three guarantees. Consistency – во всех вычислительных узлах в один момент времени данные не противоречат друг другу; Availability – любой запрос к распределённой системе завершается откликом, однако без гарантии, что ответы всех узлов системы совпадают; Partition-tolerance – расщепление распределённой системы на несколько изолированных секций не приводит к некорректности отклика от каждой из секций. Есть связанный термин – Split brain syndrome, рассинхронизация данных между частями системы из-за несоблюдения P в CAP. Поэтому обычно в MPP системах не жертвуют P и выбирают между CP и AP. Примеры CA: MySQL, SQL Server, MariaDB (SMP базы) Примеры CP: MongoDB, HBase, Redis Примеры AP: Cassandra, Clickhouse
28
Что такое сущность и отнощение? #Я
🔹 Сущность (Entity) **Сущность** — это **объект предметной области**, про который ты хранишь информацию. В базе данных она обычно отображается как **таблица**, а её свойства — как **столбцы**. 💡 Примеры простых сущностей: - `User` — у него есть `id`, `name`, `email`. - `Product` — `id`, `name`, `price`. - `Order` — `id`, `date`, `total`. Сущность — это **тип** объекта, а не конкретный экземпляр. То есть `User` — это сущность, а "Иван Петров" с ID 123 — это **экземпляр сущности** (строка в таблице). --- 🔹 Отношение (Relationship) **Отношение** — это **связь между сущностями**. В реляционных БД отношения реализуются через **внешние ключи** (foreign keys), а иногда через отдельные таблицы-связки. Примеры: 1. **Один-к-одному (1:1)** Один пользователь → один профиль: ```sql users(id PK, name) profiles(id PK, user_id FK, bio) ``` 2. **Один-ко-многим (1:N)** Один пользователь → много заказов: ```sql users(id PK, name) orders(id PK, user_id FK, total) ``` 3. **Многие-ко-многим (M:N)** Много студентов ↔ много курсов: Тут нужна **таблица-связка**: ```sql students(id PK, name) courses(id PK, title) student_courses(student_id FK, course_id FK) -- отношение ``` --- ⚠️ Нетривиальные кейсы 1. **Самосвязь (рекурсивное отношение)** Например, в таблице `employees`: ```sql employees(id PK, name, manager_id FK -> employees.id) ``` Сотрудник может быть подчинён другим сотрудникам. 2. **Сущность-отношение одновременно** Таблица `friendships` в соцсети: Это и **отношение между пользователями**, и **сущность** со своими свойствами (когда создана, кто пригласил). ```sql friendships(id PK, user1_id FK, user2_id FK, created_at) ``` 3. **Полиморфные связи** Например, в системе комментов: комментарии могут быть к статьям, фото, постам. Это уже требует дополнительных механизмов (например, `target_type`, `target_id`) и не реализуется напрямую через FK. --- 📌 Итого: |--------------|---------|--------------------| | Сущность | Объект, про который хранят данные | Таблица | | Экземпляр сущности | Конкретная строка | Строка таблицы | | Отношение | Связь между сущностями | Внешний ключ, таблица-связка | --- Хочешь, могу нарисовать ER-диаграмму с примерами этих случаев или разобрать какой-то конкретный проект (например, Telegram-бот или ETL)? | Понятие | Что это | Представление в БД |
29
Расскажите про принцыпы data governece #Я
💼 Data Governance — это система правил, процессов и ролей для управления качеством, безопасностью и доступностью данных в компании. 🔑 Основные принципы: Ownership (владение данными) ➤ У каждой важной сущности (таблицы, домена, отчёта) должен быть владелец — Data Owner, отвечающий за качество и доступ. Data Stewardship (кураторство данных) ➤ Data Steward следит за соблюдением стандартов, чистотой, соответствием бизнес-правилам. Это «оператор» в мире данных. Data Quality (качество данных) ➤ Контроль дубликатов, пропусков, ошибок. Важны метрики: полнота, достоверность, актуальность, уникальность. Data Security & Privacy (безопасность и приватность) ➤ Чёткие уровни доступа (RBAC/ABAC), защита PII/PHI данных (GDPR, HIPAA), маскирование, шифрование. Data Catalog & Metadata (каталогизация и метаданные) ➤ Каталог всех сущностей с описаниями, связями, владельцами — must-have. Примеры: Apache Atlas, DataHub, Amundsen. Policies & Compliance (политики и соответствие регуляциям) ➤ Документированные политики по управлению данными. Интеграция с DLP и audit-системами. Data Lineage (происхождение данных) ➤ Прозрачность трансформаций: откуда пришли данные, как изменялись, где используются. Data Lifecycle Management ➤ Управление "жизнью данных": от создания и хранения до архивирования и удаления.
30
Что такое МРР системы? #я
⚙️ MPP (Massively Parallel Processing) — архитектура, где данные обрабатываются параллельно на множестве узлов с независимыми ресурсами. 🔑 Ключевые принципы: Децентрализация ➤ Каждый узел — это полноценная единица с собственным CPU, RAM, storage. Нет единой точки отказа (в отличие от SMP). Разбиение данных (Sharding/Partitioning) ➤ Данные распределяются по узлам (обычно по хэш-функции или диапазонам). Узлы работают параллельно над своей частью данных. Параллельное выполнение запросов ➤ Один SQL-запрос разбивается на подзапросы, которые выполняются одновременно на всех узлах, потом собираются в финальный результат. Minimize data movement ➤ Главная задача оптимизатора — избежать лишней пересылки данных между узлами. Это узкое место MPP, особенно при join-ах между разными shard’ами. Scalability ➤ Горизонтальное масштабирование: добавил узел — получил больше мощности. Часто используются в аналитике ➤ Отлично подходят для OLAP-нагрузок, где важна скорость агрегаций по большим объёмам данных. 🛠️ Примеры MPP-систем: Greenplum — PostgreSQL-совместимая MPP-платформа Amazon Redshift ClickHouse (не чистый MPP, но с похожей моделью распределения и масштабирования) Snowflake, Vertica, Teradata
31
Что такое data mesh? #я
**Data Mesh** — это децентрализованный подход к управлению данными в масштабных организациях, направленный на решение проблем масштабирования традиционных централизованных data lake / data warehouse систем. В основе лежит идея, что данные — это **продукт**, а ответственность за их качество, доступность и актуальность должна лежать на **доменных командах**, то есть на тех, кто ближе всего к источникам данных и предметной области. --- 🔧 Ключевые принципы Data Mesh 1. **Доменная ориентация (Domain-oriented ownership)** - Команды, работающие в конкретной предметной области (маркетинг, логистика, продажи и т.д.), отвечают за свои собственные дата-продукты. - Они не просто публикуют данные, а делают их полноценными продуктами: с документацией, SLA, версионированием и т.д. 2. **Данные как продукт (Data as a product)** - Каждый дата-набор должен разрабатываться и сопровождаться как цифровой продукт: - понятный интерфейс доступа (API, SQL, GraphQL и т.д.), - поддержка и мониторинг, - версионирование, - обратная связь от пользователей. 3. **Самообслуживаемая дата-платформа (Self-serve data platform)** - Центральная платформа предоставляет инструменты, стандарты и фреймворки для работы с данными: - автоматизация пайплайнов, - безопасность и контроль доступа, - каталогизация данных и lineage, - CI/CD для дата-продуктов. 4. **Федеративное управление (Federated computational governance)** - Централизованная стратегия управления (data governance), но с реализацией правил на уровне доменов. - Важны стандарты (например, единый подход к метаданным или security), но их реализация доверена доменным командам. --- 🤔 Почему вообще появился Data Mesh? Традиционные архитектуры (data warehouse, data lake) хорошо работают на начальном этапе, но: - Скейлинг централизованных data-ингестов становится узким местом; - Централизованные data-инженеры часто далеки от предметной области; - Медленные релизы, слабое SLA, неясная ответственность. **Data Mesh решает эти проблемы за счёт масштабируемости по принципу организации, а не технологии.** --- 📊 Сравнение с классическим подходом | Архитектура | Подход к данным | Ответственность | Масштабирование | |------------------------|---------------------------------|------------------------|---------------------| | Data Warehouse / Lake | Централизованный ingestion | Централизованная команда | По нагрузке / объёму | | **Data Mesh** | Децентрализованные доменные продукты | Доменные команды | По структуре организации | --- ⚠️ Нетривиальные аспекты и критика - **Сложность внедрения**: требует зрелой культуры DevOps, ownership и data literacy по всей компании. - **Конфликты интересов**: команды могут не хотеть брать на себя доп.ответственность. - **Дублирование логики**: без строгой платформенной поддержки легко нарушить единообразие (например, разный способ обработки дат). - **Переходный период**: сложно мигрировать с монолитного DWH на Mesh без параллельной поддержки обеих архитектур. --- 🛠 Примеры реализации - В реальности **Data Mesh** часто реализуется через **data catalog** (например, DataHub, Collibra, Amundsen), **гибкие пайплайны (Airflow, dbt)**, **domain ownership** в Git и CI/CD, и **API-first** архитектуру. - OpenLineage, LakeFS, Kafka, Snowflake с data sharing — всё это может быть частью Mesh-инфраструктуры. --- Если интересно, могу показать схему архитектуры Data Mesh или сравнение с Data Fabric (ещё один популярный термин, с которым часто путают).
32
Когда какая нормальная форма нужна? теги #x5
✅ 1NF — Первая нормальная форма 🔹 Теория: - Требует, чтобы все значения в таблице были **атомарными** (неделимыми). - Столбцы содержат **один тип данных**, а строки — **однородные записи**. 🔹 Зачем нужна: - Обеспечивает базовую корректность структуры данных. - Необходима, чтобы агрегировать, фильтровать, делать JOIN-ы. - Служит основой для всех последующих нормальных форм. 🔹 Пример из дата-инженерии: **Нарушение:** |---------|---------------------| | 1 | [milk, bread, eggs] | | 2 | [apple] | **Проблема:** - Нельзя посчитать, сколько раз покупали milk. Запросы неэффективны. **Правильный формат:** | user_id | item | |---------|--------| | 1 | milk | | 1 | bread | | 1 | eggs | | 2 | apple | **Где применяется:** - В ETL при **разборе JSON**, `explode()` в PySpark. - При построении витрины продаж — нужна **одна строка на товар**. --- ✅ 2NF — Вторая нормальная форма 🔹 Теория: - Выполняется 1NF. - Все **неключевые атрибуты зависят от всего первичного ключа**, а не от части (актуально при составных ключах). 🔹 Зачем нужна: - Убирает **избыточность**, связанную с повторяющимися данными. - Улучшает **целостность**: изменение одного атрибута не требует обновления в десятках строк. - Упрощает **поддержку справочников и связей**. 🔹 Пример: **Нарушение:** Таблица `order_items`: | order_id | product_id | product_name | |----------|------------|--------------| | 5001 | 101 | Яблоко | | 5002 | 101 | Яблоко | - `product_name` зависит от `product_id`, не от `order_id`. **Решение:** - Создать таблицу `products(product_id, product_name)`. **Где применяется:** - В модели `sales_facts` → `dim_products`. - Устраняет дублирование при построении **факт-таблиц**. --- ✅ 3NF — Третья нормальная форма 🔹 Теория: - Выполняется 2NF. - Все неключевые атрибуты **не зависят друг от друга** — только от ключа (устраняет **транзитивные зависимости**). 🔹 Зачем нужна: - Исключает **дублирование производных данных**. - Помогает поддерживать **актуальность и непротиворечивость**. - Используется для построения **core-слоя DWH**. 🔹 Пример: | store_id | city_id | city_name | region_name | |----------|---------|-----------|-------------| - `region_name` зависит от `city_id`, не от `store_id`. **Решение:** - Вынести `city_id → city_name, region_name` в `dim_cities`. **Где применяется:** - При построении нормализованных **справочников** и **core-таблиц** в хранилище (Postgres/Greenplum). - Нужно, если данные ещё **будут использоваться в других местах**, и нужна "истина в одном месте". --- ✅ BCNF (Boyce-Codd Normal Form) 🔹 Теория: - Уточнение 3NF. - Все **функциональные зависимости** идут от **ключей**. - Используется, если есть **несколько потенциальных ключей**. 🔹 Зачем нужна: - Предотвращает **аномалии обновления**, особенно когда есть **альтернативные ключи**. - Делает модель устойчивой к **неконсистентным зависимостям**. 🔹 Пример: | instructor_id | course_id | room | |---------------|-----------|-------| - `instructor_id → room`, но `course_id` тоже может быть ключом. **Решение:** - Вынести `instructor_id → room` в отдельную таблицу. **Где применяется:** - В мастер-данных типа `employees`, `warehouses`, где бывают несколько ключей (например, `employee_id`, `passport_id`, `internal_code`). **В X5:** - Таблица `dim_employees`: один сотрудник может иметь **несколько ID** (табельный, LDAP, логин), и между ними возникают неполные зависимости. --- ✅ 4NF — Четвёртая нормальная форма 🔹 Теория: - Убирает **многозначные зависимости**: когда в одной таблице есть **независимые списки** для одного ключа. - Условия: если `A →→ B` и `A →→ C`, но `B` и `C` не зависят друг от друга. 🔹 Зачем нужна: - Предотвращает **декартовы взрывы** при работе с независимыми списками. - Улучшает стабильность при **вставке/удалении** записей. 🔹 Пример: | user_id | phone | email | |---------|---------|--------------| | 1 | 123 | u1@x5.ru | | 1 | 456 | u1@x5.ru | | 1 | 123 | u1-alt@x5.ru | **Проблема:** - `phone` и `email` независимы → появляются **ложные комбинации**. **Решение:** - `user_phones(user_id, phone)` и `user_emails(user_id, email)`. **Где применяется:** - В модели клиента — когда у него **несколько карт, телефонов, адресов**, **не связанных между собой**. --- ✅ 5NF — Пятая нормальная форма (join dependency) 🔹 Теория: - Разделяет таблицы, если они **содержат только комбинации зависимостей**, и данные можно восстановить только через **JOIN по всем ключам**. - Используется для устранения **аномалий вставки и удаления** при сложных отношениях. 🔹 Зачем нужна: - Когда есть **связи «многие ко многим» по нескольким измерениям**. - Избегает **ложных строк**, появляющихся при попытке вставить одну из связей. 🔹 Пример: | product | supplier | region | |---------|----------|--------| | A | S1 | R1 | | A | S1 | R2 | | A | S2 | R1 | | A | S2 | R2 | - Это **комбинация 3-х зависимостей**: `product ↔ supplier`, `product ↔ region`, `supplier ↔ region`. **Решение:** - Разделить таблицу на связи попарно и потом восстанавливать через JOIN. **Где применяется:** - В логистике: когда продукт может доставляться через разных поставщиков в разные регионы. - В конфигурации: товар участвует в разных акциях, которые одновременно действуют в разных каналах. --- 🧭 Финальная сводка — "как отвечать на собесе" | Нормальная форма | Зачем нужна | Когда используется в дата-инженерии | |------------------|------------------------------------------------|-------------------------------------| | **1NF** | Атомарность, простота обработки | При парсинге JSON, логов, Kafka | | **2NF** | Убираем дублирование по части ключа | Построение факт-таблиц | | **3NF** | Удаляем транзитивные зависимости | Модель `core`, справочники | | **BCNF** | Альтернативные ключи, строгая нормализация | Мастер-данные (X5 HR, сотрудники) | | **4NF** | Независимые списки | Контакты, карты, адреса клиента | | **5NF** | Множественные связи, сложные зависимости | Логистика, акции, маршруты | --- Если хочешь — могу помочь написать **готовый текст "рассказа на собесе"**, который ты сможешь **зубрить или кастомизировать под себя**. | user_id | purchased_items |
33
В каких случаях денормализация полезна теги #x5
Вот тебе развёрнутое объяснение, зачем и когда **денормализация** полезна в дата-инженерии, с **реальными кейсами и примерами**, включая **нюансы**, которые часто упускают. --- 📌 Что такое денормализация **Денормализация** — это процесс преднамеренного дублирования данных или объединения нескольких таблиц в одну (частично или полностью), чтобы **ускорить чтение** в ущерб избыточности и сложности обновлений. > ❗ Она не отменяет нормализацию, а осознанно отклоняется от неё **ради производительности или удобства** в определённых задачах. --- 🛠 Примеры из дата-инженерии #1. **ClickHouse: аналитические отчёты в real-time** **Сценарий:** считаем агрегаты по заказам в Х5, типа "средний чек по магазинам за последние 30 минут". - Если мы храним `orders` (id, store_id, product_id, user_id) и связываем с `products`, `stores`, `users`, то запросы будут делать `JOIN`'ы. - В ClickHouse `JOIN` — дорогостоящая операция. **Что делают:** - В ETL-пайплайне собирают денормализованную витрину: `store_id, store_name, region_name, user_segment, total_sum, product_category, order_time`. **Зачем:** - Можно быстро фильтровать и агрегировать **без JOIN-ов**. - Экономим ресурсы и улучшаем latency. --- #2. **DWH (Greenplum, BigQuery): витрины отчётности** **Сценарий:** в Х5 BI-аналитики смотрят дашборды: *"доля скидочных продаж в Пятёрочках по регионам, с разрезом по категориям товаров"*. **Нормализованная структура:** - `sales`, `products`, `discounts`, `stores`, `regions`. **Проблема:** - Каждый дашборд делает `4-5 JOIN`ов, при этом по `products` и `discounts` часто требуется одно и то же. **Решение:** - Сделать витрину `sales_facts`, куда ETL записывает: `date, store_id, region_name, product_category, price, discount_flag`. **Зачем:** - Экономим время BI-дашбордов. - Упрощаем схему — можно грузить прямо в Power BI без логики соединений. --- #3. **Materialized Views и кэширование в Postgres** **Сценарий:** есть таблица `events` и `users`, из которых каждый час считают активность пользователей по сегментам. **Проблема:** - JOIN + агрегация — дорого при росте `events`. **Решение:** - Создаётся **materialized view**, где уже хранятся денормализованные поля: `user_id, user_segment, total_events, last_event_time`. **Зачем:** - Переиспользуем в нескольких DAG-ах без повторного JOIN-а. - Обновляем по cron через Airflow. --- #4. **Kafka + Debezium + Elastic / ClickHouse** **Сценарий:** поток изменений из нормализованных PostgreSQL таблиц нужно индексировать в ElasticSearch или ClickHouse. **Проблема:** - В потоке есть только изменения отдельных строк (например, `order_id`, `status`), но в отчётах нужны все связанные данные. **Решение:** - В отдельном `sink processor` денормализуют все поля (заказ + клиент + товар), агрегируют, и пишут в Elastic как один документ. --- #5. **Фичи для ML: Feature Store / Feature Table** **Сценарий:** обучение модели для рекомендации товаров. **Нормализованные данные:** - `users`, `products`, `interactions`, `sessions`. **Проблема:** - Для обучения нужен один большой `features.csv`, где каждый ряд — сэмпл: `user_age, user_region, product_category, session_length, was_bought`. **Решение:** - ETL собирает денормализованную таблицу признаков (feature table). - Даже во Feature Store (Feast, Hopsworks) фичи идут денормализованными. --- ✅ Когда денормализация полезна | Случай | Почему выгодна денормализация | |-------------------------------------|----------------------------------------------------| | 🧮 Большие аналитические запросы | Избегаем JOIN-ов, быстрее агрегации | | ⚡ Real-time / streaming аналитика | Упрощаем поток, избегаем задержек из-за JOIN-ов | | 📊 Витрины для BI | Ускоряем отчёты, упрощаем логику подключения | | 🧠 Машинное обучение | Обучающие выборки почти всегда денормализованы | | 🏗 Материализованные представления | Кэшируем агрегаты для переиспользования | | 🧾 Сложные источники (Elastic, CH) | Им неудобно делать JOIN, данные сразу нужны в виде «всё в одном» | --- ⚠️ Минусы и ограничения - 💾 **Увеличение объёма данных.** Дублирование строк и колонок. - 🔄 **Сложность обновлений.** Если изменилось имя региона — нужно обновить его в *десятках тысяч* строк. - 📉 **Риск устаревания.** При несинхронном обновлении денормализованная копия может отставать. --- 🏁 Вывод **Денормализация — это инженерный компромисс.** Она нужна, когда важны **скорость доступа**, **простота аналитики** или **возможность строить отчёты без логики соединений**. Но её нужно **вводить осознанно**, с учётом того, как будут происходить **обновления**, **валидность данных** и **рост объёма**. --- Если интересно, могу показать Airflow DAG или SQL скрипт, который реализует одну из таких витрин или материализованных таблиц.
34
Расскажите про архитектуру дата волт. Назовите плюсы и минусы и где использовать лучше?
Архитектура **Data Vault (DV)** — это подход к моделированию хранилищ данных (Data Warehouse), разработанный Дэном Линстедтом (Dan Linstedt). Она предназначена для гибкой и масштабируемой обработки **исторических** и **медленно изменяющихся данных**, обеспечивая **трассируемость**, **аудитируемость**, и **масштабируемость** в условиях быстро меняющихся источников данных. --- 🔧 Основные компоненты архитектуры Data Vault 1. **Hub** – сущности бизнес-ключей (например, `Customer_ID`, `Product_Code`). - Хранят уникальные бизнес-ключи + технические атрибуты (хеш, timestamp, source). - Например: `hub_customer` 2. **Link** – связи между хабами (отношения между сущностями). - Например: связь между заказом и клиентом. - Пример: `link_customer_order` 3. **Satellite** – данные атрибутов (история изменений). - Связаны с `Hub` или `Link`, содержат descriptive data. - Например: `sat_customer_address` ![Data Vault Model](https://vertabelo.com/blog/img/data-vault.png) *(Источник: Vertabelo, упрощённая схема)* --- 📌 Пример (если нужно визуализировать) Представим таблицу заказов: - В Data Vault: - `hub_customer` (customer_id) - `hub_order` (order_id) - `link_customer_order` (customer_id + order_id) - `sat_customer` (имя, адрес клиента, история изменений) - `sat_order` (цена, дата, история изменений) --- ✅ Плюсы архитектуры Data Vault | Категория | Преимущество | |----------------|------------------------------------------------------------------------------| | **Историзация** | Чёткая, аудируемая история всех изменений с точными метками времени. | | **Гибкость** | Новые источники или атрибуты можно добавлять без переработки всего DWH. | | **Масштабируемость** | Легко масштабируется горизонтально (особенно при использовании Hadoop/Spark).| | **Трассируемость** | Возможность отследить, откуда пришли данные (source system tracking). | | **Автоматизация** | Хорошо ложится на автоматическую генерацию моделей и ETL (например, из моделей бизнес-ключей).| --- ❌ Минусы архитектуры Data Vault | Категория | Недостаток | |----------------|-----------------------------------------------------------------------------| | **Сложность** | Выше порог входа — много таблиц, требует строгих naming conventions. | | **Производительность** | Для аналитики напрямую не пригодна — нужны слои трансформации (Data Marts). | | **Избыточность**| Таблиц в разы больше, чем в Kimball-модели. | | **Latency** | Большая задержка в аналитике без layer-а агрегатов. | | **Объём** | Резко увеличивается объём хранимых данных (история каждого атрибута). | --- 📍 Где лучше использовать Data Vault? **Подходит:** - Крупные компании с распределёнными системами (банки, телеком, госсектор). - Если: - Много источников, часто меняются структуры. - Требуется **полная историзация** и **аудит**. - Нужно делать **data lineage** на уровне колонки. - Предполагается долгосрочная эволюция хранилища. **Не подходит:** - Небольшие проекты с простыми отчётами. - Отсутствие требований к хранению истории. - В случаях, когда важна **низкая задержка** для BI-аналитики без промежуточных витрин. --- 💡 Типичная архитектура уровня DWH: ``` Raw Zone (ODS) → Data Vault (Hub/Link/Sat) → Business Vault (calculated sat) → Data Marts (Star Schema) ``` - **Raw Zone** — как есть из источников. - **Data Vault** — нормализованное хранилище. - **Business Vault** — derived/cleansed/aggregated logic. - **Data Marts** — денормализованные таблицы под BI (звёздочки/снежинки). --- Если интересны конкретные практики развёртывания DV, генерации моделей по шаблонам или сравнительный анализ с Kimball/Inmon — могу детализировать.
35
Расскажите про архитектуру дата волт 2. Назовите плюсы и минусы и где использовать лучше?
Архитектура **Data Vault 2.0** — это эволюция оригинальной модели **Data Vault**, предназначенная для построения корпоративных хранилищ данных (EDW), которая особенно хорошо подходит под условия современных распределённых, быстро меняющихся источников данных. --- 💡 Что такое Data Vault 2.0? Это **методология построения хранилищ данных**, включающая: 1. **Модель данных** (Data Vault 1.0: Hub, Link, Satellite) 2. **Архитектуру** (разделение на слои: Raw Vault, Business Vault, Information Marts) 3. **Процессы ETL/ELT** (автоматизируемые, стандартизованные) 4. **Управление**: в DV 2.0 добавлены **agile-подходы, DevOps, DataOps, Big Data, cloud-first, metadata-driven development, автоматизация тестов и CI/CD**. --- 🧱 Основные компоненты модели данных - **Hub** — бизнес-сущность, ключ + бизнес-идентификатор (например, `customer_id`) - **Link** — связи между хабами (например, `customer` ↔ `account`) - **Satellite** — исторические атрибуты сущностей или связей (например, имя клиента, изменяющееся со временем) Дополнения в DV 2.0: - **Point-in-Time Tables (PIT)** — оптимизация джойнов - **Bridge Tables** — ускорение агрегаций - **Business Vault** — вычисления, бизнес-правила, деривации, KPI и пр. --- 📊 Архитектурные слои 1. **Staging** — просто реплика исходных данных (без логики) 2. **Raw Vault** — полностью нормализованные данные в виде Hub-Link-Sat, максимально "сырые", с полной историей 3. **Business Vault** — добавляется логика, расчёты, правила, PIT/Bridge 4. **Information Marts** — денормализованные представления под BI/аналитику --- ✅ Плюсы Data Vault 2.0 | Плюс | Описание | |------|----------| | **Историчность** | Все изменения сохраняются, даже неконсистентные данные | | **Гибкость к изменениям** | Можно добавлять источники без перекроя схемы | | **Масштабируемость** | Подходит под распределённые системы и Big Data | | **Автоматизация** | Генерация ETL на базе метаданных | | **Поддержка Agile/CI/CD** | Позволяет развиваться итеративно | | **Разделение логики и хранения** | Чёткое разграничение слоёв: "данные сначала, логика потом" | --- ❌ Минусы Data Vault 2.0 | Минус | Описание | |-------|----------| | **Сложность** | Концептуально и технически сложнее Star/Snowflake | | **Избыточность** | Много таблиц даже для простой модели | | **Сложные джойны** | Необходимы PIT/Bridge для производительности | | **Высокий порог входа** | Нужно понимание не только SQL, но и архитектурных принципов | | **Требует автоматизации** | Без генерации ETL работать вручную тяжело | --- 🛠 Когда использовать Data Vault 2.0? **Хорошо подходит, если:** - Есть **много источников**, меняющихся со временем - Требуется **полная историчность** - Вы работаете в **Agile/Scrum**-подходе (итеративная разработка) - Хранилище создаётся **на долгий срок** как корпоративное EDW - У вас есть DevOps/DataOps-ориентированная культура - Используется **облако или Hadoop/Spark** **Плохо подходит, если:** - Маленький проект, без сложной интеграции источников - Нужны быстрые визуализации (лучше Data Mart на Star Schema) - Нет команды с опытом в DV или ресурса на автоматизацию - Не нужна историчность и достаточно "Snapshot as-is" --- 📌 Пример из практики **Case: Финансовый холдинг** - Источники: банковские системы, CRM, внешние API - Цель: построить EDW для аналитиков и риск-менеджмента - Требования: хранить историю, иметь трассируемость, соблюдение регуляторных норм - Решение: DV 2.0 + автоматизированный генератор ETL (например, dbtvault, VaultSpeed) - Слои: Raw Vault → Business Vault → marts в Power BI --- Если нужно — могу отдельно разобрать, как строится ETL на Data Vault 2.0 (с подробностями по загрузке хабов, линков, сателлитов) или сравнение с другими подходами (Kimball/Inmon).