docs(course): переведены уроки на стартовую историю
- Зачем: - учебный путь должен идти через генерацию и штатный пайплайн, а не через архивный сид. - Что: - обновлены уроки 00-06 и стандарт урока под startup-history/backfill. - объяснено, что data/*.jsonl остаются кладовкой значений генератора. - тест-план переведён на новый штатный запуск и HITL-приёмку. - Проверка: - rg -n \"make clean/up/ddl/data/transform|make data|kafka_load|LIMIT=|2022-11-28|26 из 50\" docs/course docs/TEST_PLAN.md. - git diff --cached --check.
This commit is contained in:
+22
-40
@@ -8,15 +8,17 @@
|
||||
|
||||
Проверить, что стек `Kafka + ClickHouse + Airflow + Superset + Prometheus/Grafana`:
|
||||
- стабильно поднимается;
|
||||
- загружает данные по пути `kafka_load -> STG -> etl_pipeline -> ODS/DDS/DM`;
|
||||
- загружает данные по пути `startup-history/backfill -> Kafka -> STG -> ODS/DDS/DM`;
|
||||
- корректно обрабатывает «грязные» записи (ошибки фиксируются в ODS, пайплайн не падает);
|
||||
- отдает метрики и дашборды мониторинга.
|
||||
|
||||
## Общие принципы
|
||||
|
||||
- По умолчанию используем малый срез (`limit=50`) для быстрых и повторяемых проверок.
|
||||
- Полный прогон (`limit=0`) выполняем отдельно как long-run сценарий.
|
||||
- Основной путь запуска — через Airflow DAG.
|
||||
- По умолчанию используем быстрый профиль стартовой истории (`PROFILE=ci`).
|
||||
- Полный прогон выполняем отдельно через `PROFILE=daily-wave`.
|
||||
- Основной ручной путь запуска — через Airflow DAG `generator_control`.
|
||||
- Консольный чистый прогон `make generated-history-analytics` остаётся коротким
|
||||
повторяемым сценарием для smoke и CI.
|
||||
- Критерий успеха: не только `Success` DAG, но и проверки данных/ошибок/мониторинга.
|
||||
|
||||
---
|
||||
@@ -28,10 +30,10 @@
|
||||
### A.1 Подготовка окружения
|
||||
|
||||
```bash
|
||||
# Полная очистка стенда
|
||||
make clean
|
||||
# Чистый быстрый прогон: backfill -> Kafka -> STG -> ODS -> DDS -> DM -> Superset
|
||||
make generated-history-analytics
|
||||
|
||||
# Запуск инфраструктуры
|
||||
# Поднять остальные UI-сервисы после чистого прогона
|
||||
make up
|
||||
|
||||
# Проверка контейнеров
|
||||
@@ -42,16 +44,7 @@ docker compose ps
|
||||
- `airflow-init` в `Exited (0)`;
|
||||
- остальные сервисы в `Up` (включая `superset`, `prometheus`, `grafana`, `kafka-exporter`, `statsd-exporter`).
|
||||
|
||||
### A.2 DDL и минимальная загрузка данных
|
||||
|
||||
```bash
|
||||
# Инициализация схемы
|
||||
docker compose exec -T airflow-webserver airflow dags trigger ddl_init
|
||||
|
||||
# Быстрый ingest: по 50 строк на поток
|
||||
docker compose exec -T airflow-webserver airflow dags trigger kafka_load \
|
||||
--conf '{"limit": 50, "reset_topics": true}'
|
||||
```
|
||||
### A.2 Проверка стартовой истории в STG
|
||||
|
||||
Проверки:
|
||||
|
||||
@@ -72,12 +65,7 @@ SELECT 'geo_raw', count() FROM stg.geo_raw
|
||||
|
||||
Ожидаем: во всех 4 таблицах `cnt > 0`.
|
||||
|
||||
### A.3 ETL и проверки слоев
|
||||
|
||||
```bash
|
||||
docker compose exec -T airflow-webserver airflow dags trigger etl_pipeline \
|
||||
--conf '{"full_refresh": true}'
|
||||
```
|
||||
### A.3 Проверки слоев
|
||||
|
||||
Проверки:
|
||||
|
||||
@@ -123,7 +111,7 @@ curl -s -u admin:admin "http://localhost:3000/api/dashboards/uid/airflow-overvie
|
||||
|
||||
Критерий успеха smoke:
|
||||
- сервисы подняты;
|
||||
- 3 DAG (`ddl_init`, `kafka_load`, `etl_pipeline`) успешны;
|
||||
- стартовая история доведена до DM;
|
||||
- данные проходят до DM;
|
||||
- мониторинг и дашборды доступны.
|
||||
|
||||
@@ -133,29 +121,22 @@ curl -s -u admin:admin "http://localhost:3000/api/dashboards/uid/airflow-overvie
|
||||
|
||||
Ожидаемая длительность: ~30-60 минут.
|
||||
|
||||
### B.1 Полная загрузка и полный ETL
|
||||
### B.1 Полная стартовая история и ETL
|
||||
|
||||
```bash
|
||||
# Чистый старт
|
||||
make clean && make up
|
||||
|
||||
# DDL
|
||||
docker compose exec -T airflow-webserver airflow dags trigger ddl_init
|
||||
|
||||
# Полный ingest (все строки)
|
||||
docker compose exec -T airflow-webserver airflow dags trigger kafka_load \
|
||||
--conf '{"limit": 0, "reset_topics": true}'
|
||||
|
||||
# Полный ETL
|
||||
docker compose exec -T airflow-webserver airflow dags trigger etl_pipeline \
|
||||
--conf '{"full_refresh": true}'
|
||||
# История на 2 суток с видимой суточной волной
|
||||
PROFILE=daily-wave make generated-history-analytics
|
||||
make up
|
||||
```
|
||||
|
||||
### B.2 Проверка объемов и DQ
|
||||
|
||||
```bash
|
||||
# Фактические размеры входа
|
||||
wc -l data/*.jsonl
|
||||
# Диапазон модельного времени в витрине
|
||||
docker compose exec -T clickhouse clickhouse-client --user=default --password=123456 --query "
|
||||
SELECT min(event_ts) AS min_event_ts, max(event_ts) AS max_event_ts, count() AS events
|
||||
FROM dm.v_events_enriched
|
||||
"
|
||||
|
||||
# Сводка по слоям
|
||||
docker compose exec -T clickhouse clickhouse-client --user=default --password=123456 --query "
|
||||
@@ -185,6 +166,7 @@ docker compose exec -T clickhouse clickhouse-client --user=default --password=12
|
||||
Критерии успеха full:
|
||||
- STG заполнен по всем 4 потокам;
|
||||
- ODS/DDS/DM заполнены;
|
||||
- диапазон `event_ts` соответствует созданной стартовой истории;
|
||||
- `dm.dq_summary` не пуста и содержит метрики всех слоев.
|
||||
|
||||
### B.3 Тест восстановления stop/start
|
||||
|
||||
Reference in New Issue
Block a user