ddadmin cbf5f22064 docs(architecture): update ODS error handling and DDS partial data support
Refine data flow diagrams and documentation to clarify error handling
in the ODS layer and partial data processing in the DDS layer. Add
detailed explanations for materialized views, batch SQL transformations,
and data quality metrics. Split DDS entity assembly diagrams for better
readability of event and click processing pipelines.
2026-02-06 22:21:16 +03:00
2026-02-04 22:11:07 +03:00

ClickHouse Mini DWH для кликстрима

Stack Layers License

Многослойное хранилище данных (STG → ODS → DDS → DM) для анализа кликстрима e-commerce.

Данные поступают из Kafka, проходят типизацию и обогащение, формируя витрины для BI-аналитики.

Соответствие заданию: Реализован полный цикл Data Engineering: ingestion → хранилище со слоями → регулярный процесс трансформации → витрины для дашборда.


🚀 Быстрый старт

# 1. Поднять инфраструктуру (Kafka + ClickHouse + Superset)
make up

# 2. Создать структуру БД
make ddl

# 3. Загрузить данные (автоматически потекут STG → ODS)
make data           # первые 50 строк
# или: FULL=1 make data   # полный датасет (1000 строк)

# 4. Подождать 5-10 сек (данные проходят через Kafka)
sleep 10

# 5. Запустить batch-трансформацию (ODS → DDS → DM)
make transform

Проверка:

# Статистика по слоям
docker compose exec clickhouse clickhouse-client \
  --user=default --password=123456 --query="
    SELECT database, countDistinct(table) AS tables, sum(rows) AS rows
    FROM system.parts WHERE database IN ('stg','ods','dds','dm')
    GROUP BY database ORDER BY database
"

# Пример запроса к витрине
docker compose exec clickhouse clickhouse-client \
  --user=default --password=123456 --query="
    SELECT * FROM dm.v_utm_effectiveness ORDER BY clicks DESC LIMIT 5
"

📊 Доступные сервисы

Сервис URL Назначение
ClickHouse HTTP http://localhost:9123/play SQL-запросы
Kafka UI http://localhost:8082 Просмотр топиков
Superset http://localhost:8088 BI-дашборды
Prometheus http://localhost:9090 Метрики
Grafana http://localhost:3000 Визуализация метрик

🏗️ Архитектура

flowchart TB
    subgraph Sources["📁 JSON файлы"]
        BE[browser_events.jsonl]
        LE[location_events.jsonl]
        DE[device_events.jsonl]
        GE[geo_events.jsonl]
    end

    subgraph Kafka["🚀 Kafka"]
        KT[Топики]
    end

    subgraph CH["🗄️ ClickHouse"]
        STG["STG — сырые JSON"]
        ODS["ODS — типизированные"]
        DDS["DDS — сущности"]
        DM["DM — витрины"]
    end

    Sources -->|make data| Kafka -->|MV| STG -->|MV| ODS -->|Batch SQL| DDS -->|VIEW| DM

Поток данных:

  1. STG — сырые JSON из Kafka (MergeTree)
  2. ODS — типизированные данные + DQ (ReplacingMergeTree)
  3. DDS — собранные сущности event + click (Batch SQL)
  4. DM — витрины для BI (VIEW)

Подробное описание архитектуры →


📁 Структура проекта

.
├── ddl/              # SQL для создания объектов (00_databases → 40_dm)
├── jobs/             # Batch-трансформации (ODS→DDS, DDS→DM)
├── scripts/          # Автоматизация (apply ddl, load data, run batch)
├── docs/             # Документация
│   └── ARCHITECTURE.md   # Подробное описание слоёв
├── data/             # Исходные JSONL файлы
├── docker-compose.yml
└── Makefile          # Команды: up, ddl, data, transform

🛠️ Команды Makefile

Команда Описание
make up Поднять инфраструктуру
make ddl Создать структуру БД
make data Загрузить данные в Kafka (50 строк)
FULL=1 make data Загрузить полный датасет
make transform Запустить batch-процесс

🔗 Ключи данных

flowchart LR
    subgraph Sources["Источники"]
        BE["browser_events (event_id, click_id)"]
        LE["location_events (event_id)"]
        DE["device_events (click_id)"]
        GE["geo_events (click_id)"]
    end

    subgraph DDS["DDS"]
        EV["event (event_id PK)"]
        CL["click (click_id PK)"]
    end

    subgraph DM["DM"]
        V1[v_events_enriched]
        V2[v_daily_traffic]
        V3[v_utm_effectiveness]
    end

    BE -->|event_id| EV
    LE -->|event_id| EV
    BE -->|click_id| CL
    DE -->|click_id| CL
    GE -->|click_id| CL
    
    EV -->|LEFT JOIN click_id| V1
    CL --> V1
    EV --> V2 & V3
    CL --> V2 & V3

📚 Документация


🎯 Дашборд в Superset

  1. Открыть http://localhost:8088
  2. Database → Add:
    • URI: clickhouse+connect://default:123456@clickhouse:8123/default
  3. Datasets → Add from dm.v_*
  4. Charts & Dashboard

Основные витрины:

  • v_events_enriched — полное обогащение
  • v_daily_traffic — агрегация по дням
  • v_utm_effectiveness — эффективность кампаний
  • v_top_pages_daily — воронка страниц

🔮 Развитие проекта

  • Airflow — оркестрация batch-процесса
  • Инкрементальный batch — watermark-based загрузка
  • Материализация витрин — для тяжёлых агрегаций
  • DQ мониторинг — алерты на ошибки парсинга

📝 Лицензия

Проект создан для образовательных целей в рамках DE-тестового задания.

S
Description
No description provided
Readme
34 MiB
Languages
Python 85.3%
Shell 13.1%
Makefile 1.5%
Dockerfile 0.1%