跳转到主要内容
DataStore 提供两种兼容模式,用于控制输出是按 pandas 兼容方式组织,还是针对原生 SQL 性能进行优化。

概览

性能模式会禁用哪些功能


启用性能模式

使用配置对象

使用模块级函数

使用便捷导入方式

启用性能模式后,执行引擎会自动设为 chdb。您无需单独调用 config.use_chdb()。

何时使用性能模式

在以下情况下使用性能模式:
  • 处理大型数据集 (数十万到数百万行)
  • 运行以聚合为主的工作负载 (groupby、sum、mean、count)
  • 行顺序并不重要 (例如聚合结果、报表、仪表盘)
  • 你希望获得最高的 SQL 吞吐量和尽可能低的额外开销
  • 你关心内存占用 (并行读取 Parquet,无中间 DataFrames)
在以下情况下应继续使用 pandas 模式:
  • 你需要完全一致的 pandas 行为 (行顺序、MultiIndex、dtypes)
  • 你依赖 first()/last() 返回真正的第一行/最后一行
  • 你使用依赖行顺序的 shift()、diff()、cumsum()
  • 你在编写测试,将 DataStore 的输出与 pandas 进行比较

行为差异

行顺序

在性能模式下,任何操作的行顺序都无法保证。这包括:
  • 过滤器结果
  • GroupBy 聚合结果
  • 未显式调用 sort_values() 时的 head() / tail()
  • first() / last() 聚合
如果需要有序结果,请显式添加 sort_values():

GroupBy 结果

聚合

单条 SQL 执行

在性能模式下,ColumnExpr 的 groupby 聚合 (例如 ds[condition].groupby('col')['val'].sum()) 会作为单条 SQL 查询执行,而不是像 pandas 模式那样分两步执行:
这避免了中间 DataFrame 的物化过程,并可显著减少内存占用和执行时间。

与执行引擎的对比

性能模式 (compat_mode) 和执行引擎 (execution_engine) 是相互独立的配置维度: 将 compat_mode='performance' 设为性能模式时,execution_engine 也会自动设为 chdb,因为性能模式是专为 SQL 执行设计的。

在性能模式下测试

为性能模式编写测试时,结果的行顺序和结构格式可能与 pandas 不同。请使用以下策略:

排序后比较 (聚合、过滤)

值域检查 (首项/末项)

schema 与计数 (不带 ORDER BY 的 LIMIT)


最佳实践

1. 尽早在脚本中启用

2. 顺序很重要时,请显式排序

3. 适用于批处理/ETL 工作负载

4. 在会话内切换模式