DataStore — это API chDB, совместимый с pandas, который сочетает привычный интерфейс pandas DataFrame с возможностями оптимизации SQL-запросов и позволяет писать код в стиле pandas, сохраняя производительность ClickHouse.
Ключевые возможности
- Совместимость с pandas: 209 методов pandas DataFrame, 56 методов
.str, 42+ методов.dt - SQL-оптимизация: Операции автоматически компилируются в оптимизированные SQL-запросы
- Отложенное вычисление: Операции откладываются до тех пор, пока не понадобятся результаты
- 630+ методов API: Широкий набор методов API для обработки данных
- Расширения ClickHouse: Дополнительные аксессоры (
.arr,.json,.url,.ip,.geo), недоступные в pandas
Архитектура

DataStore использует отложенное вычисление с выполнением на двух движках:
- Цепочка отложенных операций: операции фиксируются, а не выполняются сразу
- Интеллектуальный выбор движка: QueryPlanner направляет каждый сегмент в наиболее подходящий движок (chDB для SQL, Pandas для сложных операций)
- Промежуточное кэширование: результаты кэшируются на каждом шаге для быстрого итеративного анализа
Подробности см. в разделе Модель выполнения.
Миграция из Pandas в одну строку
# Before (pandas)
import pandas as pd
df = pd.read_csv("data.csv")
result = df[df['age'] > 25].groupby('city')['salary'].mean()
# After (DataStore) - just change the import!
from chdb import datastore as pd
df = pd.read_csv("data.csv")
result = df[df['age'] > 25].groupby('city')['salary'].mean()Ваш существующий код pandas работает без изменений, но теперь использует движок ClickHouse.
Сравнение производительности
DataStore обеспечивает значительный прирост производительности по сравнению с pandas, особенно при агрегации и в сложных конвейерах:
| Операция | Pandas | DataStore | Ускорение |
|---|---|---|---|
| GroupBy count | 347ms | 17ms | 19.93x |
| Сложный конвейер | 2,047ms | 380ms | 5.39x |
| Filter+Sort+Head | 1,537ms | 350ms | 4.40x |
| GroupBy agg | 406ms | 141ms | 2.88x |
Бенчмарк на 10 млн строк. Подробности см. в скрипте бенчмарка и руководстве по производительности.
Когда использовать DataStore
Используйте DataStore, когда:
- Работаете с большими датасетами (миллионы строк)
- Выполняете агрегации и операции groupby
- Запрашиваете данные из файлов, баз данных или облачного хранилища
- Строите сложные конвейеры обработки данных
- Вам нужен API pandas с более высокой производительностью
Используйте raw SQL API, когда:
- Вы предпочитаете писать SQL напрямую
- Вам нужен более тонкий контроль над выполнением запроса
- Работаете с возможностями ClickHouse, недоступными в API pandas
Сравнение возможностей
| Возможность | Pandas | Polars | DuckDB | DataStore |
|---|---|---|---|---|
| Совместимость с API Pandas | - | Частичная | Нет | Полная |
| Отложенное вычисление | Нет | Да | Да | Да |
| Поддержка SQL-запросов | Нет | Да | Да | Да |
| Функции ClickHouse | Нет | Нет | Нет | Да |
| Аксессоры String/DateTime | Да | Да | Нет | Да + дополнительные |
| Array/JSON/URL/IP/Geo | Нет | Частично | Нет | Да |
| Прямые запросы к файлам | Нет | Да | Да | Да |
| Поддержка облачных хранилищ | Нет | Ограниченная | Да | Да |
Статистика API
| Категория | Количество | Покрытие |
|---|---|---|
| Методы DataFrame | 209 | 100% от pandas |
| Аксессор Series.str | 56 | 100% от pandas |
| Аксессор Series.dt | 42+ | 100%+ (включая дополнительные возможности ClickHouse) |
| Аксессор Series.arr | 37 | специфично для ClickHouse |
| Аксессор Series.json | 13 | специфично для ClickHouse |
| Аксессор Series.url | 15 | специфично для ClickHouse |
| Аксессор Series.ip | 9 | специфично для ClickHouse |
| Аксессор Series.geo | 14 | специфично для ClickHouse |
| Всего методов API | 630+ | - |
Начало работы
- Краткое руководство - Установка и базовое использование
- Миграция из Pandas - Пошаговое руководство по миграции
Справочник по API
- Фабричные методы - Создание DataStore из различных источников
- Построение запросов - Операции с запросами в стиле SQL
- Совместимость с pandas - Все 209 методов, совместимых с pandas
- Аксессоры - Аксессоры String, DateTime, Array, JSON, URL, IP и Geo
- Агрегация - Агрегатные и оконные функции
- Операции ввода-вывода - Чтение и запись данных
Дополнительные темы
- Модель выполнения - Отложенные вычисления и кэширование
- Справочник класса - Полное описание API
Конфигурация и отладка
- Конфигурация - Все параметры
- Режим производительности - Режим с приоритетом SQL для максимальной пропускной способности
- Отладка - Explain, данные профилирования и логирование
Руководства по Pandas
- Pandas Cookbook - Типовые приёмы
- Ключевые различия - Важные отличия от Pandas
- Руководство по производительности - Советы по оптимизации
- SQL для пользователей Pandas - Понимание SQL, лежащего в основе операций Pandas
Краткий пример
from chdb import datastore as pd
# Read data from various sources
ds = pd.read_csv("sales.csv")
# or: ds = pd.DataStore.uri("s3://bucket/sales.parquet")
# or: ds = pd.DataStore.from_mysql("mysql://user:pass@host/db/table")
# Familiar pandas operations - automatically optimized to SQL
result = (ds
.filter(ds['amount'] > 1000) # WHERE amount > 1000
.groupby('region') # GROUP BY region
.agg({'amount': ['sum', 'mean']}) # SUM(amount), AVG(amount)
.sort_values('sum', ascending=False) # ORDER BY sum DESC
.head(10) # LIMIT 10
)
# View the generated SQL
print(result.to_sql())
# Execute and get results
df = result.to_df() # Returns pandas DataFrameДальнейшие шаги
- Впервые работаете с DataStore? Начните с краткого руководства
- Переходите с pandas? Прочитайте руководство по миграции
- Хотите узнать больше? Ознакомьтесь с справочником по API