dbt v2 內建 DuckDB,免裝介接卡層
來源:DuckDB Blog · 2026-09-22
背景
dbt 本地端要接 DuckDB 做查詢,以前只有兩條路:要嘛連外部倉庫跑輕量測試,要嘛自己用 pip 裝 dbt-duckdb 套件、自己顧版本相依。dbt Labs 這次把驅動直接打包進安裝檔的版本是 dbt v2,時間點在 2026 年 9 月 14 日,底層換成去年(2025 年 5 月 28 日)上線的 Rust 引擎 Fusion。
dbt-duckdb 套件從 2021 年 8 月上線至今,在 GitHub 累積 1.4k 星星,但社群長期反映裝機門檻高;其中一則 issue(#13193)拿下 146 個愛心,內容就是希望「輕量設定」能更早出現在安裝流程裡。這種維護成本正是 dbt v2 這次要處理的核心痛點。
核心改動
dbt v2 建立在 dbt Core 2.0 alpha 之上,這個 alpha 從 2026 年 6 月 1 日開始釋出,並以 Apache 2.0 授權開源。往後 DuckDB 驅動不必手動安裝,第一次執行 dbt 指令時會自動下載並快取,profile 設定語法完全不變:
my_project:
target: dev
outputs:
dev:
type: duckdb
path: ./warehouse.duckdb| 項目 | dbt v1.x | dbt v2 |
|---|---|---|
| 安裝 DuckDB 驅動 | 另外 pip install dbt-duckdb | 隨 dbt 內建,首次執行自動下載 |
| Catalog 支援 | 無 | catalogs.yml 設定 DuckLake、Iceberg REST |
| Metadata | 大型 JSON manifest | dbt Information Schema,可用 DuckDB 直接查詢 |
除了免裝,v2 也把 DuckDB 版本釘死在特定版號,藉此開放讀寫 Iceberg 等新功能;欄位層級的 lineage 改用原生 SQL 解析追蹤上游欄位,不必額外掛工具。部分邏輯像 sf_array_except 這類函式,從 SQL macro 搬進 DuckDB extension 執行,執行機制整套換掉。
影響範圍
受影響的是用 dbt 做本地開發與 CI 測試的資料工程師,尤其是原本手動管理 dbt-duckdb 版本、或用 profiles.yml 對接 DuckDB 的團隊。升級前建議先在 dbt v1.12 上測相容性:
dbt parse --use-v2-parser官方另外提供 dbt-autofix 套件處理多數必要改動,並附上完整升級指南;若專案已經用到 DuckLake 或 Iceberg REST catalog,還要檢查 catalogs.yml 的新增設定是否對齊。這批改動不影響既有 profile 語法,但會改變函式與 metadata 的底層行為,升版前值得整批測試跑一遍。
原始來源:DuckDB Blog — DuckDB Now Ships inside dbt v2