数仓入门篇-数仓分层

简介: 本文详解数据仓库经典五层架构(ODS、DIM、DWD、DWS、ADS):ODS贴源同步,DIM统一维度,DWD清洗建模,DWS轻度聚合,ADS面向应用。通过全流程案例与设计原则,阐明分层如何提升复用性、可维护性与查询性能。(239字)

整体架构图解

直接看数仓分层的整体层级图


各层级详解

ODS 层- 操作数据层

  • 定义:数据仓库的“缓冲区”或“贴源层”。它直接同步业务数据库(MySQL, Oracle, Logs 等)的数据,保持与源系统结构基本一致。
  • 核心作用
  • 隔离风险:避免复杂的清洗逻辑直接影响源系统,也避免源系统变更直接击穿数仓。
  • 历史回溯:源系统通常只保留近期数据或覆盖更新,ODS 层通过全量或增量快照保留历史状态。
  • 数据备份:作为数据的最后一道防线。
  • 设计原则
  • 结构与源系统一致:字段名、类型尽量保持不变。
  • 不做复杂清洗:仅做简单的非空判断、乱码处理、分区管理。
  • 保留变更痕迹:通常采用 T+1 增量同步、全量快照、Binlog实时同步,现在 T+0 分钟级增量同步也开始流行起来了。
  • 表命名示例ods_order_info_df (df=daily full, 全量), ods_user_login_di (di=daily increment, 增量)。

实例
源系统订单表 t_order 有 1000 万条数据。
ODS 层表 ods_t_order_di 每天凌晨同步新增的 10 万条数据,并打上 dt='2026-03-04' 的分区标签。


DIM 层 - 公共维度层

  • 定义:存储一致性维度信息的层级。它是数仓的字典中心,确保全公司对于用户商品城市的定义是统一的。
  • 核心作用
  • 统一口径:避免不同报表中“北京市”和“北京”被算作两个城市。
  • 维度退化/扁平化:将原本分散在多个系统的维度信息整合成一张宽表(维度建模中的维度表)。
  • 缓慢变化维 (SCD):处理维度属性的历史变化(如用户从“普通会员”变为“VIP”)。
  • 设计原则
  • 高复用性:所有下游层(DWD/DWS/ADS)都引用这里的维度 ID。
  • 全量存储:维度表通常较小,建议每天全量覆盖或拉链表存储。
  • 表命名示例dim_user_info_df, dim_product_category_df, dim_date_df

实例
整合 CRM 系统的用户基本信息 + 积分系统的用户等级 + 埋点系统的用户标签,生成一张唯一的 dim_user_full_df。无论分析销售还是分析点击,都用这张表里的 user_id


DWD 层 - 明细数据层

  • 定义:数仓的核心层。基于 ODS 数据进行清洗、规范化、脱敏、维度关联后生成的明细事实表
  • 核心作用
  • 数据清洗:去除脏数据、统一枚举值(如性别统一为 0/1)、空值填充。
  • 维度退化:将常用的维度属性(如商品名称、类目)直接冗余到事实表中,形成大宽表,减少后续查询的 Join 操作。
  • 业务过程建模:按照业务过程(下单、支付、发货、退款)划分主题。
  • 设计原则
  • 保持明细粒度:一行代表一个具体的业务动作(如一次下单),不进行聚合。
  • 维度模型:通常采用星型模型设计。
  • 表命名示例dwd_trade_order_detail_di (交易下单明细), dwd_log_page_view_di (页面浏览明细)。

实例:
输入:ODS 的订单表 + ODS 的订单详情表 + DIM 的商品表。
处理:清洗掉测试订单,统一货币单位,将商品名称一级类目冗余进来。
输出:dwd_trade_order_detail_di,包含:order_id, user_id, product_name, category_level1, pay_amount, create_time


DWS 层 - 汇总数据层

  • 定义:基于 DWD 层的明细数据,按主题域时间粒度进行轻度聚合的层级。
  • 核心作用
  • 提升性能:预计算常用指标,避免每次查报表都扫描亿级明细数据。
  • 构建指标体系:沉淀原子指标(如 GMV)、派生指标(如近 7 天 GMV)。
  • 服务通用性:为多个不同的应用场景提供统一的中间结果。
  • 设计原则
  • 按主题建设:如交易主题、流量主题、用户主题。
  • 时间粒度:最常见的是天粒度(日汇总),也有小时粒度或周/月粒度。
  • 维度组合:通常包含 日期 + 核心维度(如用户、商品、地区)。
  • 表命名示例dws_trade_user_day_sum (用户日交易汇总), dws_item_cate_hour_stat (商品类目小时统计)。

实例
输入:dwd_trade_order_detail_di (亿级数据)。
处理:按 user_iddt 分组,计算当天的下单次数、总金额、退货金额。
输出:dws_trade_user_day_sum,包含:dt, user_id, order_count_1d, pay_amount_1d
效果:查询某用户一年的数据,只需扫描 365 行,而不是几千万行明细。


ADS 层- 应用数据层

  • 定义:面向具体业务应用的数据层。存放最终的计算结果,直接对接 BI 报表、数据大屏、推荐算法接口或 API 服务。
  • 核心作用
  • 个性化交付:针对特定需求(如双 11 实时大屏、CEO 日报)定制数据结构。
  • 复杂逻辑终结:包含跨主题域的复杂关联(如:结合交易 DWS + 流量 DWS + 用户 DIM 计算“高价值流失用户”)。
  • 结果导出:数据量通常最小,可直接推送到 MySQL、Redis 或 Elasticsearch 供前端读取。
  • 设计原则
  • 结果导向:表结构完全匹配前端展示需求(甚至已经是 JSON 格式或透视表结构)。
  • 高时效性:如果是实时大屏,该层可能是秒级/分钟级更新。
  • 表命名示例ads_ceo_daily_report_df, app_rec_user_list_df, dwa_screen_realtime_gmv

实例:
输入:dws_trade_user_day_sum + dim_user_info
处理:筛选出过去 30 天消费大于 1 万且最近 7 天未登录的用户,提取姓名和手机号。
输出:ads_high_value_churn_user_list,直接供客服系统调用进行电话回访。


全流程案例演示:计算“2026 年 3 月 4 日各省份的销售总额”

老言带你们看一个指标是如何在各层流转的:

  1. Source (业务库):
  • orders 表:{id: 101, user_id: 88, amount: 100, province_code: 'GD', time: '...'}
  • users 表:{id: 88, name: '张三'}
  1. ODS 层:
  • ods_orders_di: 原样同步 orders 表数据,分区 dt='2026-03-04'
  • ods_users_df: 全量同步 users 表。
  1. DIM 层:
  • dim_province: 整理省份代码表 {code: 'GD', name: '广东省'}
  • (此处可能还会生成用户维度宽表,暂略)
  1. DWD 层 (清洗 + 宽表化):
  • dwd_trade_order_detail_di:
  • 关联 ODS 订单 + ODS 用户 + DIM 省份。
  • 清洗:剔除金额为负数的测试单。
  • 退化:将 province_name ('广东省') 直接存入该行。
  • 结果行:{order_id: 101, user_id: 88, amount: 100, province_name: '广东省', dt: '2026-03-04'}
  1. DWS 层 (轻度聚合):
  • dws_trade_province_day_sum:
  • 基于 DWD,按 province_namedt 分组。
  • 计算:sum(amount)
  • 结果行:{dt: '2026-03-04', province_name: '广东省', total_gmv: 5000000} (假设该省当天总共卖了 500 万)。
  1. ADS 层 (应用结果):
  • ads_map_sales_visualization:
  • 为了地图组件展示,格式化数据。
  • 结果:[{name: '广东省', value: 5000000}, {name: '北京市', value: 3000000}, ...]
  • 此表直接推送到 Superset 渲染。

为什么要分层

  1. 清晰的数据血缘:当 ADS 层数据出错时,可以逐层向上排查(ADS->DWS->DWD->ODS),快速定位是计算逻辑错了还是源数据错了。
  2. 避免重复计算:DWS 层沉淀了通用的日/月汇总,如果有 10 个报表都需要“日销售额”,它们都去读DWS,而不是每个人都去扫一遍 DWD 的亿级明细。
  3. 屏蔽底层复杂性:业务分析师只需要关注 DWS 和 ADS 层,不需要理解底层的 3NF 复杂关联或脏数据清洗逻辑。
  4. 灵活应对变化:如果源系统字段变了,只需修改 ODS->DWD 的同步逻辑,DWS 和 ADS 层往往不需要变动(只要核心语义不变)。
相关文章
|
1天前
|
人工智能 安全 Linux
小龙虾AI🦞 OpenClaw理性使用指南(阿里云/本地部署+免费Coding Plan API成本控制+安全防护+避坑手册)
“睡一觉赚大钱”“一人公司坐拥10个AI员工”“500元上门安装”——2026年开春,OpenClaw(曾用名Clawdbot)被流量裹挟成“暴富神话”。社交平台上,代安装服务报价从几百元飙升至数千元,大厂甚至下场举办“公益装机”活动;但另一面,真实用户面对每月1.5万甚至2.6万的API账单崩溃发问:“为什么不直接雇实习生?”
86 10
|
24天前
|
存储 分布式计算 Java
PySpark入门教程(非常详细)从零基础入门到精通
本教程聚焦Spark Core核心原理,基于3.5.8版本,用Python详解RDD五大特性(分区、计算函数、依赖关系、分区器、首选位置)、容错机制、Shuffle、DAG调度及共享变量等,并通过WordCount实战演示。
254 4
PySpark入门教程(非常详细)从零基础入门到精通
|
3天前
|
存储 算法 架构师
懂算法不等于搞定数据流:通信物理层的“黑盒”困境
本文部析通信物理层开发核心痛点:算法与FPGA实现脱节、数据流理解薄弱。聚焦OFDM、PC-CFR、FRM滤 波、波束成形等实战场景,强调“左手抓算法、右手抓时序”,倡导从调参侠迈向系统架构师。
270 164
|
1天前
|
人工智能 测试技术 API
5个AI 龙虾🦞员工自动流转!OpenClaw多Agent部署、免费大模型Coding Plan API配置、研发协作与问题排查手册
OpenClaw(原Clawdbot,昵称“小龙虾”)作为2026年主流的开源多智能体框架,其核心优势在于支持多Agent协作——通过创建不同角色的智能体,实现任务自动派发、结果回调与流程闭环。传统研发流程中,一个人需切换需求分析、开发、测试等多个角色,效率低下且易出错;而OpenClaw的多智能体系统可让AI分别扮演这些角色,从需求到代码的完整流程从1-2天缩短至15-30分钟,成本节省80%。
138 6
|
1天前
|
人工智能 弹性计算 安全
2026年OpenClaw极简部署教程,两步拥有专属AI助理!
2026年,OpenClaw(原Moltbot/Clawdbot)以极简两步部署(选镜像+图形化配置),零代码即可在阿里云轻量服务器上启用24小时AI助理,支持自动化办公、多平台消息接入与智能执行,大幅提升个人与企业效率。
83 8
|
4天前
|
机器学习/深度学习 人工智能 PyTorch
写 PyTorch 总像在写脚本?试试 PyTorch Lightning,把模型训练变成“工程化项目”
写 PyTorch 总像在写脚本?试试 PyTorch Lightning,把模型训练变成“工程化项目”
99 14
写 PyTorch 总像在写脚本?试试 PyTorch Lightning,把模型训练变成“工程化项目”
|
16天前
|
JSON 缓存 API
美股实时行情与 K 线数据对接
本文详解如何用StockTV全球金融API快速接入美股实时行情、K线、指数及IPO等数据,支持NYSE/NASDAQ双交易所,提供REST/WS低延迟接口,涵盖个股、指数、涨跌榜等全场景,助开发者高效构建全球资产配置工具。(239字)
|
1天前
|
人工智能 运维 自然语言处理
OpenClaw 部署及使用保姆级指南!大模型Coding Plan免费API配置+6大模块30+落地案例Skill解析及常见问题
2026年,OpenClaw的开源生态已形成“工具丰富但落地迷茫”的独特现状——ClawHub收录技能超1.7万款,GitHub星标突破20万,但多数用户仍停留在“安装即吃灰”的困境。核心矛盾并非工具不足,而是缺乏“场景化落地指引”:用户知道OpenClaw能调用工具、操作系统,却不知道具体能解决哪些实际问题。
175 6
|
2月前
|
人工智能 自然语言处理 运维
阿里开源 Assistant Agent,助力企业快速构建答疑、诊断智能助手
一款快速构建智能客服、诊断助手、运维助手、AIOps 的开源框架。
933 68