百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

典型数据仓库的建模方法 数据仓库建模的流程有几个

bigegpt 2024-10-26 08:21 57 浏览

数据仓库,这个几乎是所有大数据开发面试必问的话题。比如数据仓库的分层架构?为什么需要数据仓库建模?数据仓库建模的原则是什么?结合业务举例说明数据仓库建模的步骤,以及注意事项?什么是缓慢变化维?维度该如何选择建设,原则是什么,主键如何设计等等?

一众问题搞得小伙伴们死去活来,甚至工作好几年的小伙伴都没搞清楚过,尤其是大厂特别爱问这些问题。有些小伙伴甚至觉得这些都是形而上学,不懂这些我不一样搞了很多年开发?即使感兴趣的买了一本厚厚的数据仓库工具书也看不懂!那么实际数据仓库建模到底是什么,开发人员该掌握哪些?

来一起看个官方定义:数据仓库,英文名称为DataWarehouse,可简写为DW或DWH。数据仓库,是为企业所有级别的决策制定过程,提供所有类型数据支持的战略集合。它出于分析性报告和决策支持目的而创建。为需要业务智能的企业,提供指导业务流程改进、监视时间、成本、质量以及控制。数据仓库之父 Bill Inmon 在 1991 年出版的 Building the Data Warehouse 一书中首次提出了被广为认可的数据仓库定义。Inmon 将数据仓库描述为一个面向主题的、集成的、随时间变化的、非易失的数据集合,用于支持管理者的决策过程。

简单点来说,现实情况是一个企业有很多数据源,比如有的业务数据存放在Mysql,PG库,有的存放在Oracle,有的日志存放在Ftp,Nginx服务器上等,有的是外部采集的爬虫数据等等。那么对于企业来说沉淀了这么多数据,如何将这些数据放到一起进行数据融合,数据分析,给企业挖掘数据价值呢?这些不同数据源,不同数据存储格式,不同的数据更新周期,如果让你把企业这些数据融合分析,你怎么办?

首先,你是不是要把这些不同数据按照统一的格式,一定的规范存储到一起,然后在通过特定的工具做数据计算分析?那么对于企业来说,把企业各种数据源的数据放到一起存储和计算的地方就叫数据仓库(约定俗称的叫法),所以本质上数据仓库上融合各个数据源,存储加工数据的地方,早期大数据没有发展起来的时候,企业数据仓库的载体一般是Oracle,那时候主要给企业做BI报表(Business Intelligence商业智能)。

后来随着企业数字化,互联网的发展,企业收集到数据越来越多,发现原有的技术框架已经满足不了业务存储和分析的需求了。于是乎就有了现在Hadoop生态为主的数仓仓库。


数据仓库建模的目的?

为什么要进行数据仓库建模?大数据的数仓建模是通过建模的方法更好的组织、存储数据,以便在性能、成本、效率和数据质量之间找到最佳平衡点。一般主要从下面四点考虑:

  • 访问性能:能够快速查询所需的数据,减少数据I/O。
  • 数据成本:减少不必要的数据冗余,实现计算结果数据复用,降低大数 据系统中的存储成本和计算成本。
  • 使用效率:改善用户应用体验,提高使用数据的效率。
  • 数据质量:改善数据统计口径的不一致性,减少数据计算错误 的可能性,提供高质量的、一致的数据访问平台。
  • 数据仓库建模的方法

    维度建模,是数据仓库大师Ralph Kimball提出的,是数据仓库工程领域最流行的数仓建模经典。

    维度建模以分析决策的需求出发构建模型,构建的数据模型为分析需求服务,因此它重点解决用户如何更快速完成分析需求,同时还有较好的大规模复杂查询的响应性能。维度建模是面向分析的,为了提高查询性能可以增加数据冗余,反规范化的设计技术。

    Ralph Kimball提出对数据仓库维度建模,并且将数据仓库中的表划分为事实表、维度表两种类型。

    1)事实表

    在ER模型中抽象出了有实体、关系、属性三种类别,在现实世界中,每一个操作型事件,基本都是发生在实体之间的,伴随着这种操作事件的发生,会产生可度量的值,而这个过程就产生了一个事实表,存储了每一个可度量的事件。

    以电商行业为例:电商场景:一次购买事件,涉及主体包括客户、商品、商家,产生的可度量值 包括商品数量、金额、件数等。

    事实表根据粒度的角色划分不同,可分为事务事实表、周期快照事实表、累积快照事实表。注意:这里需要值得注意的是,在事实表的设计时,一定要注意一个事实表只能有一个粒度,不能将不同粒度的事实建立在同一张事实表中。

  • 事务事实表,用于承载事务数据,通常粒度比较低,它是面向事务的,其粒度是每一行对应一个事务,它是最细粒度的事实表,例如产品交易事务事实、ATM交易事务事实。
  • 周期快照事实表,按照一定的时间周期间隔(每天,每月)来捕捉业务活动的执行情况,一旦装入事实表就不会再去更新,它是事务事实表的补充。用来记录有规律的、固定时间间隔的业务累计数据,通常粒度比较高,例如账户月平均余额事实表。
  • 累积快照事实表,用来记录具有时间跨度的业务处理过程的整个过程的信息,每个生命周期一行,通常这类事实表比较少见。
  • 2)维度表

    维度,顾名思义,业务过程的发生或分析角度。比如从颜色、尺寸的角度来比较手机的外观,从cpu、内存等较比比较手机性能维。维度表一般为单一主键,在ER模型中,实体为客观存在的事物,会带有自己的 描述性属性,属性一般为文本性、描述性的,这些描述被称为维度。

    比如商品,单一主键:商品ID,属性包括产地、颜色、材质、尺寸、单价等, 但并非属性一定是文本,比如单价、尺寸,均为数值型描述性的,日常主要的维度抽象包括:时间维度表、地理区域维度表等。

    案例:某电商平台,经常需要对订单进行分析,以某宝的购物订单为例,以维度建 模的方式设计该模型

    涉及到事实表为订单表、订单明细表,维度包括商品维度、用户维度、商家维度、区域维 度、时间维度。

  • 商品维度:商品ID、商品名称、商品种类、单价、产地等。
  • 用户维度:用户ID、姓名、性别、年龄、常住地、职业、学历等。
  • 时间维度:日期ID、日期、周几、上/中/下旬、是否周末、是否假期等图片。
  • 维度分为:

    ① 退化维度(DegenerateDimension)

    在维度类型中,有一种重要的维度称作为退化维度,亦维度退化一说。这种维度指的是直接把一些简单的维度放在事实表中。退化维度是维度建模领域中的一个非常重要的概念,它对理解维度建模有着非常重要的作用,退化维度一般在分析中可以用来做分组使用。

    ② 缓慢变化维(Slowly Changing Dimensions)

    维度的属性并不是始终不变的,它会随着时间的流逝发生缓慢的变化,这种随时间发生变化的维度我们一般称之为缓慢变化维(SCD)。比如员工表中的部门维度,员工的所在部门有可能两年后调整一次。

    3)维度建模模型的分类

    维度建模按数据组织类型划分可分为星型模型、雪花模型、星座模型。

    ① 星型模型

    星型模型主要是维表和事实表,以事实表为中心,所有维度直接关联在事实表上,呈星型分布。

    ② 雪花模型

    雪花模型,在星型模型的基础上,维度表上又关联了其他维度表。这种模型维护成本高,性能方面也较差,所以一般不建议使用。尤其是基于hadoop体系构建数仓,减少join就是减少shuffle,性能差距会很大。

    尖叫提示:所以由上可以看出:

  • 星型模型和雪花模型主要区别就是对维度表的拆分。
  • 对于雪花模型,维度表的涉及更加规范,一般符合3NF,有效降低数据冗余,维度表之间不会相互关联。
  • 星型模型,一般采用降维的操作,反规范化,不符合3NF,利用冗余来避免模型过于复杂,提高易用性和分析效率,效率相对较高。
  • ③ 星座模型

    星座模型,是对星型模型的扩展延伸,多张事实表共享维度表。数仓模型建设后期,大部分维度建模都是星座模型。

    4)维度建模步骤

    维度建模步骤:选择业务过程->声明粒度->确定维度->确定事实。旨在重点解决数据粒度、维度设计和事实表设计问题。

    声明粒度,为业务最小活动单元或不同维度组合。以共同粒度从多个组织业务过程合并度量的事实表称为合并事实表,需要注意的是,来自多个业务过程的事实合并到合并事实表时,它们必须具有同样等级的粒度。

    相关推荐

    AI「自我复制」能力曝光,RepliBench警示:大模型正在学会伪造身份

    科幻中AI自我复制失控场景,正成为现实世界严肃的研究课题。英国AISI推出RepliBench基准,分解并评估AI自主复制所需的四大核心能力。测试显示,当前AI尚不具备完全自主复制能力,但在获取资源...

    【Python第三方库安装】介绍8种情况,这里最全看这里就够了!

    **本图文作品主要解决CMD或pycharm终端下载安装第三方库可能出错的问题**本作品介绍了8种安装方法,这里最全的python第三方库安装教程,简单易上手,满满干货!希望大家能愉快地写代码,而不要...

    pyvips,一个神奇的 Python 库!(pythonvip视频)

    大家好,今天为大家分享一个神奇的Python库-pyvips。在图像处理领域,高效和快速的图像处理工具对于开发者来说至关重要。pyvips是一个强大的Python库,基于libvips...

    mac 安装tesseract、pytesseract以及简单使用

    一.tesseract-OCR的介绍1.tesseract-OCR是一个开源的OCR引擎,能识别100多种语言,专门用于对图片文字进行识别,并获取文本。但是它的缺点是对手写的识别能力比较差。2.用te...

    实测o3/o4-mini:3分钟解决欧拉问题,OpenAI最强模型名副其实!

    号称“OpenAI迄今为止最强模型”,o3/o4-mini真实能力究竟如何?就在发布后的几小时内,网友们的第一波实测已新鲜出炉。最强推理模型o3,即使遇上首位全职提示词工程师RileyGoodsid...

    使用Python将图片转换为字符画并保存到文件

    字符画(ASCIIArt)是将图片转换为由字符组成的艺术作品。利用Python,我们可以轻松实现图片转字符画的功能。本教程将带你一步步实现这个功能,并详细解释每一步的代码和实现原理。环境准备首先,你...

    5分钟-python包管理器pip安装(python pip安装包)

    pip是一个现代的,通用、普遍的Python包管理工具。提供了对Python包的查找、下载、安装、卸载的功能,是Python开发的基础。第一步:PC端打开网址:选择gz后缀的文件下载第二步:...

    网络问题快速排查,你也能当好自己家的网络攻城狮

    前面写了一篇关于网络基础和常见故障排查的,只列举了工具。没具体排查方式。这篇重点把几个常用工具的组合讲解一下。先有请今天的主角:nslookup及dig,traceroute,httping,teln...

    终于把TCP/IP 协议讲的明明白白了,再也不怕被问三次握手了

    文:涤生_Woo下周就开始和大家成体系的讲hadoop了,里面的每一个模块的技术细节我都会涉及到,希望大家会喜欢。当然了你也可以评论或者留言自己喜欢的技术,还是那句话,希望咱们一起进步。今天周五,讲讲...

    记一次工控触摸屏故障的处理(工控触摸屏维修)

    先说明一下,虽然我是自动化专业毕业,但已经很多年不从事现场一线的工控工作了。但自己在单位做的工作也牵涉到信息化与自动化的整合,所以平时也略有关注。上一周一个朋友接到一个活,一家光伏企业用于启动机组的触...

    19、90秒快速“读懂”路由、交换命令行基础

    命令行视图VRP分层的命令结构定义了很多命令行视图,每条命令只能在特定的视图中执行。本例介绍了常见的命令行视图。每个命令都注册在一个或多个命令视图下,用户只有先进入这个命令所在的视图,才能运行相应的命...

    摄像头没图像的几个检查方法(摄像头没图像怎么修复)

    背景描述:安防监控项目上,用户的摄像头运行了一段时间有部分摄像头不能进行预览,需要针对不能预览的摄像头进行排查,下面列出几个常见的排查方法。问题解决:一般情况为网络、供电、设备配置等情况。一,网络检查...

    小谈:必需脂肪酸(必需脂肪酸主要包括)

    必需脂肪酸是指机体生命活动必不可少,但机体自身又不能合成,必需由食物供给的多不饱和脂肪酸(PUFA)。必需脂肪酸主要包括两种,一种是ω-3系列的α-亚麻酸(18:3),一种是ω-6系列的亚油酸(18:...

    期刊推荐:15本sci四区易发表的机械类期刊

      虽然,Sci四区期刊相比收录在sci一区、二区、三区的期刊来说要求不是那么高,投稿起来也相对容易一些。但,sci四区所收录的期刊中每本期刊的投稿难易程度也是不一样的。为方便大家投稿,本文给大家推荐...

    be sick of 用法考察(be in lack of的用法)

    besick表示病了,做谓语.本身是形容词,有多种意思.最通常的是:生病,恶心,呕吐,不适,晕,厌烦,无法忍受asickchild生病的孩子Hermother'sverysi...