一张表到底应该检查什么?
从 Grain 出发,再检查字段是否有意义、对象关系是否成立。
一张表到底应该检查什么?
打开 AccountBalanceSnapshot,先别急着勾选“完整性”或“有效性”。如果一行代表的对象没有说清楚,规则也就没有落脚点。
这张表的一行到底代表什么?
Grain / 粒度
Grain 说明一行数据代表的业务单位。本例中,一行是一个 Account 在一个 snapshot_date 的余额状态。
先把一行读懂,再谈校验
AccountBalanceSnapshot 的一行不是一笔存入交易,也不是一个客户的全部历史余额。它表示某个账户在某个快照日的状态,身份由 Account × snapshot_date 组成;账户的 Customer、Product 和 Branch 关系决定了这条余额能按什么口径分析。
一旦这个含义明确,重复身份、关键字段缺失、非法 currency 和找不到 Branch 的记录就有了具体判断依据。
- 记录身份:同一个 Account × snapshot_date 不能重复。
- 关键字段:account_id、snapshot_date、balance 不能无意义缺失。
- 字段语义:currency 需要是已经登记的币种代码。
- 对象关系:branch_id 必须能在 Branch 中找到。
这条记录哪里不对?
切换四个确定性故障,观察同一条存款余额数据如何分别暴露身份、字段、语义和引用关系问题。
Grain 是第一锚点,但不是唯一来源
Grain 能告诉我们“重复什么算重复”,却不能单独告诉我们哪些 currency 合法,也不能代替 Branch 参考数据。规则还要来自字段定义、对象关系和数据集预期。
因此,质量检查不是把几种抽象维度排成清单,而是把业务含义落到可观察的行和字段上。
- 知道一行代表什么,才能判断记录身份。
- 知道字段表达什么,才能判断值是否有意义。
- 知道对象怎样关联,才能发现孤立引用。