数仓实战第六篇|数仓全层级数据流通方案总结:ODS→DWD→DWS→ADS 怎么流才最稳?

0 阅读8分钟

在前面数仓篇系列文章中,我们已经完整拆解了数仓分层架构、ODS 层设计、DW 层(DWD+DWS)数据清洗与整合逻辑、DIM 维度层开发逻辑ADS面向应用开发等。当分层建好后,数据如何在各层级之间高效、稳定、可追溯地流通,就成了数仓能否长期稳健运行的关键。

本篇作为数仓层级结构的总结篇,我将结合 10 年汽车流通与航空制造实战经验,系统讲透:层级间数据流通逻辑、三种落地方案、选型权衡、数据血缘与问题排查,帮你搭建一套 "进得来、洗得净、算得准、流得顺" 的企业级数据流通体系。

1.jpeg 一、整体说明:层级数据流通 vs 数据源抽取集成 核心异同

数仓的数据流通分为两大阶段:从业务系统到 ODS,以及从 ODS 到 ADS 内部流转。二者目标一致,但职责、实现方式完全不同。

相同点

  • 都要保证数据一致性:同一份数据,源头与结果口径统一、不重复、不丢失。
  • 都要保证计算准确性:逻辑唯一、结果唯一、统计口径唯一。
  • 都需要可监控、可重试、可回溯。

不同点

1. 数据源→ODS:以搬运为主只做同步接入,不做加工清洗保证数据原样落地支持全量 / 增量 / CDC依赖外部 ETL 工具案例:汽车销售系统订单数据同步到 ODS,只落地不做任何修改。

2. ODS→DWD→DWS→ADS:以加工为主以清洗、标准化、汇总、指标计算为主不修改源头数据依赖数仓自身计算能力案例:ODS 原始订单→DWD 清洗→DWS 宽表整合→ADS 指标输出。

一句话总结

前端抽取是 "把原料搬进仓库" ,内部流通是"在仓库里把原料做成成品"

2.jpeg

二、整体方案:数仓层级数据流通 三种主流落地路径

企业建设数仓,内部层级流通不一定要全程使用 ETL 工具。结合架构简洁性、性能、维护成本与实时性要求,行业内普遍采用三种方案。

方案总原则

  • 业务系统 → ODS:必须用 ETL/ELT 工具同步
  • ODS → DWD → DWS → ADS:可不用外部 ETL,直接用数仓能力实现

三大方案

  1. 数仓内生式流通(无外部 ETL)
  2. ETL 工具调度式流通
  3. 实时计算流式流通

三、方案方法详解(含汽车流通行业实战案例)

方法 1:数仓内处理 —— 视图 + 存储过程(最简洁)

核心思路ODS 之后,全靠数仓自身计算能力完成层级转换,不依赖任何外部 ETL 工具。用视图做清洗、标准化、映射;用存储过程做逻辑封装、定时执行、落物理表;通过定时任务触发执行。

汽车流通行业案例:保险分析主题

  • ODS 层:原始保单、客户、车辆数据
  • DWD 层:基于 ODS 创建视图,做清洗、脱敏、去重、标准化
  • DWS 层:存储过程读取视图数据,聚合落表成宽表
  • ADS 层:存储过程计算输出指标表

优点与缺点

  • 优点:架构极简、开发快、无工具依赖
  • 缺点:数据量大后性能下降,复杂逻辑维护成本升高

特别提示:中间表(TMP)机制在实际生产中,如果存储过程过于复杂,直接写物理表一旦失败很难恢复。建议引入TMP临时表机制:先计算写入临时表,校验无误后再插入正式表。这样既能保证数据的一致性(要么全成功,要么全失败),又能方便排查中间逻辑。

方法 2:ETL 工具调度 —— Kettle / DataX(大数据一般使用Hadoop生态工具)

核心思路每层之间都用 ETL 工具构建任务,专门负责数据转换与落表。抽取→转换→加载全由工具托管,支持定时调度、依赖配置、重试机制,数据血缘清晰、便于审计管理。

适用场景数据标准高、流程严格、需要审计的大型企业、多系统复杂业务。

优点与缺点

  • 优点:稳定、可靠、易运维
  • 缺点:工具多、任务多、维护成本高

方法 3:实时同步 —— Flink + Kafka + 实时数仓(最高效)

核心思路全链路实时:业务库→Kafka→Flink→DWD→DWS→ADS。也可使用物化视图(Doris/StarRocks)实现自动同步计算,无需手动调度。

适用场景实时业绩看板、实时库存、实时风控、汽车流通实时销量、航空制造设备实时监控。

优点与缺点

  • 优点:延迟低、性能强、架构现代化
  • 缺点:技术门槛高、投入成本更高

关于实时方案的补充虽然方案 3(Flink+Kafka)很诱人,但在汽车 / 制造行业,"实时" 往往伴随着 "高成本"。建议采用 "Lambda 架构" 的变体:核心监控指标(如产量、实时库存)走实时链路;而复杂的财务对账、多维分析,依然建议走 T+1 的离线链路(方案 1 或 2)。不要为了实时而实时,业务价值才是核心。

3.jpeg 四、关键问题说明(数据治理必看)

  1. 必须维护完整的数据血缘

无论用哪种方案,血缘必须可追溯,否则数据异常无法定位。

  • 视图 + 存储过程:在存储过程中植入日志表,记录执行时间、行数、状态、错误信息
  • ETL 工具:使用工具自带血缘与日志
  • 实时计算:使用链路追踪、状态记录、消费位点管理

数据从哪来、经过什么逻辑、到哪去、何时执行、影响多少行,必须全部可查。

  1. 方案选型没有最优,只有最合适
  • 追求简洁、低成本、快迭代:选方案 1(视图 + 存储过程)
  • 追求标准、稳定、可审计:选方案 2(ETL 工具)
  • 追求实时性、高性能、未来架构:选方案 3(实时计算)

没有完美架构,只有权衡架构。

4.jpeg 3. 避坑指南:DWD 层的 "红线"

在层级流通中,最容易犯的错误是在 DWD 层做聚合。

坑 1:跨层引用

  • 错误做法:ADS 层直接跳过 DWS 去读 DWD,甚至读 ODS
  • 后果:源表一变,报表全挂
  • 正确做法:严格遵守分层架构,禁止跨层引用

坑 2:DWD 层过度聚合

  • 错误做法:在 DWD 层就把订单数据按天汇总成 "日销售表"
  • 后果:下游想分析 "某小时的销售波峰" 或者 "单笔订单详情" 时,发现数据已经丢了,只能重跑 ODS
  • 正确做法:DWD 层必须保持最细粒度(明细数据),聚合计算请留给 DWS 层。记住:明细是资产,聚合是消耗品

坑 3:命名不规范

  • 错误做法:表名不带层级前缀
  • 后果:血缘分析会是一场灾难
  • 正确做法:表名必须带层级前缀(如ods_、dwd_、dws_、ads_)

DWD 层核心职责细化

  • 统一主键:确保下游关联时不会因为 ID 格式不同(如字符串与数字)而出错
  • 维度退化:例如将 "商品类目名称" 直接冗余在订单事实表中,避免下游 DWS 层频繁关联维度表,提升性能
  •  

五、整体总结及思考

数据在数仓各层级之间的流通,本质是数据价值不断提炼的过程:

  • ODS 解决 "有数据"
  • DWD 解决 "数据干净"
  • DWS 解决 "数据能用"
  • ADS 解决 "数据好用"

而流通方案的选择,直接决定数仓的性能高低、维护成本、稳定性与可扩展性。

真正优秀的数仓架构,不是用最炫的技术,而是用最合适的方式,把数据稳稳地流起来。

架构选择建议总结

初创期选 1,成长期选 2,成熟期 / 强实时选 3

5.jpeg 下期预告

数据仓库建设发展的不同时期对比及思考:

  1. 离线计算时代(传统数仓或)
  2. 实时计算时代(实时数仓)
  3. 基于 AI 的湖仓一体时代(未来趋势)

我将从架构、成本、性能、维护、场景五个维度,带你看清数仓 30 年演进路线,把握未来方向。


💬 评论区互动

  1. 你们公司数仓层级流通用的是哪种方案?[ ] 视图 + 存储过程[ ] ETL 工具(Kettle/DataX)[ ] 实时数仓(Flink/Kafka/Doris)
  2. 数据血缘你们是怎么管理的?遇到过哪些坑?
  3. 下期「离线 / 实时 / 湖仓一体」对比,你最想了解哪部分?

欢迎在评论区留下你的行业、架构与问题,我会逐一回复~


干货福利 ・持续更新

结合多年制造业、汽车、航空制造实战经验,后续我会持续更新数据集成、数仓搭建、企业级 BI 落地、数据治理、CDGA/CDGP/CDP等 认证备考、AI应用落地等体系化干货,全部来自一线落地实操。

想看全套资料、系列教程的朋友,可以关注微信公众号「数治研习社」

数治研习社.jpg 关注我,持续更新汽车 / 航空制造数据类实战干货

原创标识

✅内容基于本人实际经验原创创作,包括整体框架、思路、知识点、案例均来自本人;AI 仅负责辅助排版、语句润色与格式优化,不参与核心内容创作。

📌首发平台:微信公众号「数治研习社」

🚫未经授权,禁止转载