Commit Graph
125 Commits
Author SHA1 Message Date
ddadmin 99731850f8 fix(superset): исправлена инициализация датасетов
- Добавлен clickhouse-sqlalchemy в Dockerfile для поддержки диалекта
- Изменен URI с clickhousedb:// на clickhouse+connect://
- Убран вызов fetch_metadata() в init_superset.py (вызывал ошибку диалекта)
- Датасеты создаются без предварительного fetch_metadata

Тестирование:
- Чистый запуск: 
- Перезапуск: 
- API: 
2026-02-11 00:12:04 +03:00
ddadmin 3bed37f532 docs(docs): add 10-15 minute demo script
- Why:
  - align interview demo with recruiter requirement for 10-15 minutes
- What:
  - add timed walkthrough with code, architecture and verification points
  - include fallback steps for UI issues and final speaking script
- Check:
  - verify paths/commands against repository files and DAG ids
2026-02-10 23:57:38 +03:00
ddadmin 22f08382e5 fix(superset): align bootstrap with clickhousedb uri
- Why:
  - Superset bootstrap used outdated ClickHouse URI format and did not fail fast on init errors.
  - docs and exported dashboard metadata diverged from runtime connection settings.
- What:
  - build ClickHouse URI from env vars and use clickhousedb:// in init script.
  - refresh dataset metadata on existing datasets and surface import errors.
  - run create_dashboard during superset-init startup and align docs/exported URI references.
  - ignore node_modules in git.
- Check:
  - python3 -m py_compile superset/init_superset.py
  - manual dashboard smoke check in UI (charts render)
2026-02-10 23:51:38 +03:00
ddadmin 6533f8b32c fix(superset): fix dashboard chart rendering in Superset 4
- Why:
  - dashboard tiles failed with "Item with key 'echarts_bar' is not registered".
  - existing slice query_context stayed stale after config updates.
- What:
  - switch Top Pages and Data Quality Summary from \'echarts_bar\' to \'dist_bar\'.
  - use \'groupby\' for categorical bar charts and sync this into query_context.
  - keep dashboard export config aligned with runtime chart definitions.
- Check:
  - python3 -m py_compile superset/create_dashboard.py
  - docker compose exec -T superset python /app/superset_init/create_dashboard.py
  - DB check for slices 9/10: viz_type=form_data=query_context set to dist_bar
2026-02-10 23:49:40 +03:00
ddadmin cb3665c1be feat(superset): автоматическая инициализация с PostgreSQL метаданными
- Добавлена автоматическая инициализация Superset (подключение ClickHouse, 6 датасетов, 10 чартов, дашборд)
- Переведено хранение метаданных с SQLite на PostgreSQL (shared с Airflow)
- Добавлен superset_config.py для конфигурации PostgreSQL
- Обновлен Dockerfile.superset: postgresql-client, psycopg2-binary
- Обновлен docker-compose.yml: volume mount конфига, SUPERSET_CONFIG_PATH
- Исправлены скрипты init_superset.py и create_dashboard.py для работы с shell
- Обновлена документация в README.md: раздел Superset с инструкциями

Тестирование:
- Проверена работа после перезапуска (данные сохраняются)
- Проверен чистый запуск с нуля
- API и UI доступны
2026-02-10 21:56:47 +03:00
ddadmin 91f1a790cb fix: исправлен путь Kafka volume и обновлены скрипты Superset
- Исправлен путь Kafka volume с /tmp/kraft-combined-logs на /var/lib/kafka/data
  (решена проблема с правами доступа при старте Kafka)
- Обновлен superset/init_superset.py: улучшена обработка ошибок SQLite
- Обновлен superset/create_dashboard.py: оптимизирован импорт модулей
2026-02-10 20:48:05 +03:00
ddadmin 2e48f6065a feat: добавлен дашборд Superset для e-commerce аналитики
- Добавлен сервис superset-init в docker-compose для автоматической инициализации
- Созданы Python-скрипты для инициализации подключения ClickHouse и создания датасетов
- Создан скрипт для автоматического создания дашборда с 10 чартами
- Создан скрипт экспорта дашборда в JSON
- Добавлен экспортируемый JSON дашборда (ecommerce_analytics.zip.json)
- Обновлен Makefile с командами superset-init, superset-dashboard, superset-export
- Добавлена документация docs/SUPERSET_DASHBOARD.md

Дашборд включает:
- KPI блок (Total Events, Unique Users, Sessions, Avg/Session)
- Динамика трафика (Events by Hour, Traffic by Device)
- География (World Map)
- Маркетинг (UTM Effectiveness Table, Top Pages)
- Качество данных (DQ Summary)
- Native Filters (Date Range, Country, Device, Browser)
2026-02-10 20:48:05 +03:00
ddadmin 21fd58dc9d Merge branch 'feature/monitoring' 2026-02-09 18:53:38 +03:00
ddadmin e6c26ce353 docs(docs): add 5-minute demo cheatsheet
- Why:
  - give a student a short, repeatable interview demo script
- What:
  - add 5-minute timeline with speaking prompts
  - add SQL/CLI commands and fallback plan for UI issues
- Check:
  - review markdown content in docs/DEMO_CHEATSHEET_5MIN.md
2026-02-09 18:52:16 +03:00
ddadmin c8aca36e82 Merge branch 'feature/monitoring' 2026-02-09 10:27:59 +03:00
ddadmin f411a46aea docs(docs): add comprehensive system test plan
- Why:
  - formalize complete end-to-end verification for the demo DWH stack
  - provide fast regression checks and full validation before demo/release
- What:
  - add new TEST_PLAN.md with two execution contours: Smoke and Full
  - include checks for infra bootstrap, Airflow DAG flow, STG/ODS/DDS/DM data quality, monitoring and alert provisioning
  - add dedicated scenario proving dirty records are captured in ods.*_errors without breaking ETL
- Check:
  - aligned steps with current DAG parameters/tasks and SQL transformation flow
  - validated expected alert names against Grafana provisioning files
2026-02-09 09:56:58 +03:00
ddadmin 0e470604fe chore(scripts): add make down and clean targets
- Why:
  - intensive development needs quick cluster stop/cleanup commands
  - current Makefile had only up and pipeline/monitoring targets
- What:
  - add make target down for standard docker compose shutdown
  - add make target clean for full cleanup with volumes and orphans
  - update OPERATIONS runbook with new make commands
- Check:
  - make -n down clean
2026-02-09 09:33:54 +03:00
ddadmin e851ef9788 fix(monitoring): add recover flow for stuck monitoring stack
- Why:
  - during intensive development monitoring can get stuck (No data, out of bounds)
  - regular reload is not always enough to recover Prometheus + StatsD pipeline
- What:
  - add make target recover-monitoring for hard recovery path
  - recreate prometheus and statsd-exporter, restart airflow scheduler/webserver
  - keep Grafana provisioning reload and target checks in one command
  - document when to use recover-monitoring in OPERATIONS runbook
- Check:
  - run make recover-monitoring
  - verify Prometheus targets for airflow/clickhouse/kafka are up
2026-02-09 09:28:13 +03:00
ddadmin df173c00f7 fix(monitoring): revert incorrect clickhouse dashboard query edits 2026-02-08 23:19:54 +03:00
ddadmin 39df4f2469 fix(monitoring): add missing ClickHouse Prometheus port and fix dashboard queries
- Add port 9126 mapping for ClickHouse Prometheus metrics endpoint
  (was configured in prometheus_ch.xml but not exposed in docker-compose.yml)

- Fix CPU Usage panel: use delta() instead of rate() for gauge metric
  ClickHouseProfileEvents_OSCPUVirtualTimeMicroseconds is a gauge, not counter

- Add explicit datasource blocks to dashboard queries for consistency

ClickHouse ProfileEvents metrics correctly use rate() — they are counters.
Warning about missing _total suffix is expected (ClickHouse naming convention).
2026-02-08 23:00:32 +03:00
ddadmin a310bc6c39 fix(monitoring): align airflow statsd mapping and reload flow
- Why:
  - Airflow task metrics were mapped to non-emitted StatsD keys
  - reload-monitoring did not restart statsd-exporter after mapping changes
- What:
  - update StatsD mapping for Airflow 2.10.5 metric names
  - remove problematic catch-all mapping that produced inconsistent series
  - restart statsd-exporter in reload-monitoring flow
  - sync operations runbook and airflow monitoring plan with actual metrics
- Check:
  - make reload-monitoring
  - Prometheus targets: airflow/clickhouse/kafka are UP
  - trigger ddl_init and verify airflow_task_duration_seconds_count
  - verify airflow_task_success_total and airflow_task_failures_total in Prometheus
2026-02-08 22:51:09 +03:00
ddadmin 8a6306954e fix(monitoring): use delta() instead of rate() for CPU gauge metric
Fix Grafana warning about using rate() on gauge metric:
- ClickHouseProfileEvents_OSCPUVirtualTimeMicroseconds is a gauge, not counter
- rate() should only be used with counters; using delta() instead
- Add explicit datasource block for consistency

API verified via Context7:
- /prometheus/docs: rate() should never be used on gauges
2026-02-08 22:48:36 +03:00
ddadmin 68862a47c1 docs(repo-map): add monitoring configs and plans
Add missing entries for monitoring infrastructure:
- prometheus.yml, statsd_mapping.yml configs
- ClickHouse user configs (default_user.xml, prometheus_ch.xml)
- Grafana alerting rules for Kafka and Airflow
- Grafana dashboards for all services
- Monitoring plans (airflow, kafka)

This completes the documentation for the monitoring stack added
in the previous commits.
2026-02-08 22:33:01 +03:00
ddadmin 4917a9a6ad feat(monitoring): add Airflow monitoring via statsd-exporter
- Add statsd-exporter service to docker-compose.yml (prom/statsd-exporter:v0.27.1)
- Add StatsD env vars to airflow-default-env for metrics export
- Add airflow job to prometheus.yml scrape configs
- Add Airflow Overview dashboard (Grafana provisioning)
- Add Airflow alert rules: scheduler down, queue backlog, failures, parse time
- Add configs/statsd_mapping.yml for StatsD → Prometheus conversion
- Use Prometheus naming convention (_total for counters, _seconds for timers)
- Add monitoring plan at plans/monitoring_airflow_plan.md
- Update OPERATIONS.md and Makefile for airflow monitoring

Tested: all 3 jobs (airflow, clickhouse, kafka) showing UP in Prometheus,
metrics flowing (dagbag_size=3, executor slots, heartbeats with _total suffix),
all 4 alert rules loaded in Grafana
2026-02-08 22:27:32 +03:00
ddadmin 8e31b06241 fix(monitoring): correct Kafka metrics and alert rules
- Why:
  - dashboard showed offset as throughput and produced misleading values
  - kafka-exporter metric/label naming was inconsistent across alerts/docs
  - consumer-group-missing alert was noisy for demo runs
- What:
  - switch throughput panel to rate(kafka_topic_partition_current_offset[5m]) aggregated by topic and exclude __* topics
  - align lag metric/labels to kafka_consumergroup_lag + consumergroup
  - remove Kafka Consumer Group Missing alert from provisioning
  - pin kafka-exporter image to v1.9.0 and update OPERATIONS.md checks
- Check:
  - airflow dags list-import-errors -> No data found
  - Prometheus targets: clickhouse up, kafka up
  - PromQL kafka_consumergroup_lag returns series
  - Grafana dashboards provisioning reload returns success
2026-02-08 21:52:21 +03:00
ddadmin afdfc98eef fix(infra): harden grafana permissions and document recovery
- Why:
  - students hit permission denied after pull and grafana restart-loop with readonly db
- What:
  - run grafana as default non-root user
  - mount provisioning directory as read-only
  - add troubleshooting for git permission issues and grafana volume reset
  - normalize file modes for data jsonl and docs/DE-task.md to 100644
- Check:
  - docker compose config
  - docker compose up -d grafana
  - curl -u admin:admin http://localhost:3000/api/health
2026-02-08 21:38:23 +03:00
ddadmin ae593fd08c feat(monitoring): add Kafka monitoring via kafka-exporter
- Add kafka-exporter service to docker-compose.yml
- Add kafka job to prometheus.yml scrape configs
- Add Kafka Overview dashboard (Grafana provisioning)
- Add Kafka alert rules (broker down, consumer lag, etc.)
- Add make reload-monitoring command for easy updates
- Update OPERATIONS.md with TL;DR and troubleshooting

API verified via Context7:
- /danielqsj/kafka_exporter for exporter config
- /prometheus/docs for scrape_configs format
2026-02-08 21:25:31 +03:00
ddadmin 41c867d68d docs(operations): add post-pull monitoring refresh runbook
- Why:
  - student needs a simple way to apply Grafana/monitoring config updates after git pull
- What:
  - add TL;DR block with minimal commands in monitoring section
  - add detailed post-pull runbook for datasource/dashboard/alerting reload
  - include clickhouse restart note for prometheus_ch.xml changes
- Check:
  - reviewed commands and paths in docs/OPERATIONS.md
2026-02-08 20:53:49 +03:00
ddadmin 5270273d8a feat(monitoring): add Grafana alert rules and fix datasource binding
- Why:
  - dashboard panels could resolve to stale datasource uid and show No data
  - monitoring required proactive alerts for ClickHouse health signals
- What:
  - pin dashboard panels to prometheus_uid and remove datasource templating variable
  - fix PromQL metrics for CPU, inserted rows, and parts panels
  - add provisioning alert rules for failed queries, memory resident, and active parts
  - pin Prometheus datasource uid and update monitoring documentation
- Check:
  - POST /api/admin/provisioning/datasources/reload
  - POST /api/admin/provisioning/dashboards/reload
  - POST /api/admin/provisioning/alerting/reload
  - GET /api/v1/provisioning/alert-rules
2026-02-08 20:49:31 +03:00
ddadmin 140b711233 docs(docs): clarify multiline commit body usage
- Why:
  - commit messages with literal \n are hard to read in UI
- What:
  - add explicit rule for multiline body formatting in CLI
  - add correct examples with git commit -m and -F heredoc
- Check:
  - reviewed new section in docs/COMMIT_RULES.md
2026-02-08 20:49:18 +03:00
ddadmin fdeb48fdb2 feat(monitoring): add Grafana dashboard for ClickHouse
- Add Prometheus datasource provisioning config
- Add Grafana dashboard provider configuration
- Add ClickHouse Overview dashboard (JSON)
- Update README.md with monitoring section and updated stack badge
- Update docs/OPERATIONS.md with monitoring runbook

Dashboard includes:
- System Health: CPU, Memory Resident, Memory Code
- Query Performance: queries/sec, active queries, failed queries
- MergeTree Storage: parts count, merge rate

Verified via Context7: ClickHouse Prometheus metrics use ClickHouseAsyncMetrics_*,
ClickHouseMetrics_*, ClickHouseProfileEvents_* prefixes in v25.1.

Access:
- Grafana: http://localhost:3000 (admin/admin)
- Prometheus: http://localhost:9090
2026-02-08 20:29:43 +03:00
ddadmin 03de68e0c5 docs(docs): slim down AGENTS and split runbook sections
- Why:\n  - AGENTS.md became too large and mixed policy with operational details\n  - context7 requirement was easy to miss in long text\n- What:\n  - reduce AGENTS.md to a compact contributor contract\n  - add explicit mandatory MCP Context7 workflow block\n  - move runbook details to docs/OPERATIONS.md\n  - move artifact map to docs/REPO_MAP.md\n- Check:\n  - reviewed links and content after split\n  - ensured only documentation files are included in commit
2026-02-08 20:23:42 +03:00
ddadmin a185a56762 docs(readme): add DBeaver guide and move DE-task to docs
- Why:
  - simplify first data checks for interview/demo audience
  - keep task reference in a stable docs location
- What:
  - add short DBeaver connection section with ready-to-use params and quick SQL checks
  - update DE-task links in README to docs path
  - move DE-task from data/ to docs/
- Check:
  - README links resolve to docs/DE-task.md
  - git shows file move data/DE-task.md -> docs/DE-task.md
2026-02-08 19:57:11 +03:00
ddadmin b0a91480ca Merge branch 'feature/airflow-orchestration' 2026-02-08 19:34:54 +03:00
ddadmin 869c189fe8 refactor(airflow): move DAGs to airflow/dags and update paths
- Why:
  - keep Airflow artifacts under a single airflow/ directory
  - align repository layout with intended project structure
- What:
  - move dags/ to airflow/dags/ and update compose mounts
  - make SQL root resolution work in container and local runs
  - update DAG path references in README, AGENTS, ARCHITECTURE, and plans
  - remove tracked Python cache artifacts from old DAG location
- Check:
  - airflow dags list
  - airflow dags list-import-errors
  - e2e success: ddl_init, kafka_load(limit=50), etl_pipeline
2026-02-08 19:34:10 +03:00
ddadmin 44a75691e8 feat(airflow): полная реализация фазы 2 — DAG для загрузки данных в Kafka
Слияние ветки с реализацией автоматизированной загрузки JSONL-файлов в Kafka
через Airflow DAG с валидацией, мониторингом и документацией.

- Что добавлено:
  - dags/kafka_load_dag.py: TaskGroup-пайплайн загрузки 4 потоков данных
  - dags/utils/kafka_helpers.py: хелперы для работы с Kafka (проверка,
    создание топиков, загрузка с лимитом)
  - airflow/requirements.txt: зависимость kafka-python==2.0.6
  - .gitignore: полноценный шаблон для ETL-проекта

- Параметры DAG:
  - limit: ограничение строк (0 = все)
  - reset_topics: пересоздание топиков перед загрузкой
  - load_browser/device/geo/location_events: выбор потоков

- Обновлена документация:
  - README.md, AGENTS.md, docs/ARCHITECTURE.md
  - plans/runbook.md, plans/airflow_dags_plan.md
2026-02-08 19:06:47 +03:00
ddadmin 60482af66b docs: обновлены Mermaid-диаграммы в README и ARCHITECTURE
- Упрощены диаграммы архитектуры, убраны эмодзи
- В README: компактная схема Airflow → Kafka → ClickHouse
- В ARCHITECTURE: обновлены общая схема, слои и сборка DDS
- Все диаграммы отражают 3 DAG: ddl_init, kafka_load, etl_pipeline
2026-02-08 19:03:11 +03:00
ddadmin 0b75da9c08 docs(docs): align docs with airflow-first ingest workflow
- Why:\n  - User-facing docs mixed Airflow and legacy CLI ingest paths and caused confusion\n- What:\n  - Rework README quick start and status to use DAG chain ddl_init -> kafka_load -> etl_pipeline\n  - Rewrite runbook as canonical Airflow-first execution flow\n  - Sync architecture diagrams/sequence and DQ wording with current SQL and DAG behavior\n- Check:\n  - Verified updated sections and removed stale markers with rg in README.md, docs/ARCHITECTURE.md, plans/runbook.md
2026-02-08 18:52:44 +03:00
ddadmin d7588a8caa chore: добавлен полноценный .gitignore для ETL-проекта
- Python: __pycache__, *.pyc, venv
- Docker: .env.local, volumes (clickhouse-data/, kafka-data/)
- Airflow: logs/, *.pid, airflow.db
- ClickHouse: логи сервера
- Kafka/Zookeeper: logs/, data dirs
- Superset: локальные БД
- IDE: VS Code (partial), PyCharm
- Секреты: *.pem, *.key, secrets/
- OS: .DS_Store, Thumbs.db
- Данные: *.csv.gz, *.parquet, архивы
2026-02-08 18:48:20 +03:00
ddadmin 1b9991f595 fix(airflow): simplify kafka_load params and align docs
- Why:

  - For DE task we only need full ingest or limit-based sample.

  - load_* and full_load params were redundant and unclear in current flow.

- What:

  - Remove full_load and load_* params from kafka_load DAG contract.

  - Simplify kafka helpers (validate/check files) to fixed 4-stream ingest.

  - Sync AGENTS, README, runbook, architecture and airflow plan docs.

- Check:

  - python3 -m py_compile dags/kafka_load_dag.py dags/utils/kafka_helpers.py

  - Airflow smoke/full runs: ddl_init -> kafka_load -> etl_pipeline (all success).

  - Legacy path: make data && make transform (success).
2026-02-08 18:33:54 +03:00
ddadmin 10f5bc3510 feat(airflow): реализован DAG kafka_load для загрузки в Kafka (фаза 2)
- Добавлен kafka-python==2.0.6 в airflow/requirements.txt
- Создан dags/utils/kafka_helpers.py с функциями:
  - check_kafka_ready() — проверка доступности брокера
  - prepare_topics() — создание/сброс топиков через KafkaAdminClient
  - load_jsonl() — загрузка данных через KafkaProducer (limit=0 = все)
  - validate_load_params(), check_input_files() — валидация
- Создан dags/kafka_load_dag.py с TaskGroup:
  - precheck: check_kafka, check_input_files, validate_load_params
  - ingest: prepare_topics, параллельная загрузка 4 потоков, verify_publish_counts
- Параметры DAG: limit (0 = все), reset_topics, load_* (выбор потоков)
- Обновлена документация: AGENTS.md, README.md, plans/runbook.md,
  plans/airflow_dags_plan.md, docs/ARCHITECTURE.md

Тестирование:
- Подключение к Kafka:  (kafka:29092 доступен, брокер 2.6.0)
- Загрузка данных:  (1000 сообщений — полный файл browser_events)
- Python синтаксис:  (py_compile проходит)
- Структура DAG:  (все 9 задач корректно определены)
2026-02-08 18:13:22 +03:00
ddadmin 12f35679f0 docs: update commit rules to support English language
- Why:
  - Align with Conventional Commits specification for consistency
  - English is standard for open-source and team collaboration
- What:
  - Change primary language to English (Russian still allowed)
  - Add type and scope reference tables
  - Add both English and Russian body templates
  - Add good/bad examples section
  - Add quick reference for common commit types
- Check:
  - File renders correctly in markdown viewer
  - Examples follow the new format rules
2026-02-08 17:25:04 +03:00
ddadmin 4819e10cf8 feat: изменён режим загрузки данных по умолчанию — теперь все записи
- По умолчанию bash ./scripts/load_kafka_data.sh
Resetting topics: browser_events location_events device_events geo_events
Loading mode: full (LIMIT=unset)
Bootstrap (inside container): kafka:29092
Publishing: data/browser_events.jsonl -> browser_events (full)
Publishing: data/device_events.jsonl -> device_events (full)
Publishing: data/geo_events.jsonl -> geo_events (full)
Publishing: data/location_events.jsonl -> location_events (full)
Done. загружает все записи из файлов (вместо 50 строк)
- Для ограничения используется bash ./scripts/load_kafka_data.sh
- Удалён устаревший параметр

Изменённые файлы:
- scripts/load_kafka_data.sh — обновлена логика и документация
- plans/runbook.md — обновлены примеры использования
- plans/kafka_ingest_plan.md — обновлён план реализации

Теперь:
- bash ./scripts/load_kafka_data.sh
Resetting topics: browser_events location_events device_events geo_events
Loading mode: full (LIMIT=unset)
Bootstrap (inside container): kafka:29092
Publishing: data/browser_events.jsonl -> browser_events (full)
Publishing: data/device_events.jsonl -> device_events (full)
Publishing: data/geo_events.jsonl -> geo_events (full)
Publishing: data/location_events.jsonl -> location_events (full)
Done. — все записи (4000 сообщений)
- bash ./scripts/load_kafka_data.sh
Resetting topics: browser_events location_events device_events geo_events
Loading mode: slice (LIMIT=50)
Bootstrap (inside container): kafka:29092
Publishing: data/browser_events.jsonl -> browser_events (first 50 lines)
Publishing: data/device_events.jsonl -> device_events (first 50 lines)
Publishing: data/geo_events.jsonl -> geo_events (first 50 lines)
Publishing: data/location_events.jsonl -> location_events (first 50 lines)
Done. — 50 строк каждого типа (200 сообщений)
2026-02-08 17:21:22 +03:00
ddadmin 33f8172892 Слой ODS теперь собирается в Airflow 2026-02-08 17:00:01 +03:00
ddadmin 60cb20406f docs(docs): добавить правила оформления коммитов
- Зачем:
  - унифицировать стиль коммитов для всех участников проекта
- Что сделано:
  - добавлен документ docs/COMMIT_RULES.md с форматом и примерами
  - добавлена ссылка на правила в AGENTS.md
- Проверка:
  - проверен staged diff перед коммитом
2026-02-08 16:42:43 +03:00
ddadmin 284dc3dc1f Move STG->ODS to Airflow batch and align monitoring 2026-02-08 16:36:01 +03:00
ddadmin a7963c17b3 fix: исправлен путь Kafka volume
- Изменен путь volume с /tmp/kraft-combined-logs на /var/lib/kafka/data
- Решена проблема с правами доступа при старте Kafka в KRaft mode
- Kafka теперь корректно инициализирует метаданные при первом запуске
2026-02-08 15:24:00 +03:00
ddadmin 413a711ddf Удаление ненужного файла 2026-02-08 15:16:52 +03:00
ddadmin 767198f6e2 Merge branch 'feature/airflow-orchestration' 2026-02-07 22:03:41 +03:00
ddadmin 225ae8bedb docs: update README and architecture docs for Airflow orchestration workflow 2026-02-07 22:03:13 +03:00
ddadmin d9b8a3f909 docs(airflow): update plugin and DAG docs 2026-02-07 21:57:15 +03:00
ddadmin 4d8f9d42f4 feat(infra): add clickhouse data persistence volume
Add persistent volume for ClickHouse to preserve data across container
restarts. The volume `clickhouse-data` is mounted to `/var/lib/clickhouse`,
ensuring data remains when containers are recreated.
2026-02-07 21:53:52 +03:00
ddadmin 14d16c5cae feat(airflow): implement dag orchestration for ddl and etl
Add comprehensive DAG implementation for ClickHouse schema initialization
and ETL pipeline orchestration. The ddl_init_dag manages database schema
creation across stg/ods/dds/dm layers with verification capabilities. The
etl_pipeline_dag implements full ODS to DDS to DM transformation flow with
data quality checks, branching logic for full/incremental loads, and
timeout handling for data availability.

Additional changes:
- Upgrade Airflow from 2.9.3 to 2.10.5
- Fix ClickHouse connection to use native protocol port 9000
- Mount SQL directory in docker-compose for DAG execution
- Update project requirements and documentation comments
- Remove unused pandas dependency
2026-02-07 21:52:31 +03:00
ddadmin de9d0429a2 fix(data): update dataset permissions for execution
Adjusting file modes on jsonl and markdown files to allow
execution within the ETL pipeline.
2026-02-07 21:36:55 +03:00
ddadmin 226807ecae chore(airflow): replace clickhouse-connect with airflow-clickhouse-plugin 2026-02-07 20:55:14 +03:00