Перейти к содержимому
TelegramGitHub

Data Engineering Design Patterns, глава 1: Введение в паттерны

Главная мысль: Design pattern в data engineering - это готовый шаблон решения типовой проблемы. Он не привязан к инструменту. Его нужно адаптировать, и у него есть цена.

Автор объясняет идею на примере рецепта. Рецепт - это шаблон: список шагов и ингредиентов. Его можно менять, например заменить один сахар другим. У паттерна те же свойства.

СвойствоЧто значит
ШаблонГотовая последовательность шагов. Её можно настроить
КонтекстПаттерн отвечает на конкретную проблему
Повторное использованиеНе нужно изобретать решение заново
ПоследствияУ каждого паттерна есть цена. Её нужно знать заранее
Общий языкКоманда быстрее договаривается, если все знают названия
  • Проблема: одна битая запись роняет всю задачу.
  • Шаблон: обернуть рискованную трансформацию в try-catch. Плохие записи отправить в отдельное место для анализа.
  • Адаптация: можно не сохранять такие записи, а только считать их.
  • Повторное использование: тот же подход работает в ELT и в хранилище.
  • Цена: в код добавляется логика, он становится сложнее.

Этот паттерн разобран в главе 3.

  • Паттерны Gang of Four (например, Singleton) помогают писать поддерживаемый код.
  • Для data engineering этого мало. Нужно думать о данных.
  • Особые темы: ошибки, backfilling, idempotency, корректность данных.

Главы идут по пути данных: от загрузки до мониторинга.

ГлаваТемаО чём
2Data ingestionКак принести данные в систему
3Error managementКак жить с ошибками в коде и в данных
4IdempotencyКак безопасно делать повторные запуски и backfill
5Data valueКак сделать данные полезными: агрегация, обогащение
6Data flowКак связать пайплайны друг с другом
7Data securityКак защитить данные и соблюсти требования приватности
8Data storageКак хранение ускоряет доступ к данным
9Data qualityКак проверить, что данные годны
10Data observabilityКак следить за данными и получать алерты

Все паттерны показаны на одном проекте: платформа аналитики для блогов. Автор не выбирает технологию. Он хочет показать универсальные решения.

Проект состоит из трёх частей:

  • Загрузка online и offline. Online: события посетителей блогов (посещения страниц). Offline: статичные наборы от провайдеров, например справочники. Они обновляются реже, скажем раз в час.
  • Real-time слой. Streaming-задачи читают события из брокера. Есть бизнес-задачи, например агрегация сессий. Есть технические, например синхронизация данных в хранилище для ad hoc запросов.
  • Слой организации данных. Это Medallion architecture.
СлойЧто хранит
BronzeСырые данные как есть. Возможны проблемы качества
SilverОчищенные и обогащённые данные
GoldДанные в формате для потребителей: витрины, справочники

Паттерны, которые влияют на бизнес-ценность, обычно отдают данные в Gold. Остальные работают в Bronze и Silver. В описании проблем автор часто ссылаются на эти слои. Над всем стоят оркестратор и observability.

В каждом паттерне есть раздел Examples. Там показаны реализации на разных технологиях.

ТерминЗначение
Design patternГотовый шаблон решения типовой проблемы
ContextualizationПривязка паттерна к проблеме
ConsequencesЦена и риски паттерна
BackfillingПовторная обработка прошлых данных
Medallion architectureСлои Bronze, Silver, Gold
Dead-LetterОтправка плохих записей в отдельное место
  • Называйте решения паттернами. Так проще обсуждать дизайн в команде и в код-ревью.
  • Перед выбором паттерна читайте его последствия. Бесплатных паттернов нет.
  • Привязывайте паттерн к слою: Bronze, Silver или Gold. Требования к ним разные.
  • Не копируйте паттерн слепо. Адаптируйте под свой контекст.
  1. Какие пять свойств рецепта автор переносит на design pattern?
  2. Почему паттернов GoF недостаточно для data engineering?
  3. Чем отличаются слои Bronze, Silver и Gold?
  4. Какие у паттерна Dead-Letter последствия?

Предыдущая: Обзор книги. Следующая: Паттерны загрузки данных.