Вопросы-Кейсы
Кейс1 Загрузка данных из Wordstat
Исходные данные
- Есть API Wordstat
- Используются:
- S3 — хранилище сырых данных
- ClickHouse (CH) — хранилище витрин и логов
- Airflow — оркестрация
- Список слов/фраз для запросов к API хранится в ClickHouse
Задача
Нужно спроектировать архитектурное решение, которое:
- Каждый понедельник запускает загрузку данных из Wordstat
- Забирает данные за последние 3 недели
(скользящее окно загрузки = 21 день) - Загружает данные в витрину без дубликатов
- В случае невалидных фраз:
- не падает пайплайн
- логирует такие фразы в отдельную таблицу в ClickHouse
- Использует ClickHouse как источник слов для запросов в API
Ограничения и требования
- Загрузка должна быть идемпотентной
- Кол-во фраз от 100к (продумать решение под большими нагрузками)
- Повторный запуск DAG не должен приводить к:
- дубликатам данных
- повторной обработке валидных уже загруженных данных
- Логи невалидных фраз должны сохраняться с возможностью анализа
Ожидаемый результат
- Архитектура пайплайна (Airflow + S3 + ClickHouse)
- Понятный поток данных
- Можно написать на псевдо-коде. Главное придуманное решение
Кейс2 Ежедневная сборка витрины из нескольких источников
Исходные данные
- Источники данных:
debit_cardcredit_carddeposit
- Каждый источник обновляется независимо:
- в разные моменты времени
- один из источников может не обновляться до 5 дней
- Технологический стек:
- S3 — источник данных
- PySpark — обработка и трансформации
- ClickHouse — витрина данных
- CRON — планировщик (Airflow отсутствует)
Задача
Нужно спроектировать архитектурное решение, которое:
- Каждый день собирает витрину из трёх источников
- Корректно работает при:
- отсутствии обновлений в одном или нескольких источниках
- Загружает данные из S3 в ClickHouse
- Поддерживает инкрементальную загрузку
- Не создаёт дубликатов при повторных запусках
- Не зависит от Airflow, но использует CRON
Ключевые архитектурные вопросы
- Как определять, что в источнике появились новые данные?
- Как хранить состояние последней успешной загрузки?
- Как собирать витрину, если часть источников не обновлялась?
- Как обеспечить идемпотентность при ежедневном запуске?
Ограничения и требования
- S3 — единственный источник истины
- Витрина в ClickHouse должна быть:
- консистентной
- воспроизводимой
- Повторный запуск CRON-задачи не должен приводить к:
- дубликатам
- потере данных
- Решение должно масштабироваться при росте объёма данных
Ожидаемый результат
- Архитектурное описание пайплайна
- Подход к инкрементальной загрузке без Airflow
- Механизм хранения и обновления метаданных
- Стратегия дедупликации в ClickHouse
Ситуационные и смежные практические вопросы (Q/A)
- Разбирали ли инциденты?
- Да.
- Примеры: потеря данных в ClickHouse, повторная загрузка данных из S3, проверка расхождений в витринах.
- Что делать, если витрина строится слишком долго?
- Проверить изменения в запросе.
- Проверить новые join.
- Проанализировать план выполнения.
- Проверить сортировки и движки.
- Что делать, если данные не сходятся?
- Проверить источник расхождения.
- Проверить последние изменения.
- Проверить корректность движка и ключей сортировки.
- Проверить ClickHouse.
- Как проводите Root Cause Analysis?
- Формализованный процесс в исходном Q/A не описан.
- Как взаимодействуете с аналитиками?
- Созвоны.
- Обсуждение задач.
- Технические консультации.
- Получаете ТЗ или участвуете в проработке требований?
- Получение ТЗ.
- Использование Jira, Kaiten, Confluence, Task Tracker.
- Приходилось ли уточнять требования у бизнеса?
- Чаще коммуникация шла через тимлида.
- При необходимости уточнялись детали.
- Работали ли с CDC?
- Прямого продакшен-опыта не было, но концепция известна.
- Изменения читаются из WAL (например, PostgreSQL), часто через Kafka.
- Подход типичен для стриминговых архитектур вокруг Hadoop-экосистемы.
- Как реагируете на задержку данных в pipeline?
- Проверка причин задержки на уровне источника.
- Проверка статуса этапов обработки.
- Контроль корректной догрузки после восстановления.
- Как организован мониторинг пайплайнов?
- Использовались уведомления (Telegram, email), таблицы мониторинга и техническое логирование.