惰性求值
示例:惰性求值与立即求值
惰性求值的优势
- 查询优化:多个操作会编译成一条优化后的 SQL 查询
- 过滤器下推:过滤器会在数据源层面应用
- 列裁剪:只读取所需的列
- 延迟决策:可在运行时选择执行引擎
- 计划检查:可在执行前查看/调试查询
执行触发时机
自动触发
示例:
保持惰性执行的操作
示例:
三阶段执行
阶段 1:SQL 查询构建 (惰性)
第 2 阶段:执行时机
阶段 3:DataFrame 操作 (如有)
查看执行计划
explain() 可查看将如何执行:
Query
Response
verbose=True 查看更多详细信息:
缓存
缓存的工作原理
缓存失效
手动控制缓存
混合 SQL 与 Pandas 操作
与 SQL 兼容的操作
filter(),where()select()groupby(),agg()sort(),orderby()limit(),offset()join(),union()distinct()- 列操作 (数学运算、比较、字符串方法)
仅限 Pandas 的操作
- 使用自定义函数的
apply() - 带有复杂聚合的
pivot_table() stack()、unstack()- 对已执行的 DataFrame 执行的操作
混合式管道
执行引擎选择
自动模式 (默认)
强制使用 chDB 引擎
强制使用 pandas 引擎
性能影响
好:尽早过滤
不佳:过晚进行过滤
推荐:尽早选择列
推荐做法:让 SQL 来处理
最佳实践摘要
- 执行前先串联各项操作 - 先构建完整查询,再统一触发一次
- 尽早过滤 - 在源头减少数据量
- 只选择所需列 - 列裁剪可提升性能
- 使用
explain()理解执行方式 - 运行前先调试 - 让 SQL 处理聚合 - ClickHouse 已对此进行了优化
- 留意执行触发时机 - 避免意外过早执行
- 合理使用缓存 - 了解缓存何时会失效