Перейти к содержанию

Инженерные данные и интеграции

1. ClickHouse Integration (Advanced Analytics)

Для хранения и аналитики больших объемов данных (логи, события, метрики) используется ClickHouse.

Архитектура

[FastAPI] -> [PostgreSQL (System Events)] -> [CDC / ETL Script] -> [ClickHouse]

Схема таблицы в ClickHouse

CREATE TABLE default.system_events_log
(
    id UUID,
    event_type String,
    source String,
    payload String, -- JSONAsString
    correlation_id String,
    created_at DateTime,
    date Date DEFAULT toDate(created_at)
)
ENGINE = MergeTree()
PARTITION BY toYYYYMM(date)
ORDER BY (event_type, created_at);

Синхронизация данных

Для синхронизации используется скрипт scripts/sync_clickhouse.py (нужно создать), который: 1. Читает новые записи из public.system_events (PostgreSQL). 2. Вставляет их пачками (batch insert) в ClickHouse. 3. Запускается по cron раз в 5-10 минут.

2. Superset Configuration

Superset подключается к двум источникам: 1. PostgreSQL (Realtime/Operational): Для данных о бронированиях, пользователях, отелях. 2. ClickHouse (Historical/Events): Для глубокого анализа логов, воронок и поведенческой аналитики.

Примеры Dataset в Superset

  1. Bookings: Table public.room_bookings.
  2. Daily Overview: Materialized View public.analytics_daily_overview.
  3. Events: Table default.system_events_log (из ClickHouse).

3. Резервное копирование и обслуживание

  • Refresh Materialized Views: Запуск функции refresh_analytics() должен быть настроен в pg_cron (если доступен) или через внешний планировщик.

    SELECT cron.schedule('0 * * * *', 'SELECT public.refresh_analytics()');
    

  • Partitioning: Таблицу system_events в PostgreSQL рекомендуется партиционировать по месяцам, если объем данных превышает 1 млн строк в месяц.