Перейти к основному содержанию
DataStore — это API chDB, совместимый с Pandas, который сочетает привычный интерфейс DataFrame в Pandas с преимуществами SQL-оптимизации запросов и позволяет писать код в стиле pandas, получая при этом производительность ClickHouse.

Ключевые возможности

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

Архитектура

DataStore использует отложенное вычисление с выполнением на двух движках:
  1. Цепочка отложенных операций: операции фиксируются, а не выполняются сразу
  2. Интеллектуальный выбор движка: QueryPlanner направляет каждый сегмент в наиболее подходящий движок (chDB для SQL, Pandas для сложных операций)
  3. Промежуточное кэширование: результаты кэшируются на каждом шаге для быстрой итеративной работы
Подробности см. в разделе Модель выполнения.

Миграция из Pandas в одну строку

# До (pandas)
import pandas as pd
df = pd.read_csv("data.csv")
result = df[df['age'] > 25].groupby('city')['salary'].mean()

# После (DataStore) - просто измените импорт!
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, особенно при агрегации и в сложных конвейерах:
ОперацияPandasDataStoreУскорение
Подсчёт с GroupBy347ms17ms19.93x
Сложный конвейер2,047ms380ms5.39x
Filter+Sort+Head1,537ms350ms4.40x
Агрегация с GroupBy406ms141ms2.88x
Бенчмарк на 10 млн строк. Подробности см. в скрипте бенчмарка и Руководстве по производительности.

Когда использовать DataStore

Используйте DataStore, когда:
  • Вы работаете с большими наборами данных (миллионы строк)
  • Вы выполняете агрегации и операции groupby
  • Вы запрашиваете данные из файлов, баз данных или облачных хранилищ
  • Вы строите сложные конвейеры обработки данных
  • Вам нужен API pandas с более высокой производительностью
Используйте API Raw SQL, когда:
  • Вы предпочитаете писать SQL напрямую
  • Вам нужен точный контроль над выполнением запроса
  • Вы работаете с возможностями ClickHouse, недоступными в API pandas

Сравнение возможностей

ВозможностьPandasPolarsDuckDBDataStore
Совместимость с API Pandas-ЧастичнаяНетПолная
Отложенное вычислениеНетДаДаДа
Поддержка SQL-запросовНетДаДаДа
Функции ClickHouseНетНетНетДа
Аксессоры String/DateTimeДаДаНетДа + дополнительные возможности
Array/JSON/URL/IP/GeoНетЧастичноНетДа
Прямые запросы к файламНетДаДаДа
Поддержка облачных хранилищНетОграниченнаяДаДа

Статистика API

КатегорияКоличествоПокрытие
Методы DataFrame209100% от pandas
Аксессор Series.str56100% от pandas
Аксессор Series.dt42+100%+ (включая дополнительные возможности ClickHouse)
Аксессор Series.arr37Только в ClickHouse
Аксессор Series.json13Только в ClickHouse
Аксессор Series.url15Только в ClickHouse
Аксессор Series.ip9Только в ClickHouse
Аксессор Series.geo14Только в ClickHouse
Всего методов API630+-

Начало работы

Справочник по API

Продвинутые темы

Конфигурация и отладка

Руководства для пользователей Pandas

Краткий пример

from chdb import datastore as pd

# Чтение данных из различных источников
ds = pd.read_csv("sales.csv")
# или: ds = pd.DataStore.uri("s3://bucket/sales.parquet")
# или: ds = pd.DataStore.from_mysql("mysql://user:pass@host/db/table")

# Привычные операции pandas — автоматически оптимизируются в 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
)

# Просмотр сгенерированного SQL
print(result.to_sql())

# Выполнение и получение результатов
df = result.to_df()  # Возвращает pandas DataFrame

Следующие шаги

Последнее изменение 10 июня 2026 г.