大数据, 精选文章

数仓建模落地实施流程方案(增强版)

适用对象:数据开发、数仓工程师、数据产品经理
技术栈: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》

🛠 操作步骤

  1. 拉通业务方:明确 3 个核心分析主题(例:企业资质评估、客户触达、资源匹配)
  2. 划分业务域(模板见下)
  3. 整理 ODS 字段:导出所有字段名、类型、示例值、业务含义
  4. 制定命名规范(直接套用)
层级命名规则示例
ODSrealtime_ods.ods_<库别名>_<表名>_fullods_crm_company_full
DWDrealtime_dwd.dwd_<业务域>_<实体>_fulldwd_company_base_full
DWSrealtime_dws.dws_<主题>_<维度>dws_company_summary
DWTrealtime_dwt.dwt_<主体>_profiledwt_company_profile
DWT(增强)..._profile_enhanceddwt_company_profile_enhanced
ADSrealtime_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 表
  • 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 ARRAYARRAY_TO_STRING
  • is_valid=1'有效'
  • 添加 export_time

🚀 阶段5:上线 & 监控 & 治理

上线 Checklist(增强版)

  • 表结构创建
  • ETL 任务配置(DolphinScheduler)
  • 测试数据验证
  • 文档归档(含依赖说明)
  • 新增:变更影响评估(如有模型修改)
  • 通知下游

监控指标

指标阈值告警方式
数据量波动> ±30%企业微信
空值率> 5%邮件
任务耗时> 20分钟短信
主键重复率> 0%企业微信(新增)

🔄 变更管理流程(新增)

当业务需求变更需修改模型时:

  1. 影响评估:哪些 DWS/DWT/ADS 会受影响?
  2. 方案设计:是否需创建增强表?是否破坏依赖?
  3. 业务确认:新旧逻辑切换时间点
  4. 灰度上线:先跑新表,验证无误后再切 ADS
  5. 回滚预案:保留旧任务 7 天,支持快速回退

✅ 总结:这套方案让新人也能建好仓

  • 有流程:5阶段、7步法,步步清晰
  • 有模板:命名、建表、ETL、测试,直接套用
  • 有避坑:Array 存 ID、ADS 拍平、任务合并
  • 有治理:监控、文档、权限、变更管理
  • 有演进:支持从个体到群体的特征衍生,结构可控

💡 记住口诀(增强版)
DWD建模要扁平,Array存ID别存名;
DWS聚合要轻量,DWT画像要稳定;
基础画像保稳定,群体特征另建表;
依赖链路要单向,演进不乱靠分层;
ADS出口唯一门,新人照做不出错!