0Pricing
SQL Academy · 课时

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 反馈 — 无需本地设置。

此课程中的所有课时

  1. DBT(数据构建工具)基础
  2. SQLFluff 与代码检查
  3. 测试 SQL:dbt 测试与 Great Expectations
  4. 模式变更的 CI(GitHub Actions)
← 返回 SQL Academy