首页/数据/数仓建模速查/案例:电商域四层落地示例
分层与规范64 条

案例:电商域四层落地示例

电商交易链路分层实例:ODS 贴源订单/退款、DWD 明细清洗去重、DWS 门店与商品日汇总、ADS 看板结果;展示每层物化对象与产出时间。

数仓建模速查数据更新于 2026-10-13

电商链路分层实例

以电商交易域为例:ODS 贴源订单与退款数据,保留原始字段与编码;DWD 做去重、状态规范化与维表关联,形成订单明细;DWS 按门店与商品两个维度做日汇总;ADS 输出看板结果,供业务在上班前查看。每层的产出时间按「层-小时」排布并留出缓冲,补数严格按 ODS 到 ADS 的顺序逐层重跑。这条链路的价值在于把口径统一固化在中间层,看板、财务与运营取的是同一份数字。

基本信息

链路对象ods_order、ods_refund 到 dwd_trade_order_di,再到 dws_trade_store_day、dws_item_sku_day,最后到 ads_sale_board_day
产出时间ODS 01:30、DWD 02:30、DWS 04:00、ADS 05:30
核心口径仅统计已支付订单,退款单独处理,不在明细层抵消
补数顺序严格按 ODS 到 DWD 到 DWS 到 ADS 逐层重跑
排查顺序看板异常先检查 DWS 输入,再向上游逐层追查
缓冲要求层间留出足够窗口,上游延迟时下游等待

典型使用场景

  • 早间看板:把核心 ADS 排在上班前产出,业务到岗即可看到前一日结果
  • 商品维度分析:dws_item_sku_day 支撑商品与 SKU 的日销售分析
  • 退款对账:ods_refund 与 DWD 订单状态比对,核对退款笔数与金额
  • 补数重跑:按层顺序逐层执行,避免用未更新的上游算出错误下游
  • 链路优化:定位最耗时环节(通常是明细去重与维表关联)再针对性调优

DWS 汇总任务示例

DWS 汇总任务示例
-- DWS 依赖 DWD,仅计算当日分区
INSERT OVERWRITE TABLE dws_trade_store_day PARTITION (dt='2026-10-12')
SELECT store_id,
       count(DISTINCT order_id) AS order_cnt,  -- 订单数按去重计数
       sum(pay_amt) AS pay_amt                 -- 支付金额求和
FROM dwd_trade_order_di
WHERE dt = '2026-10-12'
  AND order_status = 'PAID'                    -- 口径:仅已支付订单
GROUP BY store_id;

-- 产出后立即校验:行数与金额落在预期区间
SELECT count(*) AS rows_cnt, sum(pay_amt) AS amt
FROM dws_trade_store_day WHERE dt = '2026-10-12';

链路分层与产出时间

层对象产出时间职责
ODSods_order、ods_refund01:30贴源落地,保留原始字段
DWDdwd_trade_order_di02:30去重、状态规范化、维表关联
DWSdws_trade_store_day、dws_item_sku_day04:00门店与商品维度日汇总
ADSads_sale_board_day05:30看板结果,直接对接业务
产出时间按层排布时要留出缓冲:上游延迟时下游应当等待,而不是按计划时间抢跑,否则会把空数据或半成品写进下游分区。
补数不能跳层。直接重跑 ADS 会用到尚未更新的 DWS 数据,任务成功、数字看着正常,实际口径仍旧,业务侧很难察觉。

易错点

  • 各层产出时间没有排布:看板在上班时间还刷不出来,业务先看到的是昨天的数字
  • 补数跳层执行:下游读取过期的中间层数据,结果看似正常却与事实不符
  • 退款口径在各看板里处理不同(有的全量扣减有的不回冲):净销售额在不同报表里对不上
  • 维表关联用内连接:维表缺数据时事实行被丢弃,指标偏小且不报错
  • 链路缺乏缓冲与等待机制:任一层延迟就整体推迟,缺少可观测的等待与告警手段

数据来源与参考

  • 阿里《大数据之路:阿里巴巴大数据实践》
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌