Вопросы-Кейсы
Кейс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