构建企业级数据仓库五步法

(一)、确定主题

即确定数据分析或前端展现的主题。例如:我们希望分析某年某月某一地区的啤酒销售情况,这就是一个主题。主题要体现出某一方面的各分析角度(维度)和统计数值型数据(量度)之间的关系,确定主题时要综合考虑。

我们可以形象的将一个主题想象为一颗星星:统计数值型数据(量度)存在于星星中间的事实表;分析角度(维度)是星星的各个角;我们将通过维度的组合,来考察量度。那么,“某年某月某一地区的啤酒销售情况”这样一个主题,就要求我们通过时间和地区两个维度的组合,来考察销售情况这个量度。从而,不同的主题来源于数据仓库中的不同子集,我们可以称之为数据集市。数据集市体现了数据仓库某一方面的信息,多个数据集市构成了数据仓库。

(二)、确定量度

在确定了主题以后,我们将考虑要分析的技术指标,诸如年销售额之类。它们一般为数值型数据。我们或者将该数据汇总,或者将该数据取次数、独立次数或取最大最小值等,这样的数据称为量度。

量度是要统计的指标,必须事先选择恰当,基于不同的量度可以进行复杂关键性能指标(
KPI
)等的设计和计算。

(三)、确定事实数据粒度

在确定了量度之后,我们要考虑到该量度的汇总情况和不同维度下量度的聚合情况。考虑到量度的聚合程度不同,我们将采用“最小粒度原则”,即将量度的粒度设置到最小。

例如:假设目前的数据最小记录到秒,即数据库中记录了每一秒的交易额。那么,如果我们可以确认,在将来的分析需求中,时间只需要精确到天就可以的话,我们就可以在
ETL
处理过程中,按天来汇总数据,此时,数据仓库中量度的粒度就是“天”;反过来,如果我们不能确认将来的分析需求在时间上是否需要精确到秒,那么,我们就需要遵循“最小粒度原则”,在数据仓库的事实表中保留每一秒的数据,以便日后对“秒”进行分析。

在采用“最小粒度原则”的同时,我们不必担心海量数据所带来的汇总分析效率问题,因为在后续建立多维分析模型(
CUBE
)的时候,我们会对数据提前进行汇总,从而保障产生分析结果的效率。关于建立多维分析模型( CUBE
)的相关问题,我们将在下期栏目中予以阐述。

(四)、确定维度

维度是指分析的各个角度。例如我们希望按照时间,或者按照地区,或者按照产品进行分析,那么这里的时间、地区、产品就是相应的维度。基于不同的维度,我们可以看到各量度的汇总情况,也可以基于所有的维度进行交叉分析。

这里我们首先要确定维度的层次( Hierarchy
)和级别( Level
) (图四: pic4.bmp
) 。如图所示,我们在时间维度上,按照“年 - 季度 -
月”形成了一个层次,其中“年”、“季度”、“月”成为了这个层次的 3
个级别;同理,当我们建立产品维度时,我们可以将“产品大类 -
产品子类 -
产品”划为一个层次,其中包含“产品大类”、“产品子类”、“产品”三个级别。

那么,我们分析中所用到的这些维度,在数据仓库中的存在形式是怎样的呢?

我们可以将 3
个级别设置成一张数据表中的 3
个字段,比如时间维度;我们也可以使用三张表,分别保存产品大类、产品子类、产品三部分数据,比如产品维度。(图五:
pic5.bmp

另外,值得一提的是,我们在建立维度表时要充分使用代理键。代理键是数值型的
ID
号码(例如图六中每张表的第一个字段),它唯一标识了每一维度成员。更重要的是,在聚合时,数值型字段的匹配和比较,
JOIN
效率高,便于聚合。同时,代理键对缓慢变化维度有着重要的意义,在原数据主键相同的情况下,它起到了对新数据与历史数据的标识作用。

在此,我们不妨谈一谈维度表随时间变化的问题,这是我们经常会遇到的情况,我们称其为缓慢变化维度。

比如我们增加了新的产品,或者产品的 ID
号码修改了,或者产品增加了一个新的属性,此时,维度表就会被修改或者增加新的记录行。这样,我们在 ETL
的过程中,就要考虑到缓慢变化维度的处理。对于缓慢变化维度,有三种情况:

1
、缓慢变化维度第一种类型:历史数据需要修改。这种情况下,我们使用 UPDATE
方法来修改维度表中的数据。例如:产品的 ID
号码为 123
,后来发现 ID
号码错了,需要改写成 456
,那么,我们就在 ETL
处理时,直接修改维度表中原来的 ID
号码为 456

2
、缓慢变化维度第二种类型:历史数据保留,新增数据也要保留。这时,要将原数据更新,将新数据插入,我们使用 UPDATE /
INSERT 。比如:某一员工 2005
年在 A
部门, 2006
年时他调到了 B
部门。那么在统计 2005
年的数据时就应该将该员工定位到 A
部门;而在统计 2006
年数据时就应该定位到 B
部门,然后再有新的数据插入时,将按照新部门( B
部门)进行处理,这样我们的做法是将该维度成员列表加入标识列,将历史的数据标识为“过期”,将目前的数据标识为“当前的”。另一种方法是将该维度打上时间戳,即将历史数据生效的时间段作为它的一个属性,在与原始表匹配生成事实表时将按照时间段进行关联,这种方法的好处是该维度成员生效时间明确。

3
、缓慢变化维度第三种类型:新增数据维度成员改变了属性。例如:某一维度成员新加入了一列,该列在历史数据中不能基于它浏览,而在目前数据和将来数据中可以按照它浏览,那么此时我们需要改变维度表属性,即加入新的字段列。那么,我们将使用存储过程或程序生成新的维度属性,在后续的数据中将基于新的属性进行查看。

(五)、创建事实表

在确定好事实数据和维度后,我们将考虑加载事实表。

在公司的大量数据堆积如山时,我们想看看里面究竟是什么,结果发现里面是一笔笔生产记录,一笔笔交易记录

那么这些记录是我们将要建立的事实表的原始数据,即关于某一主题的事实记录表。

我们的做法是将原始表与维度表进行关联,生成事实表
(图六: pic6.bmp

。注意在关联时有为空的数据时(数据源脏),需要使用外连接,连接后我们将各维度的代理键取出放于事实表中,事实表除了各维度代理键外,还有各量度数据,这将来自原始表,事实表中将存在维度代理键和各量度,而不应该存在描述性信息,即符合“瘦高原则”,即要求事实表数据条数尽量多(粒度最小),而描述性信息尽量少。

如果考虑到扩展,可以将事实表加一唯一标识列,以为了以后扩展将该事实作为雪花型维度,不过不需要时一般建议不用这样做。

事实数据表是数据仓库的核心,需要精心维护,在 JOIN
后将得到事实数据表,一般记录条数都比较大,我们需要为其设置复合主键和索引,以实现数据的完整性和基于数据仓库的查询性能优化。事实数据表与维度表一起放于数据仓库中,如果前端需要连接数据仓库进行查询,我们还需要建立一些相关的中间汇总表或物化视图,以方便查询。

时间: 2024-12-14 23:33:55

构建企业级数据仓库五步法的相关文章

ETL构建数据仓库五步法

ETL构建企业级数据仓库五步法 在数据仓库构建中,ETL贯穿于项目始终,它是整个数据仓库的生命线,包括了从数据清洗,整合,到转换,加载等的各个过程,如果说数据仓库是一座大 厦,那 么ETL就是大厦的根基,ETL抽取整合数据的好坏直接影响到最终的结果展现.所以ETL在整个数据仓库项目中起着十分关键的作用,必须摆到十分重要的位 置.一.什么是ETLETL是数据抽取(Extract).转换(Transform).加载(Load )的简写,它是将OLTP系统中的数据经过抽取,并将不同数据源的数据进行转换

华为云企业级数据仓库DWS

华为云企业级数据仓库DWS 华为云DWS已在金融.车联网.政企.电商.能源.电信等多个领域的300+大客户规模商用,客户普遍表示DWS的查询分析性能优于Oracle数十倍,并且具备大规模扩展能力和企业级可靠性,是企业数据仓库的最佳选择之一.那么华为云DWS到底有哪些优势? 分布式架构.MPP大规模并行引擎,支撑T+0业务敏捷决策 DWS基于Shared-nothing分布式架构,具备MPP大规模并行处理引擎,支持行列混合存储,具有CBO智能代价模型.B-Tree索引.延迟物化.LLVM等等一系列

Glusterfs构建企业级分布式存储(三)

构建企业级分布式存储 硬件要求 一般选择2U的机型,磁盘STAT盘4T,如果I/O 要求比较高,可以采购SSD固态硬盘. 为了充分保证系统的稳定性和性能,要求所有glusterfs服务器硬件配置尽量一致,尤其是硬盘数量和大小.机器的RAID卡需要带电池,缓存越大,性能越好. 一般情况下,建议做RAID10,如果出于空间要求的考虑,需要做RAID5,建议最好能有1-2块硬盘的热备盘. 系统要求和分区划分 系统要求使用centos 6.x,安装完成后升级到最新版本,安装的时候,不要使用LV,建议/b

Ajax使用的五步法

Ajax使用的五步法 <script type="text/javascript">           //用于保存XMLHttpRequest对象的变量,由于整个过程中必须使用同一个XMLHttpRequest对象,所以要定义成全局的           var xmlhttp;           function submit()           {               //第一步:创建XMLHttpRequest对象               if(

Hadoop高级编程之为Hadoop实现构建企业级安全解决方案

本章内容提要 ●    理解企业级应用的安全顾虑 ●    理解Hadoop尚未为企业级应用提供的安全机制 ●    考察用于构建企业级安全解决方案的方法 第10章讨论了Hadoop安全性以及Hadoop中用于提供安全控制的机制.当构建企业级安全解决方案(它可能会围绕着与Hadoop数据集交互的许多应用程序和企业级服务)时,保证Hadoop自身的安全仅仅是安全解决方案的一个方面.各种组织努力对数据采用一致的安全机制,而数据是从采用了不同安全策略的异构数据源中提取的.当这些组织从多个源获取数据,接

跟我上“云”端(四)使用eclipselink构建企业级多租户应用

上一篇博客中我们介绍了多租户的数据隔离,文中具体的介绍了hibernate和eclipselink对于多租户的实现情况,博客的最后,我也对hibernate实现多租户的细节上做了解释,这次,我想带大家一起来使用eclipselink构建企业级的多租户项目. eclipselink的三种实现 由于eclipselink完整实现了jpa规范,我们就可以使用ejb构建一个企业级的多租户项目,首先eclipselink支持3中多租户的模式: - Single-Table Multi-tenancy,依靠

《Hadoop高级编程》之为Hadoop实现构建企业级安全解决方案

本章内容提要 ●    理解企业级应用的安全顾虑 ●    理解Hadoop尚未为企业级应用提供的安全机制 ●    考察用于构建企业级安全解决方案的方法 第10章讨论了Hadoop安全性以及Hadoop中用于提供安全控制的机制.当构建企业级安全解决方案(它可能会围绕着与Hadoop数据集交互的许多应用程序和企业级服务)时,保证Hadoop自身的安全仅仅是安全解决方案的一个方面.各种组织努力对数据采用一致的安全机制,而数据是从采用了不同安全策略的异构数据源中提取的.当这些组织从多个源获取数据,接

滴滴出行基于RocketMQ构建企业级消息队列服务的实践

小结: 1. https://mp.weixin.qq.com/s/v6NM3UgX-qTI7yO1QPCJrw 滴滴出行基于RocketMQ构建企业级消息队列服务的实践 原创: 江海挺 阿里巴巴中间件 2018-11-01 原文地址:https://www.cnblogs.com/yuanjiangw/p/10780829.html

构建企业级数据湖?Azure Data Lake Storage Gen2不容错过(上)

背景 相较传统的重量级OLAP数据仓库,“数据湖”以其数据体量大.综合成本低.支持非结构化数据.查询灵活多变等特点,受到越来越多企业的青睐,逐渐成为了现代数据平台的核心和架构范式. 数据湖的核心功能,简单地可以分为数据存储与数据查询计算两个部分,在云端可以有多种的实现选择.在之前的文章中,我们曾介绍Azure上Azure Data Lake Storage (ADLS Gen1)和Azure Data Lake Analytics (ADLA)这一对可配合使用的服务.这对黄金搭档正是为数据湖而生