项目地址:https://github.com/polardb/duckdb-paimon
如果这个项目对你有帮助,欢迎 ⭐ Star 支持!有问题或建议欢迎提 Issue 或 PR。
钉群:164165020808
DuckDB-paimon 是由 PolarDB 团队开发的一款 DuckDB 扩展插件,让 DuckDB 能够直接读取和查询 Apache Paimon 格式的数据湖表,无需任何 ETL 搬运,无需 Flink/Spark 集群,打开 DuckDB Shell 即可对 Paimon 表执行 SQL 分析。
它的定位与 DuckDB 官方的 duckdb-iceberg 插件相同——把 DuckDB 强大的本地分析能力延伸到 Paimon 数据湖生态。
为什么你需要 DuckDB ?
Apache Paimon 是新一代实时湖仓格式,融合了 Lake Format 与 LSM 结构,原生支持流批一体写入,在实时数仓场景中被广泛采用。
然而 Paimon 生态缺少一个足够轻量级、低延迟的查询入口:
- 用 Flink/Spark 查询:需要预先部署集群,资源重;查询延迟高,更适合批处理查询
- 用 Trino/Presto:相比前者查询延迟降低,对百 ms 查询更友好,但仍免不了集群部署的复杂性
DuckDB 是一款嵌入式 OLAP 数据库,无需服务端、秒级启动、单文件部署,在本地 Notebook 环境中做数据分析极为高效。例如,PolarDB PostgreSQL版 基于 PostgreSQL 的行存引擎和基于 DuckDB 的列存引擎深度融入 PolarDB 统一云原生数据库架构(即:列存索引 IMCI),实现复杂查询分析性能百倍提升。
DuckDB 承担了当今 AI+数据湖分析的关键角色,而本次发布的 Duckdb-paimon 插件也补齐了 Paimon 数据源的空缺。Duckdb-paimon 将两者打通,让数据工程师和分析师可以用最轻量的方式直接查询Paimon 数据湖。
核心能力
直接读取 Paimon 表
无需任何中间转换,直接通过 SQL 查询 Paimon 表数据:
-- 通过完整路径读取 SELECT * FROM paimon_scan('./data/testdb.db/testtbl'); -- 通过 warehouse / database / table 三段式读取 SELECT * FROM paimon_scan('/warehouse', 'mydb', 'orders');
远程 OSS 存储支持
通过 DuckDB 的 Secret 机制,安全配置阿里云 OSS 访问凭证,直接查询存储在 OSS 上的 Paimon 数据湖:
-- 配置 OSS 访问凭证 CREATE SECRET paimon_oss ( TYPE paimon, key_id 'your-access-key-id', secret 'your-access-key-secret', endpoint 'oss-cn-hangzhou.aliyuncs.com' ); -- 直接查询 OSS 上的 Paimon 表 SELECT COUNT(*), region FROM paimon_scan('oss://my-bucket/warehouse', 'sales_db', 'orders') GROUP BY region ORDER BY COUNT(*) DESC;
Projection Pushdown(列裁剪下推)
查询时只读取 SQL 中实际用到的列,大幅减少 I/O 开销,在宽表场景下效果尤为显著:
-- 只会读取 order_id 和 amount 两列的数据文件,其余列不会被读取 SELECT order_id, amount FROM paimon_scan('oss://...', 'db', 'orders');
作为 Catalog 挂载(ATTACH)
将 Paimon warehouse 作为一个完整的 Catalog 挂载到 DuckDB,像操作本地数据库一样浏览 Paimon 的 Schema 和表结构:
ATTACH 'oss://my-bucket/warehouse' AS paimon_lake (TYPE paimon); SHOW ALL TABLES IN paimon_lake; DESCRIBE paimon_lake.sales_db.orders;
典型应用场景
实时湖仓的轻量即席查询
数据由 Flink 实时写入 Paimon,分析师用 DuckDB + Duckdb-paimon 直接在 OSS 上做即席(ad-hoc)查询,无需启动任何计算集群,查询延迟从分钟级降至秒级。
数据验证与质量检查
在 CI/CD 流水线中,用 DuckDB 对 Paimon 表做数据质量断言,验证 Flink 作业的输出结果是否符合预期,轻量、快速、无依赖。
数据探索与调试
数据工程师在开发 Flink 作业时,随时用 DuckDB Shell 查看 Paimon 表的当前状态,快速定位数据问题,效率远超启动 Flink SQL Client。
跨格式数据联邦查询
DuckDB 天然支持查询 Parquet、CSV、JSON、Iceberg 等多种格式,结合 Duckdb-paimon,可以将 Paimon 表与其他数据源做联邦 JOIN,无需数据搬运:
-- Paimon 订单表 JOIN 本地 CSV 维表 SELECT o.order_id, o.amount, c.customer_name FROM paimon_scan('oss://...', 'db', 'orders') o JOIN read_csv('customers.csv') c ON o.customer_id = c.id;
技术亮点
基于 paimon-cpp 原生 C++ 实现
Duckdb-paimon 底层依托 paimon-cpp,阿里巴巴开源的Paimon C++ 原生读写库。相比 JVM 方案:
- 零 JVM 依赖:无需安装 Java 运行时,部署极简
- 低内存占用:C++ 原生实现,内存效率远优于 JVM
- 快速启动:无 JVM 预热开销,DuckDB 进程秒级就绪
Arrow 格式数据交换
paimon-cpp 与 DuckDB 之间通过 Apache Arrow 格式交换数据,这是列式数据在内存中传递的工业标准,避免了序列化/反序列化开销,实现数据高效流转。
多线程并行扫描
扫描计划(Scan Plan)会将 Paimon 表拆分为多个独立的 Split,DuckDB 的多线程执行引擎可以并行读取各个 Split,充分利用多核 CPU 资源。
DuckDB Secret 安全凭证管理
OSS 访问凭证通过 DuckDB 原生的 Secret Manager 管理,支持作用域隔离,密钥不会出现在查询日志中(自动脱敏)。
路线图
能力 |
状态 |
读取 Paimon 表(本地 / OSS) |
已完成 |
Projection Pushdown |
已完成 |
Parquet + ORC 格式支持 |
已完成 |
Catalog ATTACH |
已完成 |
Filter Pushdown(谓词下推) |
规划中 |
快照查询(Time Travel) |
规划中 |
写入 Paimon 表 |
规划中 |
元数据管理(DDL) |
规划中 |
接入 REST Catalog / DLF 等远程 Catalog 服务 |
规划中 |
更多文件系统支持(HDFS 等) |
规划中 |
快速上手
构建
git clone --recurse-submodules https://github.com/polardb/duckdb-paimon.git cd duckdb-paimon GEN=ninja make
--recurse-submodules 会同时拉取 DuckDB 和 paimon-cpp 子模块,是构建所必需的。
运行
./build/release/duckdb
查询本地 Paimon 表
SELECT * FROM paimon_scan('./data/testdb.db/testtbl');
查询 OSS 上的 Paimon 表
CREATE SECRET my_oss ( TYPE paimon, key_id 'your-ak', secret 'your-sk', endpoint 'oss-cn-hangzhou.aliyuncs.com' ); SELECT * FROM paimon_scan('oss://your-bucket/warehouse', 'your_db', 'your_table');
关于 PolarDB for PostgreSQL
PolarDB for PostgreSQL 是阿里云自研的云原生数据库。在计算存储分离架构下,利用软硬件结合的优势,提供具备秒级弹性、高性能、海量存储、安全可靠的数据库服务。PolarDB PostgreSQL 100% 兼容原生PostgreSQL的多个版本,包括PostgreSQL 11/14/15/16/17/18。
PolarDB for PostgreSQL 基于 DuckDB 提供了 HTAP 方案——即列存索引(IMCI)功能。用户仅需以插件方式启用,系统即可自动将行存表实时同步为列存格式。这使得用户在无需修改业务 DML 的前提下,能够大幅加速分析类查询(优化器会基于开销自动路由至行存或列存)。同时,DuckDB 丰富的插件生态允许我们将查询数据源拓展到更多的系统,包括 Parquet、CSV等开放格式以及 Iceberg、Paimon、Lance等数据湖系统,在此过程中 DuckDB-paimon 将发挥有力支撑的作用。
此外,PolarDB 团队推出 AI 数据湖解决方案--PolarDB Lakebase ,也是 PolarStore 共享存储的一次全面升级。它面向 AI 时代丰富的非结构化和半结构化数据设计,联合 PostgreSQL、DuckDB、Daft、LanceDB 等开源数据生态,可以为企业客户带来湖库一体的使用体验。