Дата-инженер
80 задач, из них 14 на код с автопроверкой. Условие и варианты ответа открыты всем; проверка, подсказка и разбор — в клубе.
SQL и оптимизация запросов
- Условие по правой таблице в WHERE после LEFT JOIN
- COUNT(*), COUNT(колонка) и COUNT(DISTINCT) на данных с NULL
- Сколько строк вернёт оконная функция вместо GROUP BY
- NOT IN по подзапросу с NULL перестал возвращать строки
- Индекс добавили, а запрос не ускорился и загрузка стала дольше
- Выручка в витрине выросла в разы после присоединения позиций заказа
- Нарастающий итог склеился на строках с одинаковой датой
- Фильтр по функции над колонкой отключил отсечение секций
Слои DWH и моделирование витрин
- Что класть в слой RAW при выгрузке из внешнего API
- Что происходит с измерением SCD2 при изменении атрибута
- Что нужно от источника, чтобы уйти от полной перезагрузки таблицы
- После перезапуска упавшей загрузки суммы за день задвоились
- Как оставить актуальную версию записи из потока CDC
- Инкрементальная модель dbt накапливает две версии одного заказа
- Инкремент по updated_at теряет строки из-за поздно приходящих данных
- Отчёты за закрытые месяцы поехали после соединения с SCD2-измерением
Оркестрация пайплайнов в Airflow
- Почему суточный DAG за 10 августа стартует только 11-го
- Как дождаться файла поставщика, приходящего в непредсказуемое время
- Что уместно передавать между задачами через XCom
- Включение DAG со старой start_date положило источник
- Задача берёт дату из datetime.now(), а не из логического интервала
- Публикация витрины отработала, несмотря на падение трансформации
- DAG зелёный, а витрина пустая: как сократить время реакции
- Тяжёлый запрос на верхнем уровне файла DAG нагружает источник
Хранилища и распределённая обработка
- Почему для слоя данных выбирают Parquet вместо CSV
- Что даёт партиционирование таблицы событий по месяцу в ClickHouse
- PySpark-скрипт отработал мгновенно и ничего не посчитал
- Фильтр не по префиксу ключа сортировки сканирует всю таблицу
- Одна задача Spark идёт 40 минут, остальные завершились за две
- После сбоя консьюмера часть событий Kafka учтена дважды
- Broadcast join работал на тесте и уронил драйвер в проде
- Построчная вставка из Kafka привела к ошибке «too many parts»
Python для ETL: загрузка, валидация и версии записей
- Скрипт загрузки падает с MemoryError на CSV-выгрузке в 12 ГБ
- События из API разных филиалов сдвинуты на несколько часов относительно друг друга
- Цепочка трансформаций из трёх list comprehension держит в памяти три копии данных
- Токен API поставщика записан строкой прямо в файле DAG
- Разбиение потока записей на пачки для вставки в базу
- Выгрузка клиентов из API постранично теряет и дублирует записи
- Загрузчик получает 429 от API и сразу повторяет запрос в цикле
- Последняя версия каждой записи из выгрузки с повторами
- Проверка записей по схеме перед загрузкой в хранилище
- Разворачивание вложенного JSON-события в плоскую строку таблицы
- Поставщик поменял тип поля amount со строки на объект, и витрина молча обнулилась
- Применение нового снимка справочника к таблице SCD2
Потоковая поставка: Kafka, CDC и окна
- События одного заказа приходят в витрину в неверном порядке
- Данные в витрине отстают на два часа, хотя консьюмер работает без ошибок
- Ошибку в трансформации нашли через 10 дней, а хранение топика — 7 дней
- Отставание группы консьюмеров по партициям
- Коннектор Debezium остановили на выходные, а диск PostgreSQL заполнился
- Продюсер удалил обязательное поле из схемы Avro, и старые консьюмеры упали
- Мобильные события приходят с опозданием в часы и не попадают в посчитанные окна
- Одно битое сообщение остановило загрузку всей партиции на ночь
- Подсчёт событий по окнам с допустимым опозданием
- Как получить «ровно один раз» при записи из Kafka во внешнюю базу
- Подключение CDC к таблице на 400 млн строк: снимок и поток изменений
- Разбор пачки сообщений с повторами и отправкой в DLQ
Качество данных: проверки, сверки и алерты
- Где в пайплайне витрины заказов ставить проверки на пустые ключи
- За вчера в витрину загрузилось 8 тысяч заказов вместо обычных 90 тысяч
- После добавления соединения со справочником адресов заказов в витрине стало больше
- Отчёт о колонках с долей пропусков выше порога
- Любой упавший dbt-тест останавливает все витрины, включая некритичные
- Выручка в DWH за месяц на 0,8% меньше, чем в учётной системе
- Алерт на объём загрузки срабатывает каждое воскресенье и в праздники
- Переименование колонки в источнике сломало 14 витрин, о которых никто не знал
- Проверка объёма загрузки относительно того же дня недели
- Проверки упали через 20 минут после публикации, и отчёт уже разослали
- Команда-источник регулярно меняет формат событий и узнаёт о последствиях от аналитиков
- Детальная сверка заказов между источником и витриной
dbt-проект: модели, окружения и CI
- Модель dbt ссылается на другую модель прямым именем схемы и таблицы
- Витрина-представление на 2 млрд строк открывается в BI по три минуты
- Переименование поля в источнике пришлось править в 23 моделях
- Порядок сборки моделей по зависимостям ref
- CI dbt-проекта на 900 моделей идёт полтора часа на каждый пулреквест
- Инкрементальная модель с merge по 3 млрд строк стала пересобираться дольше полной
- История смены тарифа клиента нужна, а источник хранит только текущее значение
- Одна и та же формула перевода копеек в рубли с НДС скопирована в 40 моделей
- Выбор изменённых моделей и всех зависимых от них
- Разработчик случайно перезаписал продовые витрины запуском dbt с ноутбука
- Изменение типа колонки витрины сломало дашборды и ML-пайплайн другой команды
- Подстановка ref и source в SQL модели для окружения
