大佬教程收集整理的这篇文章主要介绍了数据仓库理论,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
当前编辑版本为v0.2(2021.09.10)。 本博客主要参考资料为网上诸多博客c;可能存在一定的错误c;望指正。
数据仓库(Data Warehouse)是面向主题的、数据集成的(非简单的数据堆积)、相对稳定的、反应历史变化的数据集合c;数仓中的数据是有组织有结构的存储数据集合c;用于对管理决策过程的支持。
@R_674_7236@(OLTPc;on-line transaction processing) 主要是执行基本日常的事务处理c;比如数据库记录的增删查改。比如在银行的一笔交易记录c;就是一个典型的事务。
联机分析处理OLAP(On-Line Analytical Processing) 是数据仓库系统的主要应用c;支持复杂的分析操作c;侧重决策支持c;并且提供直观易懂的查询结果。典型的应用就是复杂的动态的报表系统。
数据库是“按照数据结构来组织、存储和管理数据的仓库”。是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。
数据库是以一定方式储存在一起、能与多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合c;可视为电子化的文件柜c;存储电子文件的处所c;用户可以对文件中的数据进行新增、查询、更新、删除等操作c;数据组织主要是面向事务处理任务。
关系型数据库设计时c;遵照一定的规范要求c;目的在于降低数据的冗余性和保证数据的一致性c;这些规范就可以称为范式NF(Normal Form)c;大多数情况下c;关系型数据库的设计符合三范式即可。
三范式并非相互独立c;而是一种约束上层层严苛的关系。
在第一范式中c;数据库所有字段值都是不可分解、具备原子性的值。
第二范式在第一范式的基础上更进一层。第二范式需要确保数据库表中的每一列都和主键相关。也就是说在一个数据库表中c;一个表中只能保存一种数据c;不可以把多种数据保存在同一张数据库表中。
*: 有主键c;非主键字段依赖主键。
第三范式需要确保数据表中的每一列数据都和主键直接相关c;而不能间接相关。
ER实体关系模型(Entity-Relationship)是数据库设计的理论基础c;当前几乎所有的OLTP系统设计都采用ER模型建模的方式,这种建模方式基于三范式。在信息系统中c;将事物抽象为“实体”、“属性”、“关系”来表示数据关联和事物描述。
实体是一类数据模型c;指应用中可以区别的客观存在的事物c;它具有自己的属性。在ER实体关系模型中实体使用方框表示。
对实体的描述、修饰就是属性c;即实体的某一特性称为属性。在ER实体关系模型中属性使用椭圆来表示。
关系表示一个或多个实体之间的关联关系c;可分为一对一关系、一对多关系和多对多关系。
1991年c;比尔·恩门(Bill Inmon)出版了他的第一本关于数据仓库的书《Building the Data Warehouse》c;标志着数据仓库概念的确立。该书定义了数据仓库非常具体的原则c;包括:
这些原则到现在仍然是指导数据仓库建设的最基本原则。凭借着这本书c;Bill Inmon被称为“数据仓库之父”。
传统关系型数据库的主要应用是OLTP(On-Line transaction Processing)c;主要是基本的、日常的事务处理c;例如银行交易。主要用于业务类系统c;主要供基层人员使用c;进行一线业务操作。
数仓系统的主要应用主要是OLAP(On-Line Analytical Processing)c;支持复杂的分析操作c;侧重决策支持c;并且提供直观易懂的查询结果。OLAP数据分析的目标是探索并挖掘数据价值c;作为企业高层进行决策的参考。
功能 | 数据库 | 数据仓库 |
---|---|---|
数据范围 | 当前状态数据 | 存储历史、完整、反应历史变化数据 |
数据变化 | 支持频繁的增删改查操作 | 可增加、查询c;无更新、删除操作 |
应用场景 | 面向业务交易流程 | 面向分析、支持侧重决策分析 |
处理数据量 | 频繁、小批次、高并发、低延迟 | 非频繁、大批量、高吞吐、有延迟 |
设计理论 | 遵循数据库三范式、避免冗余 | 违范式、适当冗余 |
建模方式 | ER实体关系建模(范式建模) | 范式建模+维度建模 |
维度建模主要源自数据集市c;主要面向分析场景。
维度建模以分析决策的需求出发构建模型c;构建的数据模型为分析需求服务c;因此它重点解决用户如何更快速完成分析需求c;同时还有较好的大规模复杂查询的响应性能。它与实体-关系(ER)建模有很大的区别c;实体-关系建模是面向应用c;遵循第三范式c;以消除数据冗余为目标的设计技术。维度建模是面向分析c;为了提高查询性能可以增加数据冗余c;反规范化的设计技术。
Ralph Kimball推崇数据集市的集合为数据仓库c;同时也提出了对数据集市的维度建模c;将数据仓库中的表划分为事实表、维度表两种类型。
发生在现实世界中的操作型事件c;其所产生的可度量数值c;存储在事实表中。
维度表包含了维度的每个成员的特定名称。维度成员的名称称为“属性”(AttributE)。
当所有的维度表都由连接键连接到事实表时c;结构图如星星一样c;这种分析模型就是星型模型。
星型模型因为数据的冗余所以很多统计查询不需要做外部的连接c;因此一般情况下效率比雪花型模型要高。星型结构不用考虑很多正规化的因素c;设计与实现都比较简单。
星型模型
当有一个或多个维表没有直接连接到事实表上c;而是通过其他维表连接到事实表上时c;其结构图就像雪花连接在一起c;这种分析模型就是雪花模型。如下图c;雪花模型是对星型模型的扩展。它对星型模型的维表进一步层次化c;原有的各维表可能被扩展为小的事实表c;形成一些局部的“层次”区域c;这些被分解的表都连接到主维度表而不是事实表。
雪花模型
星型模型和雪花模型主要区别就是对维度表的拆分c;对于雪花模型c;维度表的设计更加规范c;一般符合三范式设计;而星型模型c;一般采用降维的操作c;维度表设计不符合三范式设计c;反规范化c;利用冗余牺牲空间来避免模型过于复杂c;提高易用性和分析效率。
雪花型模型由于去除了冗余c;有些统计就需要通过表的联接才能产生c;所以效率不一定有星型模型高。正规化也是一种比较复杂的过程c;相应的数据库结构设计、数据的ETL、以及后期的维护都要复杂一些。因此在冗余可以接受的前提下c;数仓构建实际运用中星型模型使用更多c;也更有效率。
星座模式也是星型模式的扩展c;星型模型和雪花模型都是基于多维表对应事实表c;有的时候多个事实表共用多张维度表c;这个时候就需要采用星座模式。
星座范式
每层数据都有各自的作用域和职责c;在使用表的时候更方便定位和理解。
规范数据分层c;开发一层公用的中间层数据c;减少重复计算流转数据。
通过数据分层c;提供统一的数据出口c;保证对外输出数据口径一致。
通过数据分层c;将复杂的业务简单化c;将复杂的业务拆解为多层数据c;每层数据负责解决特定的问题。
数据仓库-分层架构
ODS层c;操作数据层c;也叫贴源层c;本层直接存放从业务系统抽取过来的数据。这些数据从结构上和数据上与业务系统保持一致c;降低了数据抽取的复杂性c;本层数据大多是按照源头业务系统的分类方式而分类的。一般来讲c;为了考虑后续可能需要追溯数据问题c;因此对于这一层就不建议做过多的数据清洗工作c;原封不动地接入原始数据即可。
DW层c;数据仓库层c;是我们在做数据仓库时要核心设计的一层c;本层将从 ODS 层中获得的数据按照主题建立各种数据模型c;每一个主题对应一个宏观的分析领域c;数据仓库层排除对决策无用的数据c;提供特定主题的简明视图。DW层又细分为 DWD(Data Warehouse Detail)层、DWM(Data Warehouse Middle)层和DWS(Data Warehouse service)层。
DWD,数据明细层一般保持和ODS层一样的数据粒度c;并且提供一定的数据质量保证c;在ODS的基础上对数据进行加工处理c;提供更干净的数据。同时c;为了提高数据明细层的易用性c;该层会采用一些维度退化手法c;当一个维度没有数据仓库需要的任何数据时c;就可以退化维度c;将维度退化至事实表中c;减少事实表和维表的关联。例如:订单id,这种量级很大的维度c;没必要用一张维度表来进行存储c;而我们一般在进行数据分析时订单id又非常重要c;所以我们将订单id冗余在事实表中c;这种维度就是退化维度。
DWM,数据中间层,是会在DWD层的数据基础上c;对数据做轻度的聚合操作c;生成一系列的中间表c;提升公共指标的复用性c;减少重复加工处理数据。简单来说c;就是对通用的维度进行聚合操作c;算出相应的统计指标c;方便复用。
DWS,数据服务层数据表会相对比较少c;大多都是宽表(一张表会涵盖比较多的业务内容c;表中的字段较多)。按照主题划分c;如订单、用户等c;生成字段比较多的宽表c;用于提供后续的业务查询c;OLAP分析c;数据分发等。 在实际业务处理中c;如果直接从DWD或者ODS计算出宽表的统计指标c;会存在计算量太大并且维度太少的问题c;因此一般的做法是c;在DWM层先计算出多个小的中间表c;然后再拼接成一张DWS的宽表。由于宽和窄的界限不易界定c;也可以去掉DWM这一层c;只留DWS层c;将所有的数据在放在DWS也没有问题。
DM层,数据集市层c;也可以称为数据应用层c;基于DW上的基础数据c;整合汇总成分析某一个主题域的报表数据。主要是提供给数据产品和数据分析使用的数据c;一般会存放在 ES、POSTGReSql、redis等系统中供线上系统使用c;也可能会存在 Hive 或者 Druid 中供数据分析和数据挖掘使用。比如我们经常说的报表数据c;一般就放在这里。
以上是大佬教程为你收集整理的数据仓库理论全部内容,希望文章能够帮你解决数据仓库理论所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。