文章
团队建模规范
适用范围:所有数据开发、数仓工程师、数据产品经理
核心原则:上游稳定,下游灵活;分层解耦,按需演进
一、整体架构与分层职责
层级 | 职责 | 禁止行为 |
---|---|---|
ODS | 贴源层,保留原始结构,不做清洗 | 不得删除字段、不得做业务逻辑处理 |
DWD | 面向核心实体的原子明细层,清洗、标准化、退化维度、Array存ID | 不得聚合、不得因ADS需求变更而修改 |
DWS | 轻度聚合层,提供通用指标(总数、覆盖率、最大值等) | 不得多维GROUP BY、不得存明细、不得被DWT反向依赖 |
DWT | 主题画像层,存放稳定个体/群体特征 | 不得放临时标签、不得直接修改原表(需用_enhanced) |
ADS | 唯一出口层,按需宽表、拍平Array、格式化字段 | 严禁直连ODS/DWD/DWS/DWT,必须通过ADS查询或导出 |
📌 依赖方向:
DWD → DWS / DWT
DWS → DWT_enhanced
DWD/DWS/DWT → ADS
禁止循环依赖!
二、命名规范
层级 | 规则 | 示例 |
---|---|---|
ODS | realtime_ods.ods_<库别名>_<表名>_full | ods_crm_company_full |
DWD | realtime_dwd.dwd_<业务域>_<实体>_full | dwd_company_base_full |
DWS | realtime_dws.dws_<主题>_<维度> | dws_company_summary |
DWT | realtime_dwt.dwt_<主体>_profile | dwt_company_profile |
DWT(增强) | ..._profile_enhanced | dwt_company_profile_enhanced |
ADS | realtime_ads.ads_<场景>_<主体>_<用途> | ads_sales_company_list |
三、字段设计规范
ID | xxx_id | company_id |
名称 | xxx_name | company_name |
编码 | xxx_code | province_code |
数量 | xxx_count | patent_count |
比率 | xxx_rate | contact_valid_rate |
时间 | xxx_time | etl_time |
标志位 | is_xxx | is_valid |
来源/标签 | xxx_codes ARRAY<VARCHAR> | source_codes ,tag_codes |
⚠️ Array 存 ID,不存 name!
✅ 预计算常用标志位:is_valid = ARRAY_CONTAINS(tag_codes, 'valid')
四、码值管理规范(必须遵守)
1. 禁止直接使用业务系统 UUID 或原始码值
- UUID 可读性差、性能差、无法跨系统统一
2. 必须使用数仓标准码值体系
- 维度表:
realtime_dim.dim_status
(含status_id
,status_code
,status_name
) - 映射表:
realtime_dim.dim_code_mapping
(桥接业务系统 → 数仓码值)
3. DWD 层必须完成码值转换
-- 正确示例
SELECT
map.target_code_id AS status_id,
map.target_code_value AS status_code
FROM ods_table o
JOIN dim_code_mapping map
ON map.source_system = 'crm'
AND map.source_code_type = 'contact_status'
AND map.source_code_value = o.status_uuid;
4. ADS 层可直接使用中文名
SELECT s.status_name
FROM dwd_table d
JOIN dim_status s ON d.status_id = s.status_id;
五、数据安全与合规
敏感字段类型 | 处理方式 | 说明 |
---|---|---|
身份证号 | 删除 或 SHA256 | 除非业务强依赖,否则建议删除 |
手机号 | 脱敏(如 138****1234) | 在 DWD 层完成 |
邮箱 | 脱敏(如 user@***.com) | 保留前缀,隐藏域名 |
其他 PII | 评估后脱敏或删除 | 遵循《个人信息保护法》《GDPR》 |
✅ 所有脱敏规则必须在《清洗规则表.xlsx》中明确定义
六、演进型建模机制
场景:需新增群体特征(如“所在省高潜企业密度”)
正确路径:
- 保持基础 DWT 不变:
dwt_company_profile
- 新增 DWS 聚合:
dws_province_high_potential_summary
- 创建增强 DWT:
dwt_company_profile_enhanced
- ADS 引用新特征:
ads_sales_company_list
禁止行为:
- 直接修改原 DWT 表
- 让 DWS 依赖 DWT_enhanced(造成循环)
- 未评估影响就上线变更
📎 变更必须填写《模型变更影响评估表.xlsx》,走灰度上线流程
七、ADS 出口控制(红线!)
- 所有业务查询、报表、导出、API 必须通过 ADS 层
- 禁止任何应用直连 DWD/DWS/DWT/ODS
- ADS 表必须:
- 拍平 Array:
ARRAY_TO_STRING(source_codes, ',')
- 格式化字段:
is_valid=1 → '有效'
- 宽表设计:JOIN 多层数据,一次查询满足需求
- 拍平 Array:
八、配套工具与交付物
阶段 | 必须产出 |
---|---|
建模前 | 《业务域划分清单》《ODS字段清单.xlsx》 |
DWD 建模 | 《DWD字段筛选四象限模板.xlsx》《清洗规则表.xlsx》《Doris建表语句.sql》 |
上线前 | 《元数据文档》《测试用例》《依赖关系图》 |
变更时 | 《模型变更影响评估表.xlsx》《灰度上线计划》 |
九、口诀(新人必背)
DWD建模要扁平,Array存ID别存名;
DWS聚合要轻量,DWT画像要稳定;
基础画像保稳定,群体特征另建表;
依赖链路要单向,演进不乱靠分层;
ADS出口唯一门,新人照做不出错!
📌 本规范为团队强制标准,所有数仓模型开发必须遵守。
违反规范将导致模型无法上线、数据口径混乱、维护成本飙升。