文章
数仓建模落地实施流程方案(增强版)
适用对象:数据开发、数仓工程师、数据产品经理
技术栈:Doris + DolphinScheduler + CDC 实时入仓(10s Checkpoint)
约束条件:
- 无历史分区,只维护当前最新全量
- 每小时调度,串行执行(内存有限)
- 所有查询/导出必须走 ADS 层
- Doris 支持 Array,但 ADS 层必须拍平
🧭 总体流程图(5大阶段)
[阶段1] 准备工作(建模前必做)
↓
[阶段2] DWD层建模(7步法)
↓
[阶段3] DWS/DWT层构建(按需聚合 + 画像 + 演进支持)
↓
[阶段4] ADS层开发(一个需求一张表)
↓
[阶段5] 上线 & 监控 & 治理(含变更管理)
📌 阶段1:准备工作(建模前必做)
✅ 输入
- 业务需求文档(如“销售要导出高潜力企业”)
- ODS 表清单(如
ods_crm_company_full
,90字段) - 数据字典(源系统字段含义)
- Doris 集群信息(128G/32核)
✅ 输出
- 《业务域划分清单》
- 《ODS字段清单.xlsx》
- 《团队建模规范.md》
🛠 操作步骤
- 拉通业务方:明确 3 个核心分析主题(例:企业资质评估、客户触达、资源匹配)
- 划分业务域(模板见下)
- 整理 ODS 字段:导出所有字段名、类型、示例值、业务含义
- 制定命名规范(直接套用)
层级 | 命名规则 | 示例 |
---|---|---|
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 |
📝 交付物模板
# 业务域划分清单
## 1. 企业资质评估域
- 包含:企业基础、专利、软著
- 不包含:联系人、联系方式
## 2. 客户触达域
- 包含:联系人、联系方式、来源、标签
- 不包含:企业资质字段
## 3. 画像与标签域
- 包含:已领取、高潜力、客户等级
- 由 DWD/DWS 推导,不来自 ODS
⚠ 避坑指南
- ❌ 不要跳过业务对齐 → 否则建完没人用
- ❌ 不要试图“一个表打天下” → 按域拆分
- ✅ 新增:评估字段是否含敏感信息(如身份证、手机号),提前规划脱敏策略(删除或 hash)
🧱 阶段2:DWD层建模(7步法)
目标:从 ODS 90字段 → 输出 5张干净、扁平、退化维度的 DWD 表
🔹 第1步:字段筛选(90 → 50)
- 操作:用四象限法 + 业务确认
- 交付物:《DWD字段筛选清单.xlsx》(业务签字确认)
🔹 第2步:清洗 & 标准化
- 操作:逐字段制定规则(含敏感字段脱敏)
- 交付物:《清洗规则表.xlsx》 + 维度表(如
dim_province
)
🔹 第3步:维度退化(只退化高频稳定维度)
- ✅ 退化:
province_code → province_name
- ❌ 不退化:评分、状态(易变)
🔹 第4步:设计 DWD 表(扁平化 + Array 存 ID)
- 推荐 5 张表(按业务域拆分)
- ✅ Array 存 ID(如
['1','3']
),不存 name! - ✅ 预计算
is_valid = ARRAY_CONTAINS(tag_codes, 'valid')
🔹 第5步:编写 ETL(任务合并!)
- 目标:200+ 任务 → 5 个核心任务
- 原则:一个任务写多张相关表,避免重复 JOIN
🔹 第6步:测试用例(必须覆盖)
- 信用代码校验、标签计算、退化维度等
🔹 第7步:文档 & 元数据
- 字段级血缘(来源、口径、负责人)
- 表级文档(更新频率、下游依赖)
💡 新增评估项:预估数据量 & 资源消耗(避免 GROUP BY 爆内存)
📊 阶段3:DWS & DWT 层构建
DWS 层(轻度聚合)
- 只做必要聚合:总数、覆盖率、最大值
- ETL:直接 SELECT DWD 预计算字段,无 JOIN
- 禁止:多维 GROUP BY、复杂逻辑
DWT 层(画像宽表)
- 基础画像:
is_claimed
,company_grade
(来自 DWD) - 增强画像(演进支持):
- 若需将 DWS 聚合结果作为新特征(如
province_claim_rate
) - 必须创建新表:
dwt_company_profile_enhanced
- 禁止修改原 DWT 表
- 若需将 DWS 聚合结果作为新特征(如
- ETL:JOIN DWD + DWS,主键关联,无 GROUP BY
🔄 演进型依赖规范(新增)
允许:DWD → DWT_v1 → DWS → DWT_v2(enhanced)
禁止:DWS ← DWT_v2
(循环依赖)
要求:所有跨层依赖需在元数据中显式记录
📈 阶段4:ADS 层开发(唯一出口!)
原则
- 一个需求 = 一张 ADS 表
- 必须拍平 Array、格式化字段
- 禁止直接查 DWD/DWS/DWT
示例:销售企业清单
CREATE TABLE ads_sales_company_list (
company_name STRING,
industry_name STRING,
total_patent_count BIGINT,
company_grade STRING, -- 'A类客户'
province_claim_rate DECIMAL(5,2), -- 群体特征
export_time DATETIME
);
INSERT INTO ads_sales_company_list
SELECT
dwd.company_name,
dwd.industry_name,
dws.total_patent_count,
CASE WHEN dwt.customer_value_score > 90 THEN 'A类客户' END,
dwt_enhanced.province_claim_rate,
NOW()
FROM dwd_company_base_full dwd
JOIN dws_company_summary dws ON ...
JOIN dwt_company_profile dwt ON ...
LEFT JOIN dwt_company_profile_enhanced dwt_enhanced ON ...;
✅ 必做
source_codes ARRAY
→ARRAY_TO_STRING
is_valid=1
→'有效'
- 添加
export_time
🚀 阶段5:上线 & 监控 & 治理
上线 Checklist(增强版)
- 表结构创建
- ETL 任务配置(DolphinScheduler)
- 测试数据验证
- 文档归档(含依赖说明)
- 新增:变更影响评估(如有模型修改)
- 通知下游
监控指标
指标 | 阈值 | 告警方式 |
---|---|---|
数据量波动 | > ±30% | 企业微信 |
空值率 | > 5% | 邮件 |
任务耗时 | > 20分钟 | 短信 |
主键重复率 | > 0% | 企业微信(新增) |
🔄 变更管理流程(新增)
当业务需求变更需修改模型时:
- 影响评估:哪些 DWS/DWT/ADS 会受影响?
- 方案设计:是否需创建增强表?是否破坏依赖?
- 业务确认:新旧逻辑切换时间点
- 灰度上线:先跑新表,验证无误后再切 ADS
- 回滚预案:保留旧任务 7 天,支持快速回退
✅ 总结:这套方案让新人也能建好仓
- 有流程:5阶段、7步法,步步清晰
- 有模板:命名、建表、ETL、测试,直接套用
- 有避坑:Array 存 ID、ADS 拍平、任务合并
- 有治理:监控、文档、权限、变更管理
- 有演进:支持从个体到群体的特征衍生,结构可控
💡 记住口诀(增强版):
DWD建模要扁平,Array存ID别存名;
DWS聚合要轻量,DWT画像要稳定;
基础画像保稳定,群体特征另建表;
依赖链路要单向,演进不乱靠分层;
ADS出口唯一门,新人照做不出错!