Table of Contents
数据仓库(Data Warehouse)简称数仓(DW),是一种信息系统的资料储存理论 ,此理论强调的是利用某些特殊资料存储方式,让所包含的资料有利于分析处理,从而产生有价值的资讯并以此做出决策。
简单来讲,数据仓库就是一个各种数据的中心存储系统,在数仓的基础上可以进行数据挖掘,数据分析等操作。后续讲到的BI也必须建立在数仓的基础上。
维度建模是数据仓库建设中的一种数据建模方法,用于决策制定,侧重于业务如何表示和理解数据。基本的维度模型由维度和度量两类对象组成。维度建模设计就是为了简化数据和加快查询。
数据模型是数据仓库的核心,数据挖掘中常见的数据模型有 星型模型(Star Schema),雪花模型(Snowflake Schema)和事实星座模型(Fact Constellation)等。
星型模型中有一个事实表,以及零个或多个维度表,事实表与维度表通过主键外键相关联,维度表之间没有关联,就像很多星星(维度表)围绕在一个恒星(事实表)周围,故名为星型模型。星形模型是最简单,也是最常用的模型。由于星形模型只有一张大表,因此它相比于其他模型更适合于大数据处理。其他模型可以通过一定的转换,变为星形模型。
星型架构是一种非正规化的结构,多维数据集的每一个维度都直接与事实表相连接,不存在渐变维度,所以数据有一定的冗余,如在地域维度表中,存在国家 A 省 B 的城市 C 以及国家 A 省 B 的城市 D 两条记录,那么国家 A 和省 B 的信息分别存储了两次,即存在冗余。
当有一个或多个维表没有直接连接到事实表上,而是通过其他维表连接到事实表上时,其图解就像多个雪花连接在一起,故称雪花模型。雪花模型是对星型模型的扩展。它对星型模型的维表进一步层次化,原有的各维表可能被扩展为小的事实表,形成一些局部的 " 层次 " 区域,这些被分解的表都连接到主维度表而不是事实表。如图,将地域维表又分解为国家,省份,城市等维表。它的优点是 : 通过最大限度地减少数据存储量以及联合较小的维表来改善查询性能。雪花型结构去除了数据冗余。
事实星座模型是更为复杂的模型,其中包含多个事实表,而维表是公共的,可以共享,这种模式可以看做星型模式的汇集,因而称作星系模型或者事实星座模型。此图不好画,就拿百度百科的图了。
首先模型的选择跟数据和需求有关系,跟设计没关系。
星型还是雪花,取决于性能优先,还是避免冗余、灵活更优先,星型因为数据的冗余所以很多统计查询不需要做外部的连接,因此一般情况下效率比雪花型模型要高,但雪花模型冗余较小。
数据仓库大多数时候是比较适合使用星型模型构建底层数据Hive表,通过大量的冗余来提升查询效率,星型模型对OLAP的分析引擎支持比较友好,这一点在Kylin中比较能体现。而雪花模型在关系型数据库中如MySQL,Oracle中非常常见,尤其像电商的数据库表。在数据仓库中雪花模型的应用场景比较少,但也不是没有,所以在具体设计的时候,可以考虑是不是能结合两者的优点参与设计,以此达到设计的最优化目的。实际企业开发中,一般不会只选择一种,需要根据情况灵活组合,甚至并存(一层维度和多层维度都保存)。整体来看,更倾向于维度更少的星型模型。尤其是大型数据仓库项目,减少表连接的次数,可以显著提升查询效率。
事实表(Fact Table)是指存储事实记录的表,如系统日志、销售记录等,并且是维度模型的主表,代表着链接维度表的键和度量的集合。事实表的记录会断的动态增长,所以他的体积通常远大于其他表,通常事实表要占据数据仓库中90%或者更多的空间。
维度表(Dimension Table),也成维表或查找表(Lookup Table),是与事实表相对应的一种表。维度表的目的是将业务含义和上下文添加到数据仓库中的事实表和度量中。维度表是事实表的入口点,维度表实现了数据仓库的业务接口。它们基本上是事实表中的键引用的查找表。他保存了维度的属性值,可以与事实表做关联,相当于将事实表上经常出现的属性抽取。规范出来让一张表进行管理,常见的维度表有:日期表(存储日期对应的周、月、季度等属性)、地点表(包含国家、省、城市等属性)等。使用维度表的好处如下:
商业智能(Business Intelligence,简称BI)的关键是从许多来自不同的企业运作系统的数据中提取出有用的数据并进行清理,以保证数据的正确性,然后经过抽取(Extraction)、转换(Transformation)和装载(Load),即ETL过程,合并到一个企业级的数据仓库里,从而得到企业数据的一个全局视图,在此基础上利用合适的查询和分析工具、数据挖掘工具、OLAP工具等对其进行分析和处理(这时信息变为辅助决策的知识),最后将知识呈现给管理者,为管理者的决策过程提供支持。
简单来说,BI通常被理解为将企业中现有的数据转化为知识,帮助企业做出明智的业务经营决策的工具。为了将数据转化为知识,需要利用数据仓库、联机分析处理(OLAP)工具和数据挖掘等技术。
数据处理大致可以分成两大类:联机事务处理OLTP(on-line transaction processing)、联机分析处理OLAP(On-Line Analytical Processing); OLTP是传统的关系型数据库的主要应用,主要是基本的、日常的事务处理,例如银行交易。OLAP是数据仓库系统的主要应用,支持复杂的分析操作,侧重决策支持,并且提供直观易懂的查询结果。
OLAP系统按照其存储器的数据存储格式可以分为关系OLAP(RelationalOLAP,简称ROLAP)、多维OLAP(MultidimensionalOLAP,简称MOLAP)和混合型OLAP(HybridOLAP,简称HOLAP)三种类型。
也就是说MOLAP是空间换时间,即把所有的分析情况都物化为物理表或者视图,查询的时候直接从相应的物化表中获取数据, 而ROLAP则通过按维度分库,分表等方式,实现单一维度下的快速查询,通过分布式框架,并行完成分析任务,来实现数据的分析功能。MOLAP 实现较简单,但当分析的维度很多时,数据量呈指数增长,而ROLAP在技术实现上要求更高,但扩展性也较好。
更多的关于OLAP的知识,推介大家看机械工业出版社出版的《数据挖掘-概念与技术》
维度和度量是数据分析中的两个基本概念。
维度是人们观察数据的特定角度,是考虑问题的一类属性。他通常是数据记录的一个特征,如时间、地点等。同时,维度具有层级概念,可能存在细节程度不同的描述方面,如日期、月份、季度、年等。
在数仓中,可以在数学上求和的事实属性称为度量。例如,可以对度量进行总计、平均、以百分比形式使用等。度量是维度模型的核心。通常,在单个查询中检索数千个或数百万个事实行,其中对结果集执行数学方程。
在一个SQL查询中,Group by的属性通常就是维度,而所计算的值则是度量。