阅读材料: 第15部分. Gold layer: 业务实体与粒度

模块「第15部分. Gold layer: 业务实体与粒度」中第 1 / 5 节课
您正在未登录状态下查看课程。 请登录,以保存进度并参加测试。

第 15 部分. Gold 层:业务实体与 grain(粒度)

Gold 层是数据产品层。在这里,下游消费者看到的是稳定的指标集市(mart),而不是中间计算。因此,gold 的起点是 grain(粒度)和契约,而不是随手写的 select

使 Gold 模型就绪的条件

Gold 模型在以下情况下视为就绪:

  • 它有明确命名的消费者;
  • grain(粒度)已记录并经过验证;
  • 必填字段与契约绑定;
  • PII 策略已应用;
  • 校验事实覆盖了关键风险;
  • 评审者报告将事实与假设区分开。

对于 mart_customer_360,消费者是客户与组合分析;对于 mart_payment_risk_signals,消费者是风险信号监控;对于 mart_open_api_consents,消费者是同意状态管控。这些消费者不应偶然拿到相同的 grain。

作为防御手段的 Grain(粒度)

Grain 回答的是「一行代表什么」这个问题。一旦答案发生变化,这就不再是表面问题,而是数据 API 的变更。

示例:

  • 每个 customer_id 一行;
  • 每个 transaction_id 一行;
  • 每个 scope 一行;
  • 每天每个渠道一行。

如果 mart 名为 customer_360,但每个客户包含多行,那么这个名称就在欺骗消费者。

Gold 层验收事实

  • grain 的主键通过 not_null 校验;
  • 如果 grain 假设每个键对应一行,则 grain 的主键需通过 unique 校验;
  • 必填指标通过 not_null 校验;
  • 不包含直接的 PII;
  • 契约字段齐全;
  • lineage(血缘)可通过 dbt 图或评审者备注读取。

Qwen 查询

阅读 specs/models 和 models/marts。
针对每个 mart,明确 grain、主要校验事实、PII 策略以及对契约的影响。
找出那些 grain 未被测试或评审者手工事实证明的 mart。
不要修改文件。

最低产出

请编制 gold 层的清单:

# Gold 层清单

## mart_customer_360
消费者:
粒度:
必填字段:
PII 策略:
校验事实:

为读者解析

Gold 层是工程工作转变为公开承诺的时刻。在那之前,可以讨论中间实体、规范化和准备工作。到了 gold 层,消费者登场:分析师、风险团队、报表、同意状态监控。因此,这里任何含糊的代价都会更高。如果 grain 没有记录,消费者会自行脑补。如果 PII 策略未经校验,多余的列可能流入报表。如果必填指标未被测试覆盖,指标集市只是看起来准备好了。

Gold 模型应当是窄的。这听起来奇怪,因为我们总想让指标集市更「丰富」:增加产品、渠道、分群、最近一次操作、风险标志、信用阶段。但每一次扩展都会改变这张表回答的问题。Customer 360 可能是客户维度切片,也可能不知不觉地变成客户×产品维度集市。名称不变,含义已变。

正因如此,把公开承诺写成一行是很有用的。如果这句话没法在不使用顿号和例外的情况下表达出来,说明这个 gold 模型太宽。「每个客户一行,用于组合分析且不含直接 PII」是一个好的框定。「包含账户、支付、风险以及一切可能需要的字段的客户集市」则是在邀请漂移。

Gold 层的评审应当比 staging 评审更严格。staging 评审可以讨论技术层面的规范化;而 gold 评审则必须追问消费者、契约、SLA、PII、grain 与证据。如果评审者无法理解这张 mart 是向谁承诺的、将被如何使用,那么即便它放在 models/marts/ 下,也还不算 gold。

实践

请针对 README 中的每个 mart,用一行写出其公开承诺。如果承诺中没有消费者与 grain,则该 mart 仍不能视为 gold 数据产品。

常见错误

models/marts/ 中的任何一张表都叫作 gold 层。Gold 不是一个目录,而是通过对消费者做出的、由规范、契约和校验支撑的承诺。

检验问题

  1. 为什么 grain 是公开契约的一部分?
  2. 对于客户维度的 mart 需要哪些测试?
  3. nullable 字段何时仍可能构成破坏性变更?
我的笔记
0 / 10000

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

课程菜单

课程

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