在前面数仓篇系列文章中,我们已经完整拆解了数仓分层架构、ODS 层设计、DW 层(DWD+DWS)数据清洗与整合逻辑、DIM 维度层开发逻辑ADS面向应用开发等。当分层建好后,数据如何在各层级之间高效、稳定、可追溯地流通,就成了数仓能否长期稳健运行的关键。
本篇作为数仓层级结构的总结篇,我将结合 10 年汽车流通与航空制造实战经验,系统讲透:层级间数据流通逻辑、三种落地方案、选型权衡、数据血缘与问题排查,帮你搭建一套 "进得来、洗得净、算得准、流得顺" 的企业级数据流通体系。
一、整体说明:层级数据流通 vs 数据源抽取集成 核心异同
数仓的数据流通分为两大阶段:从业务系统到 ODS,以及从 ODS 到 ADS 内部流转。二者目标一致,但职责、实现方式完全不同。
相同点
- 都要保证数据一致性:同一份数据,源头与结果口径统一、不重复、不丢失。
- 都要保证计算准确性:逻辑唯一、结果唯一、统计口径唯一。
- 都需要可监控、可重试、可回溯。
不同点
1. 数据源→ODS:以搬运为主只做同步接入,不做加工清洗保证数据原样落地支持全量 / 增量 / CDC依赖外部 ETL 工具案例:汽车销售系统订单数据同步到 ODS,只落地不做任何修改。
2. ODS→DWD→DWS→ADS:以加工为主以清洗、标准化、汇总、指标计算为主不修改源头数据依赖数仓自身计算能力案例:ODS 原始订单→DWD 清洗→DWS 宽表整合→ADS 指标输出。
一句话总结
前端抽取是 "把原料搬进仓库" ,内部流通是"在仓库里把原料做成成品"。
二、整体方案:数仓层级数据流通 三种主流落地路径
企业建设数仓,内部层级流通不一定要全程使用 ETL 工具。结合架构简洁性、性能、维护成本与实时性要求,行业内普遍采用三种方案。
方案总原则
- 业务系统 → ODS:必须用 ETL/ELT 工具同步
- ODS → DWD → DWS → ADS:可不用外部 ETL,直接用数仓能力实现
三大方案
- 数仓内生式流通(无外部 ETL)
- ETL 工具调度式流通
- 实时计算流式流通
三、方案方法详解(含汽车流通行业实战案例)
方法 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)。不要为了实时而实时,业务价值才是核心。
四、关键问题说明(数据治理必看)
- 必须维护完整的数据血缘
无论用哪种方案,血缘必须可追溯,否则数据异常无法定位。
- 视图 + 存储过程:在存储过程中植入日志表,记录执行时间、行数、状态、错误信息
- ETL 工具:使用工具自带血缘与日志
- 实时计算:使用链路追踪、状态记录、消费位点管理
数据从哪来、经过什么逻辑、到哪去、何时执行、影响多少行,必须全部可查。
- 方案选型没有最优,只有最合适
- 追求简洁、低成本、快迭代:选方案 1(视图 + 存储过程)
- 追求标准、稳定、可审计:选方案 2(ETL 工具)
- 追求实时性、高性能、未来架构:选方案 3(实时计算)
没有完美架构,只有权衡架构。
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
下期预告
数据仓库建设发展的不同时期对比及思考:
- 离线计算时代(传统数仓或)
- 实时计算时代(实时数仓)
- 基于 AI 的湖仓一体时代(未来趋势)
我将从架构、成本、性能、维护、场景五个维度,带你看清数仓 30 年演进路线,把握未来方向。
💬 评论区互动
- 你们公司数仓层级流通用的是哪种方案?[ ] 视图 + 存储过程[ ] ETL 工具(Kettle/DataX)[ ] 实时数仓(Flink/Kafka/Doris)
- 数据血缘你们是怎么管理的?遇到过哪些坑?
- 下期「离线 / 实时 / 湖仓一体」对比,你最想了解哪部分?
欢迎在评论区留下你的行业、架构与问题,我会逐一回复~
干货福利 ・持续更新
结合多年制造业、汽车、航空制造实战经验,后续我会持续更新数据集成、数仓搭建、企业级 BI 落地、数据治理、CDGA/CDGP/CDP等 认证备考、AI应用落地等体系化干货,全部来自一线落地实操。
想看全套资料、系列教程的朋友,可以关注微信公众号「数治研习社」
关注我,持续更新汽车 / 航空制造数据类实战干货
✅内容基于本人实际经验原创创作,包括整体框架、思路、知识点、案例均来自本人;AI 仅负责辅助排版、语句润色与格式优化,不参与核心内容创作。
📌首发平台:微信公众号「数治研习社」
🚫未经授权,禁止转载」