Полный ELT-проект на базе dbt для обработки, нормализации и аналитики данных по наноматериалам и малым молекулам. Реализована слоистая архитектура: raw - unified - curated - serving (statistics + ML).
- Клонировать репозиторий и перейти в папку:
git clone https://github.com/ai-chem/ChemX_dbt.git cd ChemX_dbt
- Настроить соединение с БД в
profiles.yml
:your_profile: target: dev outputs: dev: type: postgres host: ... user: ... password: ... dbname: ... schema: staging threads: 4
- Поставить
dbt-core
и плагины:pip install dbt-core dbt-postgres
.
├─ data/
│ └─ raw/ # Исходные CSV + скрипт загрузки
├─ macros/ # Jinja-макросы для парсинга, нормализации и тестов
├─ models/
│ ├─ CURATED/ # Очистка и подготовка
│ ├─ UNIFIED/ # Оригинальные данные с небольшими изменениями
│ └─ SERVING/ # statistics + ML tables + all_data
├─ analyses/ # SQL-скрипты для доп. аналитики
├─ tests/ # Пользовательские проверки (sql)
├─ seeds/ # Не используется
├─ snapshots/ # Не используется
├─ dbt_project.yml # Основной конфиг dbt
├─ profiles.yml # Профиль подключения
Глубина папок внутри models
подробно описана ниже.
*.csv
— исходники по 10 темам (Benzimidazoles, Cytotox, …, Synergy).scripts/load_csv_to_postgres.py
— загружает raw CSV в СУБД.
- analyses_raw / analyses_curated — макросы для автоматического сбора базовой статистики (таблица/столбцы).
- parsing_curated — парсинг чисел, дат, сложных текстовых полей.
- normalize_curated — стандартизация имен частиц, форм, единиц.
- Общие макросы:
deduplicate_model
,test_no_duplicates
,generate_canonical_name
и т.п.
- prep/ — промежуточные модели (
cur_<topic>.sql
) - final/ — итоговые очищенные таблицы +
schema.yml
с описанием колонок
Для каждой темы:
dim_*
— измерения (наночастица, публикация, источник, бактерия и т.д.)fact_*_experiments
— события/измерения, ссылаются наdim_*
Каждый каталог содержит SQL-файлы и schema.yml
.
uni_<topic>.sql
— объединяет данные из CURATED по всем источникам в одну витрину.- Один общий
schema.yml
для всех unified-моделей.
Сводные витрины: serving_all_data_<topic>.sql
.
Таблицы, готовые к обучению ML: serving_ml_<topic>.sql
+ schema.yml
.
Для каждой темы — отдельная папка:
schema.yml
serving_analytics_column_stats_<topic>.sql
serving_analytics_row_stats_<topic>.sql
serving_analytics_top_categories_<topic>.sql
# Построить весь пайплайн
dbt build
# Запустить тесты
dbt test
# Сгенерировать и просмотреть документацию
dbt docs generate
dbt docs serve
- Составной ключ для наночастицы nanoparticle + normalized_shape + has_coating + np_size_avg_nm используется во всех dim-таблицах кроме nanomag и nanozymes, чтобы гарантировать уникальность и однозначность.
README будет регулярно обновляться по мере роста проекта.