什么是数据仓库,与数据库的区别
数据仓库是一个面向主题的(Subject Oriented)、集成的(Integrate)、相对稳定的(Non-Volatile)、反映历史变化(Time Variant)的数据集合,它用于支持企业或组织的决策分析处理。
数据仓库是为了便于多维分析和多角度展现而将数据按特定的模式进行存储所建立起来的关系型数据库,它的数据基于OLTP源系统。
维度建模是一种将数据结构化的逻辑设计方法,它将客观世界划分为度量和上下文。
度量是常常是以数值形式出现,事实周围有上下文包围着,这种上下文被直观地分成独立的逻辑块,称之为维度。
它与实体-关系建模有很大的区别,实体-关系建模是面向应用,遵循第三范式,以消除数据冗余为目标的设计技术。
维度建模是面向分析,为了提高查询性能可以增加数据冗余,反规范化的设计技术。
构建企业级数据仓库的五步法
一、 确定主题
即确定数据分析或前端展现的主题(例:某年某月某地区的啤酒销售情况)。主题要体现出某一方面的各分析角度(维度)和统计数值型数据(量度)之间的关系,确定主题时要综合考虑.
二、 确定量度
确定主题后,需要考虑分析的技术指标(例:年销售额等等)。它们一般为数据值型数据,其中有些度量值不可以汇总;些可以汇总起来,以便为分析者提供有用的信息。量度是要统计的指标,必须事先选择恰当,基于不同的量度可以进行复杂关键性指标(KPI)的设计和计算。
三、 确定事实数据粒度
确定量度之后,需要考虑该量度的汇总情况和不同维度下量度的聚合情况.例如在业务系统中数据最小记录到秒,而在将来分析需求中,时间只要精确到天就可以了,在ETL处理过程中,按天来汇总数据,些时数据仓库中量度的粒度就是”天”。如果不能确认将来的分析需求中是否要精确的秒,那么,我们要遵循”最小粒度原则”,在数据仓库中的事实表中保留每一秒的数据,从而在后续建立多维分析模型(CUBE)的时候,会对数据提前进行汇总,保障产生分析结果的效率。
四、 确定维度
维度是分析的各个角度.例:我们希望按照时间,或者按照地区,或者按照产品进行分析。那么这里的时间,地区,产品就是相应的维度。基于不同的维度,可以看到各个量度汇总的情况,也可以基于所有的维度进行交叉分析。
维度的层次(Hierarchy)和级别(Level)。例:在时间维度上,按照”度-季度-月”形成了一个层次,其中”年” ,”季度” ,”月”成为了这个层次的3个级别。我们可以将“产品大类-产品子类-产品”划为一个层次,其中包含“产品大类”、“产品子类”、“产品”三个级别。
我们可以将3个级别设置成一张数据表中的3个字段,比如时间维度;我们也可以使用三张表,分别保存产品大类,产品子类,产品三部分数据,比如产品维度。
建立维度表时要充分使用代理键.代理键是数据值型的ID号码(每张表的第一个字段),它唯一标识了第一维度成员。在聚合时,数值型字段的匹配和比较,join效率高。同时代理键在缓慢变化维中,起到了对新数据与历史数据的标识作用。
五、 创建事实表
在确定好事实数据和维度后,将考虑加载事实表。业务系统的的一笔笔生产,交易记录就是将要建立的事实表的原始数据.
我们的做法是将原始表与维度表进行关联,生成事实表。关联时有为空的数据时(数据源脏),需要使用外连接,连接后将各维度的代理键取出放于事实表中,事实表除了各维度代理键外,还有各度量数据,不应该存在描述性信息。
事实表中的记录条数据都比较多,要为其设置复合主键各蛇引,以实现数据的完整性和基于数据仓库的查询性能优化。
元数据
描述数据及其环境的数据。两方面用途:
首先,元数据能提供基于用户的信息,如记录数据项的业务描述信息的元数据能帮助用户使用数据。
其次,元数据能支持系统对数据的管理和维护,如关于数据项存储方法的元数据能支持系统以最有效的方式访问数据。
元数据机制主要支持以下五类系统管理功能:
(1)描述哪些数据在数据仓库中;
(2)定义要进入数据仓库中的数据和从数据仓库中产生的数据;
(3)记录根据业务事件发生而随之进行的数据抽取工作时间安排;
(4)记录并检测系统数据一致性的要求和执行情况;
(5)衡量数据质量。
ODS: Operational Data Store
ODS为企业提供即时的,操作型的,集成的数据集合,具有面向主题性,集成性,动态性,即时性,明细性等特点
ODS作为数据库到数据仓库的一种过渡形式,与数据仓库在物理结构上不同,能提供高性能的响应时间,ODS设计采用混合设计方式。
ODS中的数据是”实时值”,而数据仓库的数据却是”历史值”,一般ODS中储存的数据不超过一个月,而数据仓库为10年或更多.
Data Mart
为了特定的应用目的或应用范围,而从数据仓库中独立出来的一部分数据,也可称为部门数据或主题数据(subjectarea)。在数据仓库的实施过程中往往可以从一个部门的数据集市着手,以后再用几个数据集市组成一个完整的数据仓库。需要注意的就是在实施不同的数据集市时,同一含义的字段定义一定要相容,这样再以后实施数据仓库时才不会造成大麻烦。
DDS(decision-support system)决策支持系统:
用于支持管理决策的系统。通常,DSS包括以启发的方式对大量的数据单元进行的分析,通常不涉及数据更新。
什么叫OLAP?用途是什么?
联机分析处理,On-Line Analysis Processing 即从数据仓库中抽取详细数据的一个子集并经过必要的聚集,存储到OLAP存储器中供前端分析工具读取。
OLAP系统按照数据存储格式可以分为关系OLAP(RelationalOLAP,简称ROLAP)、多维OLAP(MultidimensionalOLAP,简称MOLAP)和混合型OLAP(HybridOLAP,简称HOLAP)三种类型。
ROLAP将分析要用的多维数据存储在关系数据库中,并根据应用的需要有选择的定义一批实视图也存储在关系数据库中
MOLAP将OLAP分析所要用到的多维数据物理上存储为多维数组的形式,形成“立方体”的结构。
HOLAP能把MOLAP和ROLAP两种结构的优点有机的结合起来,能满足用户各种复杂的分析请求。
OLTP与OLAP的区别
一些名词解释
度量:度量是业务流程节点上的一个数值。比如销量,价格,成本等等。
粒度:粒度就是业务流程中对度量的单位,比如商品是按件记录度量,还是按批记录度量。
事实和维度:
首先讨论一下事实这个概念
在我最初期的认识中,一条业务数据是一个事实,比如有一个客户把一个商品放入了购物车中,那么,这一条数据,就是描述了这一个事实。
这个认识对初学者来说还挺普遍的。但这个认识其实是错误的,在数据仓库领域中,事实这个术语,指的是数字型的度量。还是以一个客户把一个商品放入购物车中这么一条数据来举例,在这一条数据中,一定包含了以下信息:
1、商品种类
2、商品名称
3、商品单价
4、商品数量
以上述四条信息举例,商品种类与商品名称不是事实,而商品单价与商品数量是事实。
因为,事实是指数据中的数字型度量,商品种类与商品名称明显不是数字型的,而数量与单价是数字型的。
而事实,也分为三种,可加型事实,半可加型事实,不可加型事实。
三种事实的分类其实也比较明确。
可加型事实,指的是在所有维度加起来都有意义的数字型度量。
半可加型事实,指的是在特定维度下加起来有意义,另一些维度下加起来无意义的数字型度量。
不可加型事实,是指在所有维度下,加起来都没有意义的数字型度量。
比如一条订单数据,包含有以下列
1、订单用户id
2、订单用户vip等级
3、订单总额
4、用户账户余额
订单总额是典型的可加型事实,在所有维度都可以进行统计。例如,直接对所有数据的订单总额相加,就是历史累计订单总额,如果对地区金额进行相加,就是各地区的历史订单总额,如果对当日的订单总额统计,加起来的就是当日订单金额。在所有维度下,相加都是有意义的。
用户账户余额是典型的半可加型事实,只有在用户维度下相加,得出的所有用户余额总额这个数字是有意义的,其他维度下相加是没有意义的。
vip等级是典型的不可加型事实,任何维度下,对vip等级的相加,结果都是没有意义的数字。
然后是维度概念
维度是看待事实的角度。
直接拿上面的订单数据来举例,我们可以以什么角度来看这条数据。
首先,时间角度,这条订单数据是在哪天发生的,这就是时间维度。
然后,地域角度,这条订单数据的用户是哪个省份的,这就是地域维度。
其次,品牌维度,这条订单的商品是什么品牌,这就是品牌维度。
最后,商品种类维度,这条订单商品是什么种类,是电器还是厨具,这就是商品种类维度
这只是我第一眼看到这条数据,想到的可以看待的角度,我们可以以更多的角度来看待这条数据,例如,消费区间,这条数据是在万元以上还是万元以下的消费,消费终端,是在电脑还是手机上下的单,只要想,可以在一条数据上扩充出非常多的维度。
所以现在再看开头那句话,维度是看待事实的角度。
https://zhuanlan.zhihu.com/p/68771422
代理键:代理关键字一般是指维度表中使用顺序分配的整数值作为主键,也称为“代理键”。 使用代理关键字可以用来处理缓慢变化维 使用代理关键字可以带来性能上的优势。和自然关键字相比,代理关键字很小,是整型的,可以减小事实表中记录的长度
事实表类型: 1.事务事实表 它是面向事务的,其粒度是每一行对应一个事务,它是最细粒度的事实表。
2.周期快照事实表 它是按照良好的时间周期间隔(每天,每月)来捕捉业务活动的执行情况,一旦装入事实表就不会再去更新,它是事务事实表的补充,而非替代品。
3.累积快照事实表 它用于描述业务过程中某个不确定时间跨度里的活动,它随着业务活动的发生会不断的更新。
缓慢变化维:blog.csdn.net/qq_43791724…
拉链表:blog.csdn.net/zhaodedong/…
数据总线矩阵:矩阵的每一行对应都对应机构中的一个业务过程,每一列都和一个业务维度相对应,用叉号填充显示的是和每一行相关的列。业务过程应该先从单个数据源系统开始,然后再进行多数据源的合并。
一致性维度: 具有一致的维度关键字,一致的属性列名称,一致的属性定义和一致的属性值。一致性维度要么是统一的,要么是维度表的一个子集。
一致性事实 指每个度量在整个数据仓库中都是唯一的统计口径,为了避免歧义,一个度量只有唯一的业务术语。
首先从某一个汇总数据出发,查看组成该数据的各个成员数据。
KPI(Key Performance Indication)关键业绩指标用来衡量业绩好坏比如销售这个主题,销售增长率、销售净利润就是一个KPI
退化维
般来说事实表中的外键都对应一个维表,维的信息主要存放在维表中。但是退化维仅仅是事实表中的一列,这个维的相关信息都在这一列中,没有维表与之相关联。比如:发票号,序列号等等。 那么退化维有什么作用呢? 1、退化维具有普通维的各种操作,比如:上卷,切片,切块等
(上卷汇总,下钻明细;切片,切块:对二维数据进行切片,三维数据进行切块,,可得到所需要的数据) 2、如果存在退化维,那么在ETL的过程将会变得容易。 3、它可以让group by等操作变得更快
缓慢变化维:在实际情况下,维度的属性并不是静态的,它会随着时间的流失发生缓慢的变化。
处理方法: 1新信息直接覆盖旧信息,2,保存多条记录,并添加字段加以区分(用y,n;0,1,2或用时间来区别新旧记录)
3.保存多条记录,并添加字段加以区分4.另外建表保存历史记录.5混合模式
星形模型与雪花模型的区别?
.星星的中心是一个大的事实表,发散出来的是维度表,每一个维度表用一个PK-FK连接到事实表,维度表之间彼此并不关联。一个事实表又包括一些度量值和维度。
2.雪花模型通过规范维度表来减少冗余度,也就是说,维度表数据已经被分组成一个个的表而不是使用一个大表。例如产品表被分成了产品大类和产品小类两个表。尽管这样做可以节省了空间,但是却增加了维度表的数量和关联的外键的个数。这就导致了更复杂的查询并降低了数据库的效率
如何实现拉链表
三大范式
1.1 第一范式(1NF)无重复的列
班级 物品
3年E班 30张桌子
3年E班 30张椅子
说明:在任何一个关系数据库中,第一范式(1NF)是对关系模式的基本要求,不满足第一范式(1NF)的数据库就不是关系数据库。
1.2 第二范式(2NF)属性完全依赖于主键[消除部分子函数依赖]
学号 姓名 系名 系主任 课名 分数
1022211101 李小明 经济系 王强 高等数学 95
1022211101 李小明 经济系 王强 大学英语 87
1022211101 李小明 经济系 王强 普通化学 76
1022211102 张莉莉 经济系 王强 高等数学 72
1022211102 张莉莉 经济系 王强 大学英语 98
1022211102 张莉莉 经济系 王强 计算机基础 88
1022211101 高芳芳 法律系 刘玲 高等数学 82
1022211101 高芳芳 法律系 刘玲 法学基础 82
假设这个表中学号与课名为主键,那么分数完全依赖于学号与课名,但是姓名,系名,系主任不完全依赖于学号与课名,那么修改如下:
1.3 第三范式(3NF)属性不依赖于其它非主属性[消除传递依赖]
学号 姓名 系名 系主任
1022211101 李小明 经济系 王强
1022211102 张莉莉 经济系 王强
1022211101 高芳芳 法律系 刘玲
在表二中,我们可以通过学号推导学生属于那个系,然后推导出系主任,但是我们不能直接通过系主任推导出学号。这就表示学号+学生姓名+系名与系名+系主任是两对信息,传递依赖的是系名
数据仓库分层:
dm 该层次主要功能是加工多维度冗余的宽表(解决复杂的查询)、多角度分析的汇总表。
app 该层级的主要功能是提供差异化的数据服务、满足业务方的需求;
分层的作用
空间换时间。通过建设多层次的数据模型供用户使用,避免用户直接使用操作型数据,可以更高效的访问数据。 把复杂问题简单化。讲一个复杂的任务分解成多个步骤来完成,每一层只处理单一的步骤,比较简单和容易理解。而且便于维护数据的准确性,当数据出现问题之后,可以不用修复所有的数据,只需要从有问题的步骤开始修复。 便于处理业务的变化。随着业务的变化,只需要调整底层的数据,对应用层对业务的调整零感知.01.高效的数据组织形式
【易维护】
面向主题的特性决定了数据仓库拥有业务数据库所无法拥有的高效的数据组织形式,更加完整的数据体系,清晰的数据分类和分层机制。因为所有数据在进入数据仓库之前都经过清洗和过滤,
使原始数据不再杂乱无章,基于优化查询的组织形式,有效提高数据获取、统计和分析的效率。
【高性能】
数据仓库的构建将大大缩短获取信息的时间,数据仓库作为数据的集合,所有的信息都可以从数据仓库直接获取,数据仓库的最大优势在于一旦底层从各类数据源到数据仓库的ETL流程构建成型,
那么每天就会有来自各方面的信息通过自动任务调度的形式流入数据仓库,从而使一切基于这些底层信息的数据获取的效率达到迅速提升。
从应用来看,使用数据仓库可以大大提高数据的查询效率,尤其对于海量数据的关联查询和复杂查询,所以数据仓库有利于实现复杂的统计需求,提高数据统计的效率。
【简单化】
数据仓库是所有数据的集合,包括日志信息、数据库数据、文本数据、外部数据等都集成在数据仓库中,对于应用来说,实现各种不同数据的关联并使多维分析更加方便,为从多角度多层次地数据分析和决策制定提供的可能。
【历史性】
记录历史是数据仓库的特性之一,数据仓库能够还原历史时间点上的产品状态、用户状态、用户行为等,以便于能更好的回溯历史,分析历史,跟踪用户的历史行为,更好地比较历史和总结历史,同时根据历史预测未来。
如何保证数据准确性
元数据的建设与管理是其中重要的一个环节。元数据建设的目标是打通数据接入到加工 ,再到数据消费整个链路,规范元数据体系与模型,提供统一的元数据服务出口,保障元数据产出的稳定性和质量。首先梳理清楚元仓底层数据,对元数据做分类,如计算元数据、存储元数据、质量元数据等,减少数据重复建设,保障数据的唯一性。
另外, 要丰富表和字段使用说明,方便使用和理解。根据元仓底层数据构建元仓中间层,建设元数据基础宽表,也就是元数据中间层,打通从数据产生到消费整个链路。
也可在粒度、规范等方面展开,见仁见智。
支架表
支架表:虽然我们不推崇雪花模型,但如果一组属性在维度表中出现不止一次时,我们也可以采用受限的雪花模型——也就是支架表。
支架表的使用场景:
- 在单个维度表中反复出现该支架属性时
- 被调用的属性值较多时
- 被多个维度、事实表调用,且被调用时的属性值定义完全相同
- 基本不需要修改或修改频次极小