Files
wiki/wsf/bd/warehouse.md
T
2026-08-19 10:12:27 +08:00

4.1 KiB
Raw Blame History

title, source_status
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_*_incdwd_*_inc_ddwd_* 下游全量非增量 DWD 表 ods_*_incdwd_*_inc_d
新套增量源 ods_*_inc_vods_*_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
  • 上述规则的冲突裁决和历史确认记录见 decisions.md