① 标题党#
主标题:DuckDB 还能装插件?给数据库加能力是种什么体验
备选A:从 http/json 到联邦,DuckDB 扩展让我自己造数据源
备选B(短视频):库不够用?自己给它加个轮子
② 开场钩子#
标准 DuckDB 已经很强,但当我想让它读一个自定义 HTTP 接口时,发现它还能扩展。给数据库写插件,这个自由度让我停不下来。
③ 主角特性:扩展机制 / TableFunction / ParserExtension#
- Extensions:核心可裁剪可扩展,装
httpfs/postgres/parquet等按需加载。 - 自定义 TableFunction:你可以写一个表函数,把任意数据源暴露成 DuckDB 表(如自读 HTTP JSON)。
- ParserExtension:甚至可以接管自定义 SQL 语法(
CREATE TABLE x USING http_json(...)),几乎重定义数据库语法。
坑:扩展 API 跨版本不稳,常要随 DuckDB 重编译;但因为是开源,能看到源码自己补。
④ 最小可复现#
-- 装官方扩展
INSTALL httpfs;
LOAD httpfs;
-- 直接读 S3/HTTP 上的 parquet
SELECT * FROM read_parquet('s3://bucket/a.parquet');sql(自定义扩展:见「方案C」的 http-json 插件——把 REST 接口当表)
⑤ 结论#
DuckDB 的扩展机制,让”数据库”从封闭走向可编程。你能给它加轮子,甚至改语法——这是它区别于大多数库的自由。
⑥ 配图脚本#
扩展装载流程 / 自定义数据源暴露成表 / ParserExtension 语法接管 / 结论卡