IT Academy
Справочник курса

Data Engineering

Все объяснения, задачи и лабораторная в одном месте.

Можно сохранить страницу в PDF через печать браузера. Для печати разборы ответов раскрываются автоматически.

1. Моделирование данных и форматы хранения

Объяснение

Модель данных начинается с гранулярности строки: событие, заказ или позиция заказа. Колоночный формат удобен для аналитического чтения части полей, строковый — для целой записи. Схема должна сохранять единицы и timezone.

Задача для самостоятельного решения

Почему нельзя суммировать order_total после JOIN с позициями?

Показать разбор ответа

Итог заказа повторится для каждой позиции. Сначала агрегируйте на нужной гранулярности или суммируйте суммы самих позиций.

2. ETL/ELT и оркестрация workflow

Объяснение

ETL преобразует данные до загрузки, ELT — после. Оркестратор управляет зависимостями и повторами задач. Идемпотентный batch можно повторить без удвоения строк.

Задача для самостоятельного решения

Как безопасно перезапустить загрузку за вчера?

Показать разбор ответа

Использовать partition replacement, merge по стабильному ключу или транзакционную очистку нужного диапазона. Простое append при retry создаёт дубликаты.

3. Data lake, warehouse и lakehouse

Объяснение

Lake хранит файлы, warehouse предоставляет управляемую аналитическую модель, lakehouse добавляет табличные гарантии поверх файлов. Выбор определяется запросами, управлением схемой и стоимостью, а не названием продукта.

Задача для самостоятельного решения

Почему тысячи мелких файлов тормозят аналитику?

Показать разбор ответа

Планирование и открытие файлов дают накладные расходы. Compaction объединяет их; размер подбирают под движок и характер чтения.

4. Streaming, event time и delivery semantics

Объяснение

Event time — время события, processing time — время обработки. Поздние события требуют правила обновления окон. Watermark выражает допущение о задержке, а не абсолютную гарантию отсутствия будущих данных.

Задача для самостоятельного решения

Событие вчерашнего заказа пришло сегодня. К какому дню отнести выручку?

Показать разбор ответа

По бизнес-определению обычно к event time. Нужно пересчитать вчерашнее окно или учесть correction; отбрасывание поздних данных должно быть осознанным.

5. Data quality, lineage и contracts

Объяснение

Data contract описывает поля, смысл, допустимые значения и владельца. Lineage показывает происхождение. Проверка not-null не находит неверную единицу измерения или неполную выгрузку.

Задача для самостоятельного решения

Как заметить загрузку рублей вместо копеек?

Показать разбор ответа

Проверять диапазоны, распределение и сверку агрегата с источником. Контракт должен явно указывать единицу, иначе тип integer одинаков в обоих случаях.

6. Стоимость, безопасность и эксплуатация платформы

Объяснение

Стоимость пайплайна зависит от сканируемых данных, частоты пересчёта и хранения. Доступ выдаётся по роли и чувствительности полей. Runbook описывает восстановление задержки и проверку полноты.

Задача для самостоятельного решения

Как понять, что pipeline работает, но данные устарели?

Показать разбор ответа

Измерять freshness по времени последнего события/партиции и lag, а не только успешный exit code задачи. Успешная загрузка пустого файла не доказывает свежесть.

Практика

Лабораторная работа

Подготовка

Python 3, локальные учебные данные без персональной информации.

Учебный пример

events = [("e1","2026-01-01",100),("e1","2026-01-01",100),("e2","2026-01-01",50)]
seen, totals = set(), {}
for event_id, day, amount in events:
    if event_id in seen: continue
    seen.add(event_id)
    totals[day] = totals.get(day,0) + amount
assert totals == {"2026-01-01":150}
print(totals)

Как работает пример и что ожидать

Дубликат e1 учитывается один раз, сумма равна 150. Множество seen хранится в памяти и теряется при перезапуске. Реальный pipeline должен хранить дедупликацию или пересчитывать партицию воспроизводимо; также нужно проверять конфликт payload одного id.

Итоговая работа

Создайте batch pipeline с сырой, очищенной и аналитической таблицами. Добавьте позднее событие, повтор batch и повреждённую строку. После повторов агрегаты остаются верными; freshness и число отклонённых строк видны отдельно.

Проверка результата

1. Опишите исходные данные и условия запуска, чтобы другой человек мог повторить работу.
2. Приложите результат обычного сценария и сравните его с ожидаемым.
3. Проверьте неверный вход, граничный случай и отказ зависимости, если она есть.
4. Объясните выбранное решение и известное ограничение.
5. Сохраните исправления после самопроверки вместе с примером, который раньше не работал.

Как оценить работу

По каждому пункту поставьте 0 (не выполнено), 1 (выполнено с пробелами) или 2 (результат воспроизводим и объяснён). Если обязательный сценарий не работает, вернитесь к нему независимо от общей суммы. Это рубрика самопроверки: сайт не исполняет присланный код и не выдаёт автоматическую оценку проекта.