--- 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/DIM;DWS←DWD/DWM/DIM/DWS;DIM←ODS/MySQL | — | - **MID 不能依赖另一个 MID**(已用户确认)。 - 数仓设计参考里的依赖关系仅作学习背景,不是当前 Agent 规则的强约束来源。 ## 相关 - SQL 层面的安全和格式规范见 [sql-rules.md](sql-rules.md)。 - 上述规则的冲突裁决和历史确认记录见 [decisions.md](decisions.md)。