阅读材料: 第19部分. 语义层、指标和exposures

模块「第19部分. 语义层、指标和exposures」中第 1 / 5 节课
您正在未登录状态下查看课程。 请登录,以保存进度并参加测试。

第 19 部分.语义层、指标与 exposures

当相同的指标开始在多个报表、应用或团队中被使用时,语义层就出现了。 在此之前,清晰的数据集市和验证事实已经足够。但如果 total_balance_rub、 活动中的同意状态或 risk_event_count 在下游消费链中反复出现, 它们的定义就需要集中管理。

什么是指标

指标不仅仅是一列数据。它包含名称、计算公式、粒度、过滤器、刷新频率、 所有者以及消费者列表。如果两份报表按不同规则计算「活跃客户」, 问题不在 BI 工具,而在于语义契约。

dbt semantic models

dbt 支持 semantic models 和 metrics,但在教学路线中我们不要求 启用完整的语义层。首先需要记录语义意图:

指标:active_consent_count
源数据集市:mart_open_api_consents
定义:`revoked_at is null` 的同意数量
粒度:`scope`
消费者:Open API 监控

之后可以决定是否需要 dbt 语义层,或者有文档化的数据集市就足够了。

Exposures

Exposure 用于展示谁在读取数据产品:仪表板、API、notebook、报表。 这对契约漂移很重要。如果 mart 有 exposure,破坏性变更必须 通知下游消费者。

Qwen 查询

阅读数据集市和 specs。
找出看起来像通用指标的字段。
为每个字段建议定义、粒度、所有者、消费者和验证事实。
未经确认不要创建 semantic models。

最小输出

创建一个语义注册表:

# 语义注册表

## total_balance_rub
定义:
粒度:
所有者:
消费者:
验证:

读者解读

引入语义层不是因为它在现代技术栈中流行,而是因为 没有它,可重复使用的指标会开始出现偏差。只要一个数据集市 只被一份报表使用,定义可以放在数据集市旁边。当同一字段 出现在多个团队中时,就出现了新的契约:active_consent_count 具体 意味着什么,谁拥有这个定义,指标的粒度是多少, 应用了哪些过滤器。

重要的是不要将语义层与花哨名称的目录混淆。指标不是

列的重命名。它是计算公式、上下文、约束和消费者。如果 一个团队通过 revoked_at 中的 null 来统计活动中的同意状态, 而另一个团队通过日期排除旧的同意状态,那么组织就有了 两个同名指标。问题出在 BI 之上,而是出在缺乏明确的语义契约。

在教学项目中,可以不启用完整的语义层。这是 有意识的限制。首先需要学会记录意图:字段、定义、 粒度、所有者、消费者、验证。只有在此之后,判断 Markdown 注册表是否足够,还是需要 dbt semantic model,才有意义。否则团队 会得到另一个没有共识含义的 YAML 层。

Exposures 添加了消费者边界。它们展示谁在读取数据集市: 仪表板、notebook、API、定期报表。这会影响破坏性变更。 如果 mart 没有消费者,变更看起来是局部的。如果 记录了 exposure,作者就能看到字段重命名或粒度更改会影响到谁。这样 语义层就成为 SDD 的一部分,而不是独立的术语集市。

实践

从数据集中市中选择一个指标并填写语义注册表。如果无法

指出所有者或消费者,不要添加 semantic model —— 首先明确 产品承诺。

常见错误

为了技术栈的完整性而添加语义层。如果没有多个消费者和 可重复使用的指标,该层会变成官僚流程。但如果消费者已经存在, 缺失它会造成漂移。

检查问题

  1. 指标与列有什么区别?
  2. 何时 exposure 会使变更成为破坏性的?
  3. 为什么在出现通用指标之前不应启用语义层?
我的笔记
0 / 10000

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

课程菜单

课程

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