Полный 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.ymlserving_analytics_column_stats_<topic>.sqlserving_analytics_row_stats_<topic>.sqlserving_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 будет регулярно обновляться по мере роста проекта.
This repository is the central hub for the ChemX project. The full ecosystem consists of several repositories designed to work together:
- ChemX: Contains 10 datasets, documentation, and code for running baseline and agentic experiments for information extraction.
- ChemX-dbt: Contains database models (dbt) to use ChemX datasets and build ETL pipelines.
- ChemX-backend: Contains backend code to serve ChemX datasets via API.
- ChemX-RAG: Contains code to build Retrieval-Augmented Generation (RAG) applications using ChemX datasets.
- ChemX-client-python: Contains a Python client for accessing ChemX datasets via the API.