ITPub博客

首页 > 数据库 > 国内数据库 > 「DuckDB-Paimon实操」6分钟上手,数据湖分析快人一步

「DuckDB-Paimon实操」6分钟上手,数据湖分析快人一步

原创 国内数据库 作者:数据Cool 时间:2026-04-24 17:07:47 0 删除 编辑

DuckDB-paimon 是由 PolarDB 团队开发的一款 DuckDB 扩展插件,让 DuckDB 能够直接读取和查询 Apache Paimon 格式的数据湖表,无需任何 ETL 搬运,无需 Flink/Spark 集群,打开 DuckDB Shell 即可对 Paimon 表执行 SQL 分析。

技术交流钉群:164165020808

DuckDB-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;


DuckDB-paimon核心能力


实时湖仓的轻量即席查询

数据由 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;


快速上手


构建

git clone --recurse-submodules  
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');


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70049330/viewspace-3116751/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2026-01-19

  • 博文量
    751
  • 访问量
    690293