Содержание курса
Модуль 1. Введение: зачем дата-инженеру Trino/Presto и среда
7 уроков
1.
Почему распределённый SQL-движок — новый стандарт аналитики
↗
2.
Карта курса: от первого запроса до production-кластера
↗
3.
Рабочее окружение: Docker, Trino CLI и первый контейнер
↗
4.
Что такое Trino и при чём тут Presto: история одного форка
↗
5.
Trino vs Spark vs Flink: когда выбирать распределённый SQL
↗
6.
Архитектура на пальцах: coordinator, workers, connectors
↗
7.
Как выполнять практику и проверять себя
↗
Модуль 2. Первые запросы: Trino CLI и диалект SQL
7 уроков
1.
Подключение к Trino через CLI и первый SELECT
↗
2.
Базовый синтаксис: SELECT, FROM, WHERE, ORDER BY, LIMIT
↗
3.
Типы данных в Trino: числа, строки, даты, булевы значения
↗
4.
NULL и трёхзначная логика: ловушки распределённого SQL
↗
5.
Выражения и вычисляемые столбцы
↗
6.
Комментарии, форматирование и чтение ошибок Trino
↗
7.
Лаборатория: первые запросы к коннектору TPCH
↗
Модуль 3. Схема данных: каталоги, схемы и таблицы
7 уроков
1.
Система каталогов: catalog.schema.table — трёхуровневая…
↗
2.
Создание и исследование таблиц: SHOW, DESCRIBE…
↗
3.
Типы таблиц: physical, view, materialized view
↗
4.
Партиции и хранение: как Trino видит данные подсистем хранения
↗
5.
Создание данных через CREATE TABLE AS и INSERT INTO
↗
6.
Работа с временными таблицами и WITH (CTE)
↗
7.
Лаборатория: создаём таблицы через коннектор Memory
↗
Модуль 4. Структурные типы и полуструктурированные данные
7 уроков
1.
Массивы ARRAY: хранение, доступ и агрегация
↗
2.
Ассоциативные массивы MAP: ключ-значение в колонке
↗
3.
Структуры ROW: именованные поля внутри одной колонки
↗
4.
UNNEST: разворачивание массивов и maps в строки
↗
5.
Работа с JSON: функции json_parse, json_extract, json_query
↗
6.
JSON-массивы и вложенные структуры: практические приёмы
↗
7.
Лаборатория: разбираем полуструктурированный лог событий
↗
Модуль 5. Агрегации и группировки
7 уроков
1.
GROUP BY и базовые агрегатные функции
↗
2.
HAVING: фильтрация после агрегации
↗
3.
DISTINCT и APPROX_DISTINCT: точная и приближённая уникальность
↗
4.
FILTER: агрегация с условием
↗
5.
GROUPING SETS, CUBE, ROLLUP: многомерная агрегация
↗
6.
Оконные функции: OVER, PARTITION BY, ORDER BY
↗
7.
Лаборатория: строим аналитическую витрину по заказам
↗
Модуль 6. Соединение таблиц и подзапросы
7 уроков
1.
INNER JOIN и LEFT JOIN: классика распределённого SQL
↗
2.
RIGHT JOIN, FULL JOIN и CROSS JOIN
↗
3.
SEMI JOIN и ANTI JOIN: EXISTS и NOT EXISTS
↗
4.
Коррелированные и некоррелированные подзапросы
↗
5.
LATERAL: подзапросы, ссылающиеся на внешнюю строку
↗
6.
UNION, INTERSECT, EXCEPT: операции над множествами
↗
7.
Лаборатория: соединяем заказы, клиентов и товары из разных…
↗
Модуль 7. Планирование и оптимизация запросов: первый взгляд
7 уроков
1.
EXPLAIN: как читать план запроса — первый взгляд
↗
2.
Логический план: что Trino думает о вашем SQL до оптимизации
↗
3.
Физический план: stages, tasks, splits и exchanges
↗
4.
EXPLAIN ANALYZE: реальные метрики выполнения
↗
5.
Rule-based оптимизация: predicate pushdown, column pruning
↗
6.
Cost-based оптимизация: статистика таблиц и выбор JOIN-стратегии
↗
7.
Лаборатория: профилируем запрос и находим узкое место
↗
Модуль 8. Коннектор PostgreSQL: федеративные запросы
7 уроков
1.
Архитектура коннектора: как Trino читает внешнюю базу
↗
2.
Настройка PostgreSQL-коннектора и первое подключение
↗
3.
Pushdown в PostgreSQL: что уходит в базу, а что — нет
↗
4.
Запись в PostgreSQL: INSERT, CTAS, DELETE и транзакции
↗
5.
Соединение таблиц из разных источников: Trino + PostgreSQL
↗
6.
Производительность федеративных запросов: узкие места
↗
7.
Лаборатория: федеративный отчёт из PostgreSQL через Trino
↗
Модуль 9. Object Storage, Hive и открытые форматы
7 уроков
1.
Почему данные уходят из баз данных в файлы на S3
↗
2.
Parquet: колоночный формат для аналитики
↗
3.
ORC и Avro: сценарии применения
↗
4.
Hive-коннектор: metastore как каталог файлов
↗
5.
Partition pruning: читаем только нужные партиции
↗
6.
Работа с partitioned-таблицами: создание и запросы
↗
7.
Лаборатория: создаём Hive-таблицу поверх Parquet на S3
↗
Модуль 10. Iceberg: современный табличный формат
7 уроков
1.
Что такое Apache Iceberg и почему это стандарт lakehouse
↗
2.
Iceberg REST Catalog и коннектор Trino
↗
3.
Создание таблиц Iceberg: схемы, партиции и свойства
↗
4.
Эволюция схемы: ADD COLUMN, DROP COLUMN, RENAME без перезаписи
↗
5.
Time travel: читаем таблицу на определённый момент времени
↗
6.
MERGE и UPDATE в Iceberg: DML для lakehouse
↗
7.
Лаборатория: строим Iceberg-витрину с time travel
↗
Модуль 11. Delta Lake и сравнение форматов
7 уроков
1.
Delta Lake в Trino: коннектор и возможности
↗
2.
Создание и запись в Delta-таблицы
↗
3.
MERGE и DELETE в Delta Lake
↗
4.
Сравнение Iceberg и Delta Lake: когда что выбирать
↗
5.
Hudi в экосистеме Trino/Presto: обзорная лаборатория
↗
6.
Миграция между форматами: сценарии и инструменты
↗
7.
Лаборатория: пишем сквозной пайплайн через два формата
↗
Модуль 12. Углублённая архитектура выполнения
7 уроков
1.
Coordinator: парсинг, планирование и диспетчеризация запроса
↗
2.
Worker: splits, drivers, operators и pages — конвейер выполнения
↗
3.
Exchange: broadcast, hash-partitioned и gather — как данные…
↗
4.
Stages и schedule: как запрос делится на этапы
↗
5.
Task concurrency и pipelining: параллелизм внутри и между…
↗
6.
Spooling protocol: обмен данными через диск при нехватке памяти
↗
7.
Лаборатория: трассируем жизненный цикл одного запроса
↗
Модуль 13. Продвинутая оптимизация
7 уроков
1.
Dynamic filtering: фильтрация больших таблиц данными из малых
↗
2.
Join distribution: broadcast, partitioned и стратегии выбора
↗
3.
Table statistics и ANALYZE: почему статистика критична
↗
4.
Skew и её влияние: перекошенные ключи и способы борьбы
↗
5.
Spill to disk: когда памяти не хватает
↗
6.
Small files и compaction: проблема и решение
↗
7.
Лаборатория: оптимизируем проблемный JOIN от 5 минут до 30…
↗
Модуль 14. Наблюдаемость и отладка
7 уроков
1.
Web UI: мониторинг запросов в реальном времени
↗
2.
JMX и метрики: что измерять в production
↗
3.
Event Listeners: логирование событий запросов
↗
4.
Логи Trino: http-request.log, server.log и уровни детализации
↗
5.
OpenTelemetry и трассировка запросов
↗
6.
Диагностика: медленный запрос, перекос, утечка памяти
↗
7.
Лаборатория: находим и чиним production-инцидент
↗
Модуль 15. Безопасность
7 уроков
1.
Аутентификация: пароль, LDAP, OAuth2, certificate
↗
2.
Авторизация: system и connector-level access control
↗
3.
File-based и Ranger access control в Trino
↗
4.
OPA (Open Policy Agent) для Trino
↗
5.
Impersonation: выполнение запросов от имени конечного…
↗
6.
TLS: шифрование на всех каналах
↗
7.
Лаборатория: настраиваем защищённый кластер Trino
↗
Модуль 16. Управление ресурсами и нагрузкой
7 уроков
1.
Resource groups: очереди и приоритеты запросов
↗
2.
Политики планирования: fair, weighted, weighted_fair
↗
3.
Query limits: время выполнения, память, CPU на запрос
↗
4.
Concurrency и очереди: защита от лавины запросов
↗
5.
Resource groups для multi-tenant: изоляция команд и проектов
↗
6.
Capacity planning: сколько worker'ов нужно кластеру
↗
7.
Лаборатория: настраиваем resource groups для трёх команд
↗
Модуль 17. Развёртывание и эксплуатация
7 уроков
1.
Режимы деплоя: Docker Compose, bare-metal, Kubernetes
↗
2.
Trino на Kubernetes: Helm-чарт и конфигурация
↗
3.
Graceful shutdown и drain worker'ов
↗
4.
Обновление версии Trino без простоя (rolling upgrade)
↗
5.
Disaster recovery: savepoints, backup конфигурации и metastore
↗
6.
Масштабирование: добавление и удаление worker'ов
↗
7.
Лаборатория: разворачиваем production-кластер в Docker
↗
Модуль 18. Trino в экосистеме дата-инженера
7 уроков
1.
Airflow + Trino: оркестрация пайплайнов
↗
2.
dbt + Trino: трансформации как код
↗
3.
Superset и другие BI-инструменты поверх Trino
↗
4.
Python-клиент Trino: скрипты и автоматизация
↗
5.
JDBC: интеграция с Java-приложениями
↗
6.
Качество данных поверх Trino: Great Expectations / Soda
↗
7.
Лаборатория: строим dbt-проект поверх Trino + Iceberg
↗
Модуль 19. PrestoDB: сравнение и особенности
7 уроков
1.
PrestoDB 0.298: установка и первое подключение
↗
2.
Различия в конфигурации и администрировании
↗
3.
Различия в SQL-диалекте и коннекторах
↗
4.
Presto C++ / Velox: нативный worker и производительность
↗
5.
Сравнение производительности Trino vs PrestoDB на типовых…
↗
6.
Миграция между Trino и PrestoDB: что нужно знать
↗
7.
Лаборатория: сравниваем Trino и PrestoDB на одних данных
↗
Модуль 20. Продвинутые темы и производительность
7 уроков
1.
User-Defined Functions (UDF): пишем свою агрегатную функцию
↗
2.
SPI коннекторов: как устроен коннектор изнутри
↗
3.
Fault-tolerant execution: большие batch-запросы без падений
↗
4.
Тюнинг JVM для Trino: GC, heap, direct memory
↗
5.
Бенчмаркинг Trino: методология и инструменты
↗
6.
Аппаратные аспекты: сеть, диски, CPU для Trino-кластера
↗
7.
Лаборатория: бенчмарк и тюнинг production-нагрузки
↗
Модуль 21. Senior System Design и архитектура
7 уроков
1.
Проектирование аналитической платформы на Trino
↗
2.
Мультикластерная архитектура: разделение по нагрузкам
↗
3.
Trino + lakehouse (Iceberg/Delta) как замена классическому DWH
↗
4.
Стоимость: Trino в облаке vs on-premises
↗
5.
SLO/SLA для Trino-кластера: метрики и договорённости
↗
6.
Disaster recovery и business continuity для аналитической…
↗
7.
Чек-лист: готовность Trino к production
↗
Модуль 22. Итоговый проект и дорожная карта
8 уроков
1.
Постановка итогового проекта: аналитическая система E-Shop
↗
2.
Проектируем схему данных: источники, слои, витрины
↗
3.
Разворачиваем production-окружение проекта
↗
4.
Реализация: федеративные запросы и Iceberg-витрины
↗
5.
Настройка безопасности и resource groups
↗
6.
Мониторинг, алертинг и инцидент-менеджмент
↗
7.
Презентация проекта: защита архитектурных решений
↗
8.
Дорожная карта: Trino/Presto internals, сообщество и карьера
↗