You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DuckDB v0.10.2中Parquet多条件谓词下推失效问题咨询

DuckDB v0.10.2中Parquet多Symbol OR过滤无法谓词下推的问题

我有一个按instrument-symbol排序并分块的Tick数据Parquet文件,其元数据包含symbol字段的min/max信息。测试发现两种过滤场景的执行差异:

1. 单个Symbol过滤:谓词下推生效

执行SQL:

explain analyse SELECT * from "/data/phil/cme_312.parquet" AS t
WHERE t.symbol = 'SR3Z3';

执行计划:

┌─────────────┴─────────────┐
│       PARQUET_SCAN        │
│   ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─   │
│           symbol          │
│         event_type        │
│            side           │
│         symbol_idx        │
│           epoch           │
│           price           │
│          quantity         │
│        msg_seq_num        │
│       transact_time       │
│          n_orders         │
│   ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─   │
│ Filters: symbol=SR3Z3 AND │
│     symbol IS NOT NULL    │
│   ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─   │
│        EC: 2820388        │
│   ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─   │
│           250614          │
│          (0.36s)          │
└───────────────────────────┘

从执行计划可见,DuckDB将过滤条件下推到Parquet扫描层,仅扫描包含SR3Z3的分块,最终返回250614行,耗时0.36秒,谓词下推生效。

2. 多个Symbol OR过滤:全量扫描

执行SQL:

explain analyse SELECT * from "/data/phil/cme_312.parquet" AS t
WHERE t.symbol = 'SR3Z3' or t.symbol = 'SR3H4';

执行计划:

┌─────────────┴─────────────┐
│       PARQUET_SCAN        │
│   ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─   │
│           symbol          │
│         event_type        │
│            side           │
│         symbol_idx        │
│           epoch           │
│           price           │
│          quantity         │
│        msg_seq_num        │
│       transact_time       │
│          n_orders         │
│   ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─   │
│        EC: 14101941       │
│   ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─   │
│          14101941         │
│          (6.37s)          │
└───────────────────────────┘

此场景下执行计划未显示任何过滤条件,扫描了全部14101941行数据,耗时6.37秒,说明DuckDB未执行谓词下推,而是做了全量扫描。

结论

这确实是DuckDB v0.10.2版本中Parquet谓词下推的局限性。该版本对OR连接的多值等值过滤场景,无法利用Parquet文件的min/max元数据来跳过不包含目标Symbol的分块。后续的DuckDB版本(如v0.11及以上)针对这类场景做了优化,支持将IN列表或OR连接的多值过滤条件下推到Parquet扫描层,实现分块跳过。

内容的提问来源于stack exchange,提问作者Phil Dawes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 21:40:15