DataStore 是 chDB 的与 pandas 兼容的 API,将熟悉的 pandas DataFrame 接口与 SQL 查询优化能力结合在一起,让你既能编写 pandas 风格的代码,又能获得 ClickHouse 级别的性能。
主要特性
- Pandas 兼容性:209 个 pandas DataFrame 方法、56 个
.str方法和 42+ 个.dt方法 - SQL 优化:操作会自动编译为优化后的 SQL 查询
- 惰性求值:操作会延迟到需要结果时才执行
- 630+ API 方法:提供全面的数据处理 API
- ClickHouse 扩展:提供 pandas 中没有的额外访问器 (
.arr、.json、.url、.ip、.geo)
架构

DataStore 采用 惰性求值 和 双引擎执行:
- 惰性操作链:操作只会被记录,不会立即执行
- 智能引擎选择:QueryPlanner 会将每个片段分派到最合适的引擎 (SQL 使用 chDB,复杂操作使用 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 引擎上运行。
性能对比
与 pandas 相比,DataStore 在性能上有显著提升,尤其是在聚合和复杂管道方面:
| Operation | Pandas | DataStore | Speedup |
|---|---|---|---|
| GroupBy count | 347ms | 17ms | 19.93x |
| 复杂管道 | 2,047ms | 380ms | 5.39x |
| 过滤+排序+Head | 1,537ms | 350ms | 4.40x |
| GroupBy 聚合 | 406ms | 141ms | 2.88x |
基于 1000 万行的基准测试。详见基准测试脚本和性能指南。
何时使用 DataStore
在以下情况下使用 DataStore:
- 处理大型数据集 (数百万行)
- 执行聚合和 GroupBy 操作
- 从文件、数据库或云存储中查询数据
- 构建复杂的数据管道
- 你希望使用 pandas API,同时获得更好的性能
在以下情况下使用原生 SQL API:
- 你更喜欢直接编写 SQL
- 你需要对查询执行进行更细粒度的控制
- 需要使用 pandas API 未提供的 ClickHouse 特有功能
功能对比
| 功能 | Pandas | Polars | DuckDB | DataStore |
|---|---|---|---|---|
| 兼容 Pandas API | - | 部分 | 否 | 完全兼容 |
| 惰性求值 | 否 | 是 | 是 | 是 |
| 支持 SQL 查询 | 否 | 是 | 是 | 是 |
| ClickHouse 函数 | 否 | 否 | 否 | 是 |
| String/日期时间访问器 | 是 | 是 | 否 | 是 + 更多功能 |
| 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 兼容的方法
- Accessors - String、日期时间、Array、JSON、URL、IP、Geo 访问器
- 聚合 - 聚合函数和窗口函数
- I/O 操作 - 读取和写入数据
高级主题
配置与调试
Pandas 用户指南
- Pandas Cookbook - 常见用法
- 关键区别 - 与 pandas 的重要区别
- 性能指南 - 优化技巧
- 面向 Pandas 用户的 SQL - 理解 pandas 操作背后的 SQL
快速示例
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