DuckDB 周报 #9:dbt v2 自带适配器,直查 HF 数据集
dbt v2 开始自带 DuckDB 适配器,装完就能用,不用再 pip 装第二个包。这是本周官方博客的两篇重磅之一,另一篇教你怎么用一条 SQL 直接查 Hugging Face 上的数据集。
● ● ●
生态变化
先看整体。
版本面:稳定版还是 v1.5.5(7 月 22 日发布),没有新版本。v2.0-alpha(代号 Cyanoptera)继续迭代,正式版按发布日历排在 10 月。手里有 v1.5.x 生产项目的,本周不需要动作。
主仓动态:duckdb/duckdb 的 main 分支本周合并了几个值得留意的改动——Window Monotonic Pushdown(窗口函数单调性下推,作者 Hannes Mühleisen,9 月 24 日合并)、MATCH_RECOGNIZE 的匹配步数上限(防止失控查询)、以及一个 FILL 外推在递减整数序列上的修复。另外还有一批 ART 索引指针的重命名提交,属于 v2.0 发布前的代码清理。
社区扩展:本周真正的数字是这个——社区扩展仓库从 214 个涨到 271 个,一周净增 57 个。照这个速度,年内破 300 没什么悬念。
● ● ●
9 月 22 日,官方博客发了篇长文宣布 dbt v2 自带 DuckDB 适配器。
背景值得说一下。dbt-duckdb 这个 Python 适配器 2021 年 8 月收到第一个 PR,现在 GitHub 上 1.4k star。去年 dbt Labs 转向 Rust 写的 Fusion 引擎时,DuckDB 一开始不被支持,社区在 GitHub 上开 issue 要了回来,攒了 146 个心。dbt 2.0.0 今年 9 月 14 日发布,适配器直接内置。
对使用者的变化:
装完 dbt 就能用 DuckDB,第一次运行时自动下载驱动,profile 写法不变 新增 DuckLake 和 Iceberg REST catalog 支持,在 catalogs.yml 里配置,dbt 自动生成 ATTACH 语句——这是老的 Python 适配器没有的 dbt 的元数据改用 Parquet 存储(Information Schema),可以直接用 DuckDB 查项目的模型清单和列级血缘,不用再解析几百 MB 的 manifest.json v2 固定了 DuckDB 版本,部分适配器逻辑从 SQL 宏下沉成了原生函数
迁移路径也给了:在 dbt v1.12 上先跑 dbt parse --use-v2-parser 验证项目能否解析,能过再按升级指南切过去。
● ● ●
一条 SQL 直接查 Hugging Face
9 月 25 日的第二篇官方博文,讲的是 hf:// 协议的正确用法。这个功能其实 2024 年 5 月(v0.10.3)就有了,这次是官方系统性地把玩法讲全。
最简单的形式:
SELECT count(*) AS cnt
FROM 'hf://datasets/cais/mmlu/astronomy/*.parquet';
返回 173。加个过滤条件:
SELECT count(*) AS cnt
FROM 'hf://datasets/cais/mmlu/astronomy/*.parquet'
WHERE question LIKE '%planet%';
返回 21。这两条我在本机跑过(国内网络直连 huggingface.co 超时,把文件从镜像站拉到本地验证,数字与官方一致)。
几个实用点:
- 零下载
:数据留在 HF Hub 上,DuckDB 只读查询需要的列,Parquet 按列扫描,不用整表进内存 - glob 聚合
:一个数据集拆成多个文件时, *.parquet直接当一张表 ~parquet分支:HF 会把所有数据集自动转成 Parquet 存在这个特殊分支上,CSV 或 JSONL 发布的数据集也有列式版本可查,路径加个 @~parquet后缀就行- 版本钉死
:路径后缀 @c30699e8可以钉到具体 commit,保证分析可复现 - 私有数据集
:token 放进 DuckDB 的 Secrets Manager,或者让它自动读 ~/.cache/huggingface/token
国内用户还有个官方没提的路径:curl 走 hf-mirror.com 能正常拉到同一批文件。DuckDB 1.5.4 的 httpfs 目前没有 HF endpoint 配置项(设置里只有 s3_endpoint 和 hf_max_per_page),所以要么本地代理,要么先下载再查。
● ● ●
社区扩展:新面孔不少
一周 40 多个 PR 里挑几个有意思的:
oraduck(PR #2783,已合并):把 DuckDB 查询结果通过 Oracle OCI Direct Path API 直接灌进 Oracle 表——就是 sqlldr direct=true 背后那套机制。每个 DuckDB 线程一个 Oracle 会话,原生编码,最后统一提交。做 Oracle 数仓数据导出的团队可以关注。
clickhouse_scanner(PR #2799,open):ClickHouse 官方(redox)提的,照着 postgres_scanner 的样子做,让 DuckDB 直接扫 ClickHouse 表。如果合并进社区扩展,两边互通又多了一条官方通道。
mentat(PR #2812,open):gburd 出品,把 Datomic 兼容的 Datalog 查询引擎做成 DuckDB 扩展。edn_q 是表函数,Datalog 查询结果可以直接和 DuckDB 本地表 JOIN。小众但思路清奇。
Miint(PR #2788):一个商业 OLAP 引擎的社区版封装,v1.0.0。
其他常规更新:gdrive、bq(BigQuery,v0.12.1)、finance(v0.2.19)、duck_dggs、markdown、duckdb_mcp(v2.3.2)等都在本周发了新版。
● ● ●
值得一提
9 月 22 日官方办了场线上活动「Nobody Knows What OLTP Is: DuckDB Moves to the Middle」,讨论 DuckDB 往事务处理方向走的事。话题本身就是信号:一个打着"只做分析"旗号出身的数据库,开始认真谈 OLTP 边界了 HN 上本周没有 DuckDB 热帖,热度最高的一条也只有 4 分。8 月收购和 v2.0-alpha 连续两周刷屏之后,社区进入消化期 villagesql.com 有篇《Using DuckDB inside MySQL》,讲反过来在 MySQL 里嵌 DuckDB 做分析,角度和上周周报提过的方向呼应 duckdblab.org 那篇 v2.0-alpha 42 倍递归 CTE 提速的实测文还在被引用,v2.0 正式版 10 月落地前,这类对比测试会越来越多
DuckDB 当前最新版本:v1.5.5(v2.0 正式版预计 10 月发布)
上周说过官方给 Claude Code 出了技能包,本周 dbt v2 内置适配器这条,其实是同一个趋势的两次落地:DuckDB 正在从"你自己去装"变成"别人默认带你"。工具链厂商替用户做了接入决定,这对 DuckDB 的装机量比任何 benchmark 都管用。10 月 v2.0 发布前这几周,值得盯紧还有哪些工具跟进。
如果你在用 dbt-duckdb,这周可以先跑一下 v2 parser 检查项目兼容性;如果手头有 HF 上的数据集想摸底,两条 SQL 的事。
有想法欢迎留言:你们团队在 dbt v1 上吗,升 v2 的最大顾虑是什么?