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

Fundamentals of Data Engineering, глава 2: Жизненный цикл

Главная мысль: работа data engineer это пять стадий жизненного цикла данных и шесть сквозных процессов (undercurrents). Технологии меняются, эта модель остаётся.

Пять стадий data engineering lifecycle: хранение связывает все остальные стадии

Lifecycle показывает путь данных от источника до потребителя.

  • Стадии: Generation, Storage, Ingestion, Transformation, Serving.
  • Storage проходит через весь цикл. Данные хранятся на многих шагах.
  • Стадии не всегда идут по порядку. Они могут повторяться и переплетаться.
  • Data engineering lifecycle это часть полного data lifecycle. Он охватывает стадии, которыми управляет инженер.

Source system это место, откуда данные приходят: база приложения, IoT-устройства, очередь сообщений. Инженер обычно не владеет источником. Поэтому нужен контакт с владельцами: они могут сменить схему или БД и сломать pipeline.

Что выяснить об источнике:

ВопросЗачем
Как данные хранятся и как долгоДанные могут быстро удаляться
Скорость генерацииСобытия в секунду, гигабайты в час
Качество и ошибкиNulls, дубликаты, опоздавшие данные
Схема и её измененияКак сообщают об изменениях
Snapshot или CDCКак отслеживаются изменения состояния
Нагрузка на источникНе замедлят ли запросы приложение

Schema: бывает schemaless (схему задаёт приложение при записи) и fixed schema (схему задаёт БД). Schemaless не значит «без схемы». В обоих случаях схема меняется со временем, и это главная сложность.

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

Что проверить:

  • Хватает ли скорости записи и чтения.
  • Не станет ли хранилище узким местом.
  • Используете ли вы его правильно. Частые случайные обновления в object storage это antipattern.
  • Выдержит ли оно рост объёма.
  • Собираются ли metadata, lineage, изменения схемы.
  • Как соблюдаются регуляции и data sovereignty (где хранить данные).

Температура данных зависит от частоты доступа:

ТипДоступГде хранить
HotМного раз в день или секундуБыстрое хранилище
LukewarmРаз в неделю или месяцСреднее по цене
ColdРедко, для compliance или аварийАрхив: дёшево хранить, дорого читать

Универсального хранилища нет. У каждого свои trade-offs.

Источники и ingestion чаще всего становятся узким местом цикла. Сбой здесь влияет на все следующие стадии.

Вопросы к ingestion: зачем нужны данные, можно ли использовать их повторно, надёжно ли они приходят, куда идут, как часто, в каком объёме и формате, годны ли для использования сразу.

Как выбрать способ приёма данных: batch или streaming, pull или push

  • Почти все данные по природе являются потоком. Batch это удобный способ обработать поток большими частями.
  • Batch идёт по расписанию или при достижении размера. Он задаёт нижнюю границу задержки.
  • Streaming доставляет данные почти сразу (real-time задаётся по задаче).
  • Micro-batch (например, каждую минуту) это компромисс.

Совет авторов: берите streaming только когда есть бизнес-причина. Он дороже и сложнее. Batch хорош для отчётов и обучения моделей.

  • Push: источник сам отправляет данные.
  • Pull: система приёма читает источник.
  • ETL использует pull. CDC по binary logs это push: БД пишет в логи, а система приёма читает логи без нагрузки на БД. Timestamp-based CDC это pull.
  • Streaming часто идёт напрямую в endpoint через event-streaming платформу.

Здесь данные начинают создавать ценность. Без transformation они лежат без пользы.

  • Сразу после приёма: приведение типов, форматов, удаление плохих записей.
  • Позже: изменение схемы, нормализация, агрегаты для отчётов, featurization для ML.
  • Business logic часто задаётся в data modeling. Её нужно применять одинаково во всех преобразованиях.
  • Преобразования бывают и в источнике, и в потоке (in flight), например enrichment.

Вопросы: какая стоимость и ROI, насколько преобразование простое и изолированное, какие бизнес-правила оно реализует.

Данные имеют ценность, только когда их используют. Данные без потребителя это vanity project. Каждый проект должен иметь понятную цель.

ТипСутьОсобенность
Business intelligenceОписывает прошлое и настоящее через бизнес-логикуSelf-service сложен: мешают качество и silos
Operational analyticsДанные в реальном времени для немедленных действийФокус на настоящем
Embedded analyticsАналитика для клиентов SaaSВысокая нагрузка. Клиент видит только свои данные
Machine learningОбучение и работа моделейНужны качество, discoverability, ground truth без bias. Feature store
Reverse ETLРезультаты из хранилища возвращаются в SaaS и приложенияПримеры: Google Ads, CRM. Продукты Hightouch, Census

Не начинайте с ML до основы. Сначала аналитика, потом ML. В embedded analytics утечка между клиентами это серьёзный сбой. Применяйте tenant-level security.

Шесть undercurrents, которые поддерживают все стадии lifecycle

  • Принцип least privilege: давайте доступ только к нужным данным и только на нужное время. Выдача admin всем это антипаттерн.
  • Самая слабая точка это люди. Нужна культура безопасности.
  • Защита данных: encryption, tokenization, masking, access controls. Нужно знать IAM, сетевую безопасность, политики паролей.

Это набор практик, которые раньше были только в больших компаниях. Сейчас они нужны всем.

ОбластьСуть
Data governanceКачество, целостность, безопасность, удобство. Основа: discoverability, security, accountability
MetadataДанные о данных. Типы: business, technical, operational, reference
Data accountabilityНазначенный владелец отвечает за часть данных
Data qualityТри свойства: accuracy, completeness, timeliness
MDMСогласованные определения сущностей (golden records)
Data modelingФормат данных под задачу. Без него появляется data swamp
Data lineageИстория данных и зависимостей. Помогает с отладкой и удалением по запросу
Integration и interoperabilityИнтеграция инструментов, часто через API
Data lifecycle managementАрхивация и удаление. GDPR и CCPA требуют права «быть забытым»
Ethics и privacyМаскирование PII, учёт bias, соблюдение регуляций

DataOps применяет Agile, DevOps и statistical process control к данным. Это в первую очередь культура: коммуникация, итерации, обучение на ошибках.

Три технические опоры:

  • Automation: version control, CI/CD, configuration as code. Путь зрелости: cron, затем оркестратор (Airflow, Dagster), затем автоматический деплой DAG с тестами.
  • Observability и monitoring: плохие данные могут месяцами быть в отчётах. Нужны мониторинг, logging, alerting, tracing. Метод DODD похож на TDD.
  • Incident response: быстро найти причину и исправить. Находите проблемы раньше бизнеса. Общение должно быть открытым и без поиска виноватых.

Начинать советуют с observability и monitoring, затем automation и incident response.

Архитектура отражает текущие и будущие системы под долгосрочные потребности. Инженер собирает требования и проектирует захват и выдачу данных с учётом стоимости и простоты. Он не обязательно архитектор, но должен реализовывать проект и давать обратную связь. Подробности в главе 3.

Orchestration координирует задания по расписанию с учётом зависимостей (обычно в виде DAG).

  • Планировщик вроде cron знает только время. Оркестратор знает зависимости.
  • Он следит за заданиями, шлёт алерты, хранит историю, делает backfill.
  • Инструменты: Airflow (лидер), Dagster, Prefect, Luigi, Argo, Metaflow.
  • Orchestration это batch-понятие. Для потоков есть streaming DAG, их сложнее строить.
  • Core data processing code: Spark, SQL, Beam. SQL это код. Нужны тесты: unit, regression, integration, end-to-end, smoke.
  • Open source фреймворки: сначала посмотрите готовые, учтите TCO и opportunity cost.
  • Streaming: joins и windowing сложнее, чем в batch.
  • Infrastructure as code (IaC): инфраструктура задаётся кодом, это даёт версии и повторяемость.
  • Pipelines as code: задачи и зависимости описаны кодом, обычно на Python.
  • General-purpose problem solving: когда нет готового коннектора (Fivetran, Airbyte), нужно писать свой код.
Термин (EN)Что значит
Source systemСистема, откуда данные поступают в lifecycle
SchemaСтруктура данных: таблицы и поля
Hot / cold dataЧасто и редко используемые данные
Batch / streamingПриём порциями или непрерывно
Push / pullИсточник отправляет или система читает
CDCChange data capture: отслеживание изменений в БД
Reverse ETLВозврат обработанных данных в источники и SaaS
Least privilegeМинимально нужные права доступа
MetadataДанные о данных: определения, схема, операции
Data lineageПуть данных и зависимости
DataOpsПрактики DevOps и Agile для данных
DAGОриентированный граф задач без циклов
IaCInfrastructure as code
  • Для каждого источника выясните скорость, схему, ошибки и нагрузку. Договоритесь с владельцем об изменениях.
  • Выбирайте batch по умолчанию. Streaming берите, когда есть бизнес-причина.
  • Давайте права по принципу least privilege. Не выдавайте admin всем.
  • Добавьте мониторинг качества данных (accuracy, completeness, timeliness) и алерты до того, как проблему заметит бизнес.
  • Замените cron на оркестратор, когда появились зависимости. Деплойте DAG автоматически и с тестами.
  • Планируйте удаление и архивацию данных, в том числе по запросам GDPR и CCPA.
  • Описывайте инфраструктуру и pipelines кодом и храните в version control.
  1. Назовите пять стадий lifecycle. Почему Storage проходит через все стадии?
  2. Чем batch ingestion отличается от streaming и когда выбирать каждый?
  3. Какие три свойства определяют качество данных и какие три опоры есть у DataOps?
  4. Чем оркестратор отличается от планировщика cron?

Предыдущая: Fundamentals of Data Engineering, глава 1: Что такое data engineering. Следующая: Fundamentals of Data Engineering, глава 3: Хорошая архитектура данных.