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

概述

性能模式 会禁用哪些功能


启用性能模式

使用 config 对象

使用模块级函数

使用简化导入

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

何时使用性能模式

在以下情况下使用性能模式:
  • 处理大型数据集 (数十万到数百万行)
  • 运行以聚合为主的工作负载 (groupby、sum、mean、count)
  • 行顺序不重要 (例如聚合结果、报表、仪表盘)
  • 你希望获得最高的 SQL 吞吐量和最低的开销
  • 需要关注内存使用量 (并行读取 Parquet,无中间 DataFrame)
在以下情况下请保持使用 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 与计数 (LIMIT 不使用 ORDER BY)


最佳实践

1. 尽早在脚本中启用

2. 当顺序很重要时,显式指定排序

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

4. 在同一会话中切换模式


最后修改于 2026年6月10日