dbt 擅長把通過審查的 SQL 變成可重複部署的模型:測試、版本控制、CI,以及 defer/clone/selector 這類降低重建成本的開發手段。Defer · dbt clone · Optimize costs
你不必為每個「今天下午突然想改分母」的假說都開 PR。Lantide 當本機沙盒:在不污染 dbt repo、也不對雲端倉庫反覆全量掃描的前提下驗證口徑,確認值得長期維護後,再回寫成 ref() 模型。
什麼時候會卡在生產管線
1. 臨時邏輯擠進 repo
每個一次性問題都新增 tmp_marketing_analysis_v2.sql、開 PR、跑 CI,專案很快會堆滿短命模型。即使有 Slim CI,審查與合併成本還在。
2. 探索迴圈和部署迴圈摩擦不同
Defer/clone 能減少「為了改一個下游而重建整條上游」。但若你在倉庫上對大表反覆試 JOIN、改過濾條件,仍可能產生可觀的 compute。探索期需要更快的試錯節奏;部署期需要更嚴的測試與審查。
3. 假說往往超前於正式語義
Semantic Layer 適合已定義、需要高準確度的企業指標。adhoc 與小範圍探索,可以先用更靈活的查詢驗證,再決定要不要進語義層。Semantic Layer vs. Text-to-SQL
建議流程:Marts 當真源,本機當沙盒
dbt production marts(權威轉換與測試)
│
│ 透過已設定的 DB/MCP 來源讀取或物化
▼
Lantide 本機沙盒(DuckDB 探索、Plan、分頁快取)
│
│ 確認值得長期維護後
▼
回寫 dbt model(ref()、test、CI review)
Lantide 沒有官方 dbt connector。你連接的是 dbt 已寫入的倉庫表,或可暴露這些表的 MCP/資料庫來源,再在本機查詢。見 MCP Sources 入門 與 USER_GUIDE §4.6。
沙盒裡具體能做什麼
物化後在本機反覆查
對已連線來源使用 mcp_pull_table 等工具,把需要的表物化到本機後再探索。首次拉取與之後的 refresh 仍有遠端與儲存成本;省下的是同一份物化結果上的反覆試錯,避免每改 10 行條件就打回大倉庫。
分頁快取與 Source Run
探索 SQL 可落成 persist 分頁;需要時用 Source Run 重跑上游鏈。本機物化快取通常是工作階段/工作區層級的 TEMP 結果,重開或切換工作區後可能要重新連線並 Source Run——它不是永久數倉。見 USER_GUIDE §7–8。
回寫 dbt 時改寫成工程產物
本機驗證通過後,要把邏輯改成 dbt 風格,而不是直接貼上帶本機表名的 SQL:
-- Lantide 沙盒中驗證過的邏輯(示意)
SELECT
o.customer_id,
COUNT(o.order_id) AS total_orders,
SUM(o.amount) AS lifetime_value
FROM "mcp_wh__fct_orders" o
INNER JOIN "mcp_wh__dim_customers" c
ON o.customer_id = c.customer_id
WHERE c.is_active = true
GROUP BY 1;
-- 回寫 dbt 時改寫
WITH orders AS (
SELECT * FROM {{ ref('fct_orders') }}
),
customers AS (
SELECT * FROM {{ ref('dim_customers') }}
)
SELECT
o.customer_id,
COUNT(o.order_id) AS total_orders,
SUM(o.amount) AS lifetime_value
FROM orders o
INNER JOIN customers c ON o.customer_id = c.customer_id
WHERE c.is_active = true
GROUP BY 1;
回寫後仍要補 test、materialization、命名與 PR/CI。
實務三步驟
- 確認來源:倉庫直連或 MCP Source 能讀到相關 marts;只物化本次假說需要的表。
- 本機驗證:用 Plan 寫清分母與時間窗,在 DuckDB 反覆改 SQL;JOIN 前檢查 fan-out。見 JOIN fan-out。
- 值得長期維護再進 dbt:改寫
ref()、補測試、走既有 Slim CI/defer 流程。
| 維度 | 主要留在 dbt | 搭配 Lantide |
|---|---|---|
| 生產轉換與測試 | 是 | — |
| 一次性格口假說 | 摩擦較高 | 本機沙盒 |
| 遠端 compute | 每次 build/大查詢計費 | 物化後本機重複查詢 |
| Repo 整潔度 | 易被臨時 model 污染 | 先驗證再進 repo |
結語
dbt 把正確的轉換變成可部署資產;Lantide 在那之前提供低摩擦、可審閱的本機沙盒。先驗證、再 ref(),通常比把每個問題都塞進 CI 更永續。
建議下一步
- 閱讀 為什麼 2026 年還需要 SQL
- 下一個尚未進 Semantic Layer 的假說,先在 Lantide 驗證一輪,再決定是否開 dbt PR
參考資料
- dbt Labs. (查閱 2026-07-25). Defer. https://docs.getdbt.com/reference/node-selection/defer
- dbt Labs. (查閱 2026-07-25). About dbt clone command. https://docs.getdbt.com/reference/commands/clone
- dbt Labs. (查閱 2026-07-25). Clone incremental models as the first step of your CI job. https://docs.getdbt.com/best-practices/clone-incremental-models
- dbt Labs. (查閱 2026-07-25). Optimize costs in dbt. https://docs.getdbt.com/docs/platform/billing/optimize-costs
- dbt Labs. (2026). Semantic Layer vs. Text-to-SQL: 2026 Benchmark Update. https://docs.getdbt.com/blog/semantic-layer-vs-text-to-sql-2026