从 DWD 到 DWS / ADS,一行发生了什么变化?
沿着 DWD → DWS → ADS 的快照切换,观察账户明细如何收敛为存款余额指标。
从 DWD 到 DWS / ADS,一行发生了什么变化?
同一批余额经过标准化、主题聚合和指标筛选后,行数会变化。每次变化都要重新说清楚:现在的一行代表哪一组业务事实。
聚合不是把数字简单相加;它同时把明细的行含义改成了业务分组。
聚合后的数据粒度
GROUP BY 保留的字段共同决定输出的一行代表什么。DWS 的一行不再代表某个账户,而代表一个快照日和一组指标维度。
DWD 还保留哪些事实?
DWD 的 4 行分别对应 A001、A002、A003、A004 在 2026-09-30 的账户余额。即使 A003 缺少客户关联、A004 缺少产品关联,它们仍然是已经发生的余额快照,不能在聚合前凭空消失。
这一步承接第 02 章的判断:数据粒度要能说清楚;这里关注的是加工后的一行含义如何变化,不再重新讲建模理论。
- DWD:一行 = 一个账户 × 一个快照日。
- DWS:一行 = 一个快照日 × 机构 × 客户口径 × 产品 × 币种。
- ADS:一行 = 一张存款余额指标卡 × 一个快照日。
切换一层,重新读一行
在 ODS、DWD、DWS、ADS 之间切换,查看当前层的行数、金额字段和一行代表什么。目标指标会在 ADS 收敛为 300,000。
DWS 不是“把所有余额加成一行”
DWS 保留指标复用需要的分组字段。A001 和 A002 都属于杭州分行、小微、定期、CNY,所以它们在 DWS 合并成 300,000;A003 的客户口径为空,A004 的产品类型为空,分别落在另外的分组里。
到了 ADS,系统只取指标卡指定的那一组。行数减少不是数据丢失,而是每一层承担的查询问题不同。
亲手写一遍这条聚合 SQL
在浏览器里用真实 SQL 引擎(DuckDB)复现 DWD → DWS 聚合:改 WHERE 看统计范围,改 GROUP BY 看一行代表什么,并用确定性参考快照对照结果。默认折叠,不打开就不加载 SQL 引擎。