Files

68 lines
4.1 KiB
Markdown
Raw Permalink Normal View History

2026-08-19 10:12:27 +08:00
---
title: 数仓架构与选表规则
source_status: warehouse_standard_learning_reference(分层定义)+ user_confirmed_agent_rule(选表/分区/依赖规则)
---
# 数仓架构与选表规则
范围:`wanshifu_dw` 库。`wanshifu_enterprise` 库被明确排除——不查询、不作为血缘起点、不作为 SQL 来源。
## 1. 分层定义
| 层 | 作用 | 设计要点 |
|---|---|---|
| ODS | 源对齐的接入数据,保留源系统粒度和字段 | 新套增量:`ods_*_inc_v`(每日变化)+ `ods_*_v`(合并后全量最新);新套全量:`ods_*_d_v`(按 `etl_date` 分区的每日全量快照) |
| DWD | 清洗整合后的原子事实或宽表属性 | 保持原子粒度、不做聚合、保留业务时间、补齐统一维度 |
| DWS | 可复用的主题级汇总和通用基础指标 | 从明细/公共层聚合;存基础指标,不存场景化衍生指标 |
| DIM | 可复用的业务维度和代码映射 | — |
| ADS | 场景化的数据服务、报表、抽数 | — |
| MID | 供多个分析师 ADS 输出共享的中间指标结果 | MID 不能依赖 MID(见下文层间依赖) |
业务域缩写:`mst`=master(师傅)、`usr`=user(用户)、`etp`=enterprise(企业)、`order`=order(订单)、`bas`=basic(基础)、`fmis`=finance(财务)、`kf`=customer_service(客服)。
> 分层定义仅作数仓设计理解,用于对候选表做优先级排序,不能替代 DDL 和表级已验证知识;与分析师规则冲突时以分析师规则为准。
## 2. 选表规则
**总体优先级:**满足所需字段和业务粒度 > 数据质量和成熟度已验证 > (临时查询)优先用完整新套合并/全量 ODS,排在新旧套 DWD 之前 > (调度脚本)拒绝 ODS,用允许的公共层 > 优先新套公共层。
| 场景 | 典型链路 | 分析师应选 | 避免 |
|---|---|---|---|
| 旧套增量源 | `ods_*_inc``dwd_*_inc_d``dwd_*` | 下游全量非增量 DWD 表 | `ods_*_inc``dwd_*_inc_d` |
| 新套增量源 | `ods_*_inc_v``ods_*_v` | 直接用合并后的全量 `ods_*_v`(临时分析不必再走到 DWD | `ods_*_inc_v` |
| 新套全量快照 | `ods_*_d_v` | 直接用该 ODS 的最新快照分区(通常 T-1) | — |
- 新套表缺所需字段时,才回退选用完整的旧套表。
- 同优先级出现多个同样合适的 `_v` 候选时,必须人工确认,不能自动选一个。
- 表名后缀优先级只是候选启发式,不是最终选表依据——最终仍要核对字段和已验证的表级知识。
## 3. 分区语义
| 语义 | 典型表 | 典型分区 | 查询规则 |
|---|---|---|---|
| 每日全量快照 | `ods_*_d_v` | `etl_date` | 取最新分区,通常 `etl_date = T-1`;一个分区是当天的完整快照 |
| 业务时间分区 | 如下单日期、活跃日期 | 业务日期 | 按需求要求的业务时间范围过滤,不能只取 T-1 当全量快照;需求未指定范围时必须询问用户,**不得默认查近三年** |
| 历史遗留分桶 | 部分数仓模型 | `20171231` | 2017 年及以前的记录可能被塞进这一个分区;查询范围涉及 2017 年及以前时,先查表级模型再写 SQL |
**强制规则:**
- 每张物理分区表都要过滤真实的分区字段。
- 非分区表允许全表扫描,不能为它虚构分区或时间条件。
- 业务时间过滤和分区过滤是两件事,要分别落实,不能互相替代。
## 4. 层间依赖边界
| 场景 | 允许的来源层 | 禁止的来源层 |
|---|---|---|
| 分析师临时查询 | DWD、DWS、DWM、DIM、ODS(兜底可用) | — |
| 分析师调度脚本(ADS/MID | DWD、DWS、DWM、DIM、MID | ODS、ADS、其他脚本的临时表(无例外) |
| 数仓设计参考(非当前 Skill 强约束) | DWD←ODS/DIMDWS←DWD/DWM/DIM/DWSDIM←ODS/MySQL | — |
- **MID 不能依赖另一个 MID**(已用户确认)。
- 数仓设计参考里的依赖关系仅作学习背景,不是当前 Agent 规则的强约束来源。
## 相关
- SQL 层面的安全和格式规范见 [sql-rules.md](sql-rules.md)。
- 上述规则的冲突裁决和历史确认记录见 [decisions.md](decisions.md)。