DuckDB-Paimon v0.0.3:谓词下推能力全面升级
DuckDB-paimon 是由 PolarDB 团队开发的一款 DuckDB 扩展插件,允许通过 SQL 直接查询 Apache Paimon 表,无需任何 ETL 搬运,无需 Flink/Spark 集群,打开 DuckDB Shell 即可对 Paimon 表执行 SQL 分析。 近期发布 v0.0.3-variegata 版本带来了一项系统性的改进:谓词下推(Predicate Pushdown)能力的全面覆盖。 "谓词"这个词听起来有些学术,其实就是 SQL 中 WHERE 后面的那些过滤条件,比如 WHERE age > 18 或 WHERE region = 'cn-hangzhou'。 当 DuckDB 通过 duckdb-paimon 查询一张 Paimon 表时,有两种处理方式: 方式一(没有谓词下推):DuckDB 向 Paimon 发起请求,Paimon 把表里所有的数据都从数据湖存储层读出来,通过网络传给 DuckDB,再由 DuckDB 的执行器在内存里逐行检查哪些符合 WHERE 条件。如果这张表有 1 亿行,哪怕最终只需要 1000 行,也得先把 1 亿行全部搬过来。 方式二(有谓词下推):DuckDB 在发起请求的同时,把 WHERE 条件也一并告知 Paimon。Paimon 在自己的存储层读取文件时,就能利用列式存储的文件级统计信息(比如每个文件中某列的最小值/最大值),直接跳过那些肯定不包含目标数据的文件,甚至在行组(row group)级别提前过滤,只把可能命中的数据传出来。 Paimon 的数据通常存放在对象存储(如阿里云 OSS、AWS S3)上,每次 I/O 都有网络开销。谓词下推减少的不只是计算量,更是从 Paimon 数据湖存储层实际读出的数据量本身。对于存储在对象存储上的大表,这个差别非常明显——扫描 1 TB 和扫描 100 GB,不只是速度上的区别,也是存储读取成本上的区别。 v0.0.2 已经具备了基本的扫描能力,但谓词下推覆盖还不完整。v0.0.3 把这部分补全,覆盖了日常 SQL 里最常见的那几类过滤条件。 比较运算符 NULL 判断 BETWEEN NOT BETWEEN 同样支持。 IN / NOT IN LIKE AND / OR 逻辑组合 多个条件组合后整体下推,DuckDB 解析出的谓词树按原结构传递给 Paimon: AND 和 OR 的嵌套组合均支持。 ** DuckDB 升级:底层 DuckDB 从 v1.5.1 升级至 v1.5.2。 点击下方阅读原文,从 [GitHub Releases] 下载 Linux amd64 或 arm64 预编译包。也可参考项目 README 从源码构建。本期互动评论区分享您的应用场景和使用体验,截至4月28日(含),留言且留言处点赞数前三,随机赠送社区礼品。谓词下推意味着什么
谓词下推意味着什么新增支持的谓词类型
=、!=、<、>、<=、>= 这几个基础运算符现在都能下推。这是最高频的过滤场景,比如:SELECT * FROM paimon_table WHERE age > 18;
SELECT * FROM paimon_table WHERE status != 'deleted';SELECT * FROM paimon_table WHERE email IS NULL;
SELECT * FROM paimon_table WHERE phone IS NOT NULL;
范围查询是时序数据和日志表里最常见的过滤方式:SELECT * FROM paimon_table WHERE event_time BETWEEN '2026-01-01' AND '2026-04-01';
SELECT * FROM paimon_table WHERE region IN ('cn-hangzhou', 'cn-shanghai');
SELECT * FROM paimon_table WHERE category NOT IN ('test', 'demo');
字符串前缀、后缀、模糊匹配:SELECT * FROM paimon_table WHERE name LIKE 'Zhang%';SELECT * FROM paimon_table
WHERE region = 'cn-hangzhou'
AND event_time >= '2026-04-01'
AND status IN ('active', 'pending');
其他改动
安全修复**:Paimon secret 中的 key_id 字段现在会在日志和错误信息中自动脱敏,避免敏感凭据被意外打印。获取方式
