阅读材料: 第10部分. dbt Staging模型

模块「第10部分. dbt Staging模型」中第 1 / 5 节课
您正在未登录状态下查看课程。 请登录,以保存进度并参加测试。

第 10 部分. dbt 的 Staging 模型

Staging 将原始事实转化为稳定的技术模型。这里不是复杂业务逻辑的位置,而是为清晰的类型、命名、主键和最小规范化提供场所。良好的 staging 使下游 SQL 变得平淡且可预测。

staging 中允许的内容

  • 将字段名调整为项目约定;
  • 转换类型(dateintegerdecimal);
  • 显式处理空值和 null 的语义;
  • 保留源键;
  • 标记 PII 字段,但若无理由不隐藏它们。

示例:

try_cast(nullif(cast(revoked_at as varchar), '') as date) as revoked_at

这一行本身并不解决产品问题。它在技术上将空值转化为 null,而"revoked_atnull = 同意有效"的含义应在规范和 mart 中体现。

staging 中禁止的内容

  • 对客户进行聚合;
  • 计算风险评分;
  • 选择最终的事实表 grain;
  • 为了"美观"删除行;
  • 隐藏契约漂移。

如果 staging 开始回答消费者的问题,这一层就变得过于智能了。

dbt 测试

最低要求:

  • 对源键使用 not_nullunique
  • 对必需的金额和日期使用 not_null
  • 在域较小时使用 accepted_values
  • 对复杂约束使用 singular 测试。

staging 中的测试应捕捉源的技术问题,但不能取代数据产品的验证。

给读者的解读

Staging 是数据开始使用平台语言的第一层。这里出现稳定的列名、明确的类型、清晰的空值处理和基础键。但 staging 不应成为小型业务事实表。它的任务是使源数据适用于后续工作,而不去承担属于产品规范的决策。

良好的 staging 模型是平淡的:选择字段、转换类型、显式处理空值和 null、保留合成标识符、不更改 grain。这里的平淡是有益的。如果 staging 中出现复杂的聚合、"仅活跃"过滤器、风险分类或业务指标计算,评审者应当质疑为何在模型规范之前就已做出该决策。

空值处理是一个很好的教学示例。空的 revoked_at 可能导致类型转换失败。可以快速将其替换为 null 并遗忘。但 SDD 方法要求更多:记录空值出现在 raw 中的事实;解释为何在 staging 中它变为 null;验证 mart 一致地计算活跃和已撤销的同意。如此,技术修正就转变为有文档记录的决策。

Staging 同时也为智能体设定了 SQL 风格。模型应小巧、自上而下阅读,并在合适处使用 ref()/source()。如果 staging 难以阅读,下游模型将更糟。如果 staging 清晰,评审者可快速将技术规范化与产品含义区分开来。

实践

选择一个 staging 模型,为每个转换打上标签:重命名、类型转换、null 处理或业务逻辑。如果发现业务逻辑,请检查是否存在其规范。

Qwen 查询

阅读 Schema Manifest 和 raw 源。
创建或检查 staging 模型。
不要添加业务聚合。对每个类型转换,解释其所基于的源事实。

最低产出

完成本章后:

  • 主要源存在 staging 模型;
  • 键由 dbt 测试覆盖;
  • 关于空值和 null 的决策已记录;
  • PII 仅在演示策略所需的位置保持可见。

典型错误

将业务逻辑隐藏在 staging 中。例如,case when amount_rub > 100000 then 1 else 0 end as risk_event 仅在规则已记录于规范或源清单中时才可接受。否则智能体就会自行编造风险策略。

检查问题

  1. staging 可以在未经批准的情况下做出哪些决策?
  2. 为何 PII 有时保留在 staging 中?
  3. staging 测试与 mart 验证事实有何区别?
我的笔记
0 / 10000

笔记保存在当前浏览器中。在其他设备上将不会显示。

课程菜单

课程

SDD Data. 使用 Qwen Code 和 dbt 构建银行数据平台
进度 0 / 110