Вопросы по Data Engineering
Хранилища и моделирование данных, ETL и оркестрация, Kafka, Spark, ClickHouse, Parquet, dbt, CDC и качество данных. Готовит к теории, SQL-задачам и проектированию пайплайнов на собесе дата-инженера.
Проверьте себя: тест по Data Engineering
20 вопросов, 10 минут, уровень junior, middle или senior
Хранилища: OLTP, OLAP, DWH, lakehouse
Транзакционные и аналитические нагрузки, строчное и колоночное хранение, DWH, озеро данных, lakehouse и табличные форматы.
Урок: OLTP, OLAP, DWH, озеро и lakehouse 6 минМоделирование: Кимбалл, звезда, SCD
Факты и измерения, звезда и снежинка, гранулярность, суррогатные ключи, SCD 1 и 2, Data Vault кратко.
Урок: Моделирование: звезда, SCD, Data Vault 7 мин- Аддитивность мер
- Типы таблиц фактов
- Типы SCD
- Data Vault: хабы, линки, сателлиты
- Факт или измерение
- Гранулярность факта
- Порядок загрузки SCD 2
- Point-in-time JOIN
Ещё 13 вопросов и задач
- SCD 1 против SCD 2
- Лишние версии в SCD 2
- Полуаддитивные меры
- Как загрузить SCD 2
- Спроектировать звезду для продаж
- Продажи по сегменту на момент покупки
- SCD 1: upsert справочника товаров
- Собрать SCD 2 из ежедневных снимков
- SCD 2: применить снимок источника к измерению
- Отчёт по звезде: выручка по категориям и месяцам
- Звезда против снежинки
- Зачем суррогатные ключи
- Когда оправдан Data Vault
SQL дата-инженера
Оконные агрегаты, дедупликация событий, сессионизация, нарастающие итоги, пропуски и острова.
Урок: SQL дата-инженера: окна, дубли, сессии 7 мин- Шаблон дедупликации
- Рамки окна
- Шаблон сессионизации
- Почему DISTINCT не убирает дубли событий
- Рамка окна по умолчанию
- DISTINCT ON в PostgreSQL
- Дедупликация через ROW_NUMBER
- Трюк с датой минус номер строки
Ещё 15 вопросов и задач
- Идемпотентный пересчёт агрегатов
- Ловушка LAST_VALUE
- Опоздавшие события и инкрементальный пересчёт
- ROW_NUMBER, RANK, DENSE_RANK
- ROWS против RANGE на ряду с пропусками
- Сессионизация без PARTITION BY
- Как посчитать сессии на SQL
- Оконные функции против GROUP BY
- Средняя длительность сессии по дням
- Сколько дублей в сырых событиях
- Последнее состояние заказа из потока изменений
- Скользящее среднее за 7 календарных дней с пропусками
- Нарастающий итог выручки по дням
- Сессионизация кликстрима
- Самая длинная серия активных дней
ETL, ELT и Airflow
ETL против ELT, идемпотентность, бэкфилл, DAG, операторы, сенсоры, XCom, интервалы данных и типичные ошибки.
Урок: ETL, ELT и оркестрация в Airflow 7 мин- Зависимость между DAG
- Понятия Airflow
- Интервал данных в Airflow
- Как сделать задачу идемпотентной
- Catchup
- Какие интервалы догонит catchup
- Порядок выполнения задач DAG
- ETL против ELT
Ещё 12 вопросов и задач
- Где выполнять тяжёлую обработку
- Идемпотентная задача
- Когда стартует запуск за 1 сентября
- Почему нельзя брать вчера через now()
- Шаги типичного ежедневного DAG
- Код-ревью: DAG ежедневной выгрузки заказов
- Режим сенсора
- Как устроить DAG ежедневной загрузки
- Идемпотентность и бэкфилл
- Идемпотентная перезапись дневной партиции агрегатов
- Код на верхнем уровне файла DAG
- Что передавать через XCom
Батч и стриминг
Когда батч, когда стриминг, окна, event time и processing time, watermark, опоздавшие события, Lambda и Kappa.
Урок: Батч и стриминг: окна, время, watermark 6 минKafka
Топики, партиции, ключи, consumer groups, оффсеты и lag, репликация, acks, гарантии доставки, exactly-once.
Урок: Kafka для дата-инженера 7 мин- acks=all и min.insync.replicas
- acks у продюсера
- Топик, партиция, оффсет
- Exactly-once в Kafka
- Идемпотентный консьюмер при at-least-once
- Посчитать lag консьюмер-группы
- Распределение ключей по партициям
- Момент коммита оффсета
Ещё 12 вопросов и задач
- Log compaction
- Консьюмеров больше, чем партиций
- Спроектируйте сбор кликстрима через Kafka
- Надёжные настройки продюсера
- Идемпотентный продюсер
- Зачем сообщению ключ
- Что такое consumer lag
- Бесконечная ребалансировка
- Где Kafka гарантирует порядок
- Увеличение числа партиций
- Consumer groups и масштабирование
- Гарантии доставки в Kafka
Spark
RDD и DataFrame, ленивые вычисления, узкие и широкие преобразования, shuffle, партиционирование, join-стратегии, перекос, AQE.
Урок: Spark: shuffle, джойны, перекос 7 мин- Что делает AQE
- Когда broadcast join
- Когда кешировать
- Driver, executor, task, stage
- Узкие и широкие преобразования
- Как лечить перекос
- repartition против coalesce
- Найти перекос и посчитать эффект соления
Ещё 10 вопросов и задач
Parquet и партиционирование
Колоночные форматы, row groups и статистики, сжатие и кодирование, партиционирование, бакетинг, мелкие файлы.
Урок: Parquet, партиционирование и бакетинг 7 минClickHouse и колоночные СУБД
MergeTree, сортировочный ключ и разреженный индекс, партиции, Replacing и Aggregating MergeTree, материализованные представления.
Урок: ClickHouse: MergeTree и как его не сломать 7 мин- Специальные движки MergeTree
- Как устроен MergeTree
- Чтение из ReplacingMergeTree
- Какие гранулы прочитает ClickHouse
- Таблица MergeTree
- JOIN в ClickHouse
- Выбор сортировочного ключа
- Мутации
Ещё 9 вопросов и задач
Качество данных и контракты
Измерения качества, проверки в пайплайне, свежесть и объём, контракты данных, lineage, реакция на инциденты.
Урок: Качество данных и контракты 6 мин- Совместимость схемы события
- Блокирующие и предупреждающие проверки
- Где ставить проверки
- Совместимость схем
- Измерения качества данных
- Проверка записей по контракту данных
- Что такое контракт данных
- Измерения качества данных
Ещё 12 вопросов и задач
- Проверка свежести
- Зелёный пайплайн с плохими данными
- Инцидент с данными
- Зачем lineage
- Проблема и проверка
- Сверка с источником
- Порог аномалии объёма
- Внедрение контрактов данных
- Как вы обеспечиваете качество данных
- Отчёт по проверкам качества одной таблицы
- Свежесть таблиц по метаданным загрузок
- Аномалия объёма относительно того же дня недели
dbt
Модели и ref, source, материализации, инкрементальные модели, тесты, снапшоты, слои staging, intermediate, marts.
Урок: dbt: трансформации как код 7 минCDC и инкрементальная загрузка
Полная и инкрементальная загрузка, водяной знак по updated_at, удаления, log-based CDC, Debezium, outbox.
Урок: CDC и инкрементальная загрузка 7 мин- Удаления в аналитике
- Событие Debezium
- Transactional outbox
- Инкремент по водяному знаку
- Применить события Debezium к состоянию
- Поле op в событии Debezium
- Удаления при инкременте по updated_at
- Спроектируйте репликацию данных сервисов в хранилище через CDC
Ещё 13 вопросов и задач
- Полная или инкрементальная загрузка
- Преимущества log-based CDC
- Запуск CDC из PostgreSQL
- Порядок применения событий CDC
- Зачем transactional outbox
- Слот репликации и диск источника
- Начальный снимок и поток изменений
- Способы инкрементальной загрузки
- Outbox и двойная запись
- Применить пачку CDC-событий к таблице
- Найти удалённые в источнике строки сверкой ключей
- Инкрементальная выгрузка с перекрытием окна
- Потери на границе водяного знака