DBT(数据构建工具)基础
在 dbt 中使用 SELECT 语句对数仓数据建模,并使用 refs、sources 和增量模型
DBT(数据构建工具)基础 是 CoddyKit 上的免费 SQL Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 SQL Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 SQL Academy 课程共包含 4 节课。
dbt 是什么
dbt 是 ELT 中的“T”:它使用 SELECT 语句在数据仓库内部转换数据。您定义模型(SELECT),dbt 会将它们实体化为表或视图,管理依赖关系,并运行测试。
为什么使用 dbt?
在 dbt 之前,转换通常存在于临时 SQL 脚本、存储过程或 Python 任务中。dbt 带来了:
- 以代码形式编写的模块化 SQL,并在 Git 中进行版本管理
- 使用 ref() 构建依赖关系图,而不是手动排序
- 作为一等对象的测试
- 文档生成
项目结构
一个 dbt 项目:
my_project/
dbt_project.yml
models/
staging/
stg_orders.sql
marts/
fct_revenue.sql
tests/
seeds/
macros/模型文件
.sql 文件中只有一条 SELECT:
-- models/staging/stg_orders.sql
{{ config(materialized='view') }}
SELECT
id,
user_id,
total,
created_at
FROM {{ source('raw', 'orders') }}实体化类型
- view — dbt 创建一个 VIEW;更新速度快,但查询速度较慢
- table — 完整表;每次运行都会重建
- incremental — 只添加新行
- ephemeral — 内联的 CTE,不创建数据库对象
ref() 与依赖关系
在一个模型中引用另一个模型:
-- models/marts/fct_revenue.sql
SELECT
date_trunc('day', created_at) AS day,
SUM(total) AS revenue
FROM {{ ref('stg_orders') }}
GROUP BY 1运行 dbt
构建整个项目:
dbt run # build all models
dbt run --select staging # subset
dbt run --select +fct_revenue # this model and upstream
dbt build # run + test源
源用于记录和引用原始表:
# models/sources.yml
sources:
- name: raw
database: warehouse
tables:
- name: orders增量模型
对于超大的事实表:
{{ config(materialized='incremental', unique_key='id') }}
SELECT *
FROM {{ source('raw','orders') }}
{% if is_incremental() %}
WHERE created_at > (SELECT MAX(created_at) FROM {{ this }})
{% endif %}Jinja 模板
dbt 是 SQL + Jinja,因此您可以循环并有条件地生成 SQL:
{% set tiers = ['free','pro','enterprise'] %}
SELECT user_id,
{% for t in tiers %}
COUNT(*) FILTER (WHERE tier = '{{ t }}') AS {{ t }}_count {% if not loop.last %},{% endif %}
{% endfor %}
FROM users GROUP BY user_id快照
自动捕获缓慢变化的维度:
{% snapshot user_snapshot %}
{{ config(
target_schema='snapshots',
unique_key='id',
strategy='timestamp',
updated_at='updated_at',
) }}
SELECT * FROM {{ source('raw','users') }}
{% endsnapshot %}文档
根据模型和 YAML 描述自动生成可浏览的文档:
dbt docs generate
dbt docs serve # opens browser回顾
dbt 将数据转换建模为 SQL 代码。
- 模型 = .sql 文件中的 SELECT
- ref() 构建 DAG
- 实体化类型:view / table / incremental / ephemeral
- 测试和文档作为一等对象
快速检查
dbt 的 {{ ref('stg_orders') }} 有什么作用?
常见问题解答
「DBT(数据构建工具)基础」课时是免费的吗?
是的 — 「DBT(数据构建工具)基础」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 SQL Academy 课程的其余内容,请升级到 CoddyKit PRO。 SQL Academy 课程共包含 4 节课。
「DBT(数据构建工具)基础」这节课中我会学到什么?
在 dbt 中使用 SELECT 语句对数仓数据建模,并使用 refs、sources 和增量模型 你通过在浏览器中直接运行的动手代码来练习 SQL Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 SQL Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 SQL Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。
「DBT(数据构建工具)基础」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 SQL Academy 课中编写并运行代码吗?
能。每节 SQL Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。