CSDN|一文带你认清数据仓库“维度模型设计”与“分层架构” | 原力计划
本文插图
作者 | Alice菌 责编 | 王晓曼 出品 | CSDN博客数据仓库纬度模型设计1. 纬度建模基本概念维度模型是数据仓库领域大师Ralph Kimall所倡导 , 他的《数据仓库工具箱》 , 是数据仓库工程领域最流行的数仓建模经典 。 维度建模以分析决策的需求出发构建模型 , 构建的数据模型为分析需求服务 , 因此它重点解决用户如何更快速完成分析需求 , 同时还有较好的大规模复杂查询的响应性能 。维度建模是专门应用于分析型数据库、数据仓库、数据集市建模的方法 。 数据集市可以理解为是一种"小型数据仓库" 。1.1事实表发生在现实世界中的操作型事件 , 其所产生的可度量数值 , 存储在事实表中 。 从最低的粒度级别来看 , 事实表行对应一个度量事件 , 反之亦然 。事实表表示对分析主题的度量 。 比如一次购买行为我们就可以理解为是一个事实 。
本文插图
图中的订单表就是一个事实表 , 可以理解他就是在现实中发生的一次操作型事件 , 每完成一个订单 , 就会在订单中增加一条记录 。事实表的特征:表里没有存放实际的内容 , 他是一堆主键的集合 , 这些ID分别能对应到维度表中的一条记录 。 事实表包含了与各维度表相关联的外键 , 可与维度表关联 。 事实表的度量通常是数值类型(条/个/次) , 且记录数会不断增加 , 表数据规模迅速增长 。1.2维度表维度表示要对数据进行分析时所用的一个量 , 比如你要分析产品销售情况 , 你可以选择按类别进行分析,或按区域分析 。 这样的按…分析就构成一个维度 。 上图中的用户表、商家表、时间表这些都属于维度表 。 这些表都有一个唯一的主键 , 然后在表中存放了详细的数据信息 。例如:交易金额分析分析男性用户的订单金额、联想商品的订单金额、第一季度的订单金额、手机的订单金额、家里下单的订单金额 。例如:学生分析姓张的同学有多少、男性的同学有多少、江苏的同学有多少、身高小于170cm的同学有多少、年龄小于23岁的同学有多少 。维度表的特征:每个维度表都包含单一的主键列 。 维度表的主键可以作为与之关联的任何事实表的外键 , 当然 , 维度表行的描述环境应与事实表行完全对应 。 维度表通常比较宽 , 是扁平型非规范表 , 包含大量的低粒度的文本属性 。总的说来 , 在数据仓库中不需要严格遵守规范化设计原则 。 因为数据仓库的主导功能就是面向分析 , 以查询为主 , 不涉及数据更新操作 。需要强调的是:
- 事实表的设计是以能够正确记录历史信息为准则 。
- 维度表的设计是以能够以合适的角度来聚合主题内容为准则 。
本文插图
2.2雪花模式雪花模式(Snowflake Schema)是对星形模式的扩展 。 雪花模式的维度表可以拥有其他维度表的 , 虽然这种模型相比星型更规范一些 , 但是由于这种模型不太容易理解 , 维护成本比较高 , 而且性能方面需要关联多层维表 , 性能也比星型模型要低 。 所以一般不是很常用 。
本文插图
2.3星座模式星座模式是星型模式延伸而来 , 星型模式是基于一张事实表的 , 而星座模式是基于多张事实表的 , 而且共享维度信息 。前面介绍的两种维度建模方法都是多维表对应单事实表 , 但在很多时候维度空间内的事实表不止一个 , 而一个维表也可能被多个事实表用到 。 在业务发展后期 , 绝大部分维度建模都采用的是星座模式 。数据仓库分层架构1. 为什么要分层分层的主要原因是在管理数据的时候 , 能对数据有一个更加清晰的掌控 , 详细来讲 , 主要有下面几个原因:清晰数据结构:每一个数据分层都有它的作用域 , 这样我们在使用表的时候能更方便地定位和理解 。方便数据血缘追踪:简单来说 , 我们最终给业务呈现的是一个能直接使用业务表 , 但是它的来源有很多 , 如果有一张来源表出问题了 , 我们希望能够快速准确地定位到问题 , 并清楚它的危害范围 。减少重复开发:规范数据分层 , 开发一些通用的中间层数据 , 能够减少极大的重复计算 。把复杂问题简单化:将一个复杂的任务分解成多个步骤来完成 , 每一层只处理单一的步骤 , 比较简单和容易理解 。 而且便于维护数据的准确性 , 当数据出现问题之后 , 可以不用修复所有的数据 , 只需要从有问题的步骤开始修复 。屏蔽原始数据的异常:屏蔽业务的影响 , 不必改一次业务就需要重新接入数据 。2.数仓分层思想数据分层 , 每个企业根据自己的业务需求可以分成不同的层次 , 但是最基础的分层思想 , 理论上数据分为三个层 , 数据运营层、数据仓库层、数据服务层 。 基于这个基础分层之上添加新的层次 , 来满足不同的业务需求 。数据运营层(ODS)Operatedata store(操作数据-存储) , 是最接近数据源中数据的一层 , 数据源中的数据 , 经过抽取、洗净、传输 , 也就说传说中的ETL之后 , 装入ODS层 。 本层的数据 , 总体上大多是按照源头业务系统的分类方式而分类的 。例如:MySQL里面的一张表可以通过sqoop之间抽取到ODS层 。ODS层数据的来源方式:
推荐阅读
- |一文速览五月份隐私币重大进展:Monero、Zcash、Grin、Beam
- CSDN|牛!2020年,这项技术将获得99000000000元人民币“国家领投”!
- CSDN|儿童节教你用 Python 画出童年回忆
- CSDN|“不要害怕 RAID!”
- 腾讯科技|一文读懂网易招股书亮点:发售价不高于126港元 研发人员超1万名
- CSDN|Rust 让人奔溃的那些特性!
- CSDN|基础软件,未来只有开源一条路?
- CSDN|本来想用“{{”秀一波,结果却导致了内存溢出!
- CSDN|云计算,巨头们的背水一战
- CSDN|2020 AI 产业图谱启动,勾勒中国 AI 技术与行业生态