数据仓库和BI技术概况.docx

上传人:夺命阿水 文档编号:428011 上传时间:2023-06-13 格式:DOCX 页数:24 大小:268.17KB
返回 下载 相关 举报
数据仓库和BI技术概况.docx_第1页
第1页 / 共24页
数据仓库和BI技术概况.docx_第2页
第2页 / 共24页
数据仓库和BI技术概况.docx_第3页
第3页 / 共24页
数据仓库和BI技术概况.docx_第4页
第4页 / 共24页
数据仓库和BI技术概况.docx_第5页
第5页 / 共24页
点击查看更多>>
资源描述

《数据仓库和BI技术概况.docx》由会员分享,可在线阅读,更多相关《数据仓库和BI技术概况.docx(24页珍藏版)》请在课桌文档上搜索。

1、1.数据仓库和Bl技术概况1.L概念数据仓库项目是以关系数据库为依托,以数据仓库理论为指导、以OLAP为多层次多视角分析,以ETL工具进行数据集成、整合、清洗、加载转换,往常端工具进行前端报表展现浏览,以反复叠代验证为生命周期的综合处理过程。最终目标是为了达到整合企业信息信息,把数据转换成信息、知识,提供决策支持。12数据源数据库、磁带、文件、网页等等。同一主题的数据可能存储在不一致的数据库、磁带、甚至文件、网页里都有。13数据粒度粒度问题第一反应了数据细化程度;第二在决策分析层面粒度越大,细化程度越低。通常情况,数据仓库需求存储不一致粒度的数据来满足不一致层面的要求。例子如顾客的移动话费信息

2、。14数据分割分割结构相同的数据,保证灵活的访问数据。15设计数据仓库 与OLTP系统的接口设计:ETL设计 数据仓库本身存储模型的设计:数据存储模型设计1.6.ETL设计难点数据仓库有多个应用数据源,导致同一对象描述方式不一致: 表达方式不一致:字段类型不一致 度量方式不一致:单位不一致 对象命名方式不一致:字段名称不一致 数据源的数据是逐步加载到数据仓库,怎么确定数据己经加载过 如何避免对已经加载的数据的读取,提高性能 数据实时发生变化后怎么加载2数据存储模型过程模型:适用于操作性环境。数据模型:适用于数据仓库与操作性环境。数据模型从设计的角度分:高层次模型(实体关系型),中间层建模(数据

3、项集),物理模型。2.1.数据仓库的存储方式数据仓库的数据由两种存储方式:一种是存储在关系数据库中,另一种是按多维的方式存储,也就是多维数组。22数据仓库的数据分类数据仓库的数据分元数据与用户数据。用户数据按照数据粒度分别存放,通常分四个粒度:早期细节级数据,当前细节级数据,轻度综合级,高度综合级。元数据是定义了数据的数据。传统数据库中的数据字典或者者系统目录都是元数据,在数据仓库中元数据表现为两种形式:一种是为了从操作型环境向数据仓库环境转换而建立的元数据,它包含了数据源的各类属性与转换时的各类属性;另一种元数据是用来与多维模型与前端工具建立映射用的。23数据存储模型分类多维数据建模以直观的

4、方式组织数据,并支持高性能的数据访问。每一个多维数据模型由多个多维数据模式表示,每一个多维数据模式都是由一个事实表与一组维表构成的。多维模型最常见的是星形模式。在星形模式中,事实表居中,多个维表呈辐射状分布于其四周,并与事实表连接。在星型的基础上,进展出雪花模式。通常来说,数据仓库使用星型模型。2.3.1. 星型模型位于星形中心的实体是指标实体,是用户最关心的基本实体与查询活动的中心,为数据仓库的查询活动提供定量数据。每个指标实体代表一系列有关事实,完成一项指定的功能。位于星形图星角上的实体是维度实体,其作用是限制用户的查询结果,将数据过滤使得从指标实体查询返回较少的行,从而缩小访问范围。每个

5、维表有自己的属性,维表与事实表通过关键字有关联。星形模式尽管是一个关系模型,但是它不是一个规范化的模型。在星形模式中,维度表被有意地非规范化了,这是星形模式与OLTP系统中的关系模式的基本区别。使用星形模式要紧有两方面的原因:提高查询的效率。使用星形模式设计的数据仓库的优点是由于数据的组织已通过预处理,要紧数据都在庞大的事实表中,因此只要扫描事实表就能够进行查询,而不必把多个庞大的表联接起来,查询访问效率较高。同时由于维表通常都很小,甚至能够放在高速缓存中,与事实表作连接时其速度较快;便于用户懂得。关于非计算机专业的用户而言,星形模式比较直观,通过分析星形模式,很容易组合出各类查询。总结一下星

6、型模型的特点: 非正规化; 多维数据集中的每一个维度都与事实表连接(通过主键与外键); 不存在渐变维度; 有冗余数据; 查询效率可能会比较高; 不用过多考虑正规化因素,设计保护较为简单2.3.2. 雪花模型在实际应用中,随着事实表与维表的增加与变化,星形模式会产生多种衍生模式,包含星系模式、星座模式、二级维表与雪花模式。雪花模式是对星形模式维表的进一步层次化,将某些维表扩展成事实表,这样既能够应付不一致级别用户的查询,乂能够将源数据通过层次间的联系向上综合,最大限度地减少数据存储量,因而提高了查询功能。雪花模式的维度表是基于范式理论的,因此是界于第三范式与星形模式之间的一种设计模式,通常是部分

7、数据组织使用第三范式的规范结构,部分数据组织使用星形模式的事实表与维表结构。在某些情况下,雪花模式的形成是由于星形模式在组织数据时,为减少维表层次与处理多对多关系而对数据表进行规范化处理后形成的。雪花模式的优点是:在一定程度上减少了存储空间;规范化的结构更容易更新与保护。同样雪花模式也存在很多缺点:雪花模式比较复杂,用户不容易懂得;浏览内容相对困难;额外的连接将使查询性能下降。在数据仓库中,通常不推荐“雪花化由于在数据仓库中,查询性能相对OLTP系统来说更加被重视,而雪花模式会降低数据仓库系统的性能。总结一下雪花模型的特点: 正规化; 数据冗余少; 有些数据需要连接才能获取,可能效率较低; 规

8、范化操作较复杂,导致设计及后期保护复杂。实际应用中,能够采取上述两种模型的混合体。如:中间层使用雪花结构以降低数据冗余度,数据集市部分使用星型以方便数据提取及分析3 .前端分析应用模型是指为数据挖掘与数据分析与预测定义的数据模型,有数据库模型与电子表模型。主流的产品有:DB2OLAPserverMSOLAPAnalysisserver3.1. 电子表模型在电子表中能够向单元格中插入数值或者公式。电子表关于复杂的公式很有帮助,由于它便于用户操控。电子表的缺点之一是它在大小方面很受限制,同时电子表本质上只是一个二维结构。使用电子表存储模型构建的OSP多维数据集能够把这个模型扩展为支持多个维度,同时

9、比常规的电子表大很多。在基于电子表模型的OSP中,整个多维数据集中的任何单元格都有可能被物理地存储。这既是好事也是坏事。优点是能够在多维数据集空间内的任何点上输入常量值,同时在多维数据集空间内的任何点上储存计算的结果。缺点是一个称之数据爆炸的小问题,它限制了OSP多维数据集的大小。基于电子表的OLAP工具往往与财务应用程序有关联。多数财务应用程序都涉及相对较小但具有复杂的非累加性(noadditive)计算的数据库。32数据库模型使用数据库模型来存储多维数据集的OLAP工具的行为截然不一致。它们利用了多数报表都需要加操作,还有相加是个关联操作这个事实。比如把数字3、5与7相加时,不管是先把3与

10、5相加得到8然后再加上7,还是先把5与7相加得到12然后再加上3都没有关系。两种情况下结果都是15。在纯粹的关系数据库中,通过创建具体表以得到快速的查询结果。在聚合表中存储的是报表需要的预先加好的数值。比如在一个包含了几千种产品、5年明细数据,也许还有其他几个维度的事实表中,可能存储了几百万行数据,即使在只有50个子类别与20个季度的情况下,也需要好几分钟来生成一个按产品子类别或者季度分组的报表。但假如先把这些数据汇总起来,并储存到只包含子类别与季度的聚合表中,那么该表中最多只有一千行数据,而且只根据子类别或者季度分组的查询将执行得很快。事实上,根据加操作的关联性,根据产品类别或者年进行汇总的

11、报表也能够使用相同的聚合表,同样也能很快地产生结果。使用数据库模型进行存储的OLAP最大的优点是能够避免数据爆炸。由于使用相对较少的聚合表提供快速的结果,能够创建比电子表模型拥有更多维度与属性的更大的多维数据集。使用数据库模型进行存储的OLAP最大的缺点是,没有固有的方法来存储使用非关联性操作计算的结果。一个极端复杂的财务计算就是留存收益(RetainedEarningSincelnception)o为了计算这个值,务必首先计算纯收益一一而它本身就是各类加、减与乘法的大杂检。同时还务必计算每个时间段从开始时间点的纯收益值,以便把它们加到一起。这不是个关联操作,因此为业务的每个单元分别计算并不能

12、使整个公司的计算更加容易。即使是使用数据库模型存储的OLAP多维数据集也能快速地计算某些非关联操作。比如,平均销售价格并不是一个可累加值(additivevalue)一一不能简单地把价格相加起来。但在整个产品线层次计算平均销售价格时,只要简单地计算出销售额与销售量的总数,然后在产品线层次用销售额总数除以销售量总数。由因此在计算两个可累加值的比率,所及本质上该计算将与获取简单的可累加值一样快。数据库形式的OLAP工具通常与销售或者类似的数据库关联。销售多维数据集通常都非常巨大一一不仅有上亿条的事实表数据,同时还有具有很多属性的维度。销售多维数据集通常都涉及累加性的度量值(美元与数量通常都是可累加

13、的),或者者是能够基于可累加值快速计算的公式。OLAP的一个要紧优点就是能够提早计算数值,这样就能快速地呈现报表。不一致的OLAP技术有不一致的优势与劣势,但一个好的OLAP实现了在涉及高度汇总值时比等同的关系查询快很多。4 .数据集市4 .L概念数据集市是一个小型的基于企业的一个组织或者者部门的数据仓库。有两种类型的数据集市:独立型与从属型。独立型数据集市从操作性数据库中获取数据;从属型数据集市从企业级数据仓库中获取数据。大家能够考虑一下:哪一种数据集市更为稳固?5 .ETL随着企业信息化的进展,有两种方式能够完成系统间的协作与数据分析挖掘。一种是EAl,一种是ETL。这两种方式哪一种更好,

14、下面我们会给予解释分析。5.1. EAI5.1.1. 概念为熟悉决企业内部信息孤岛的问题,企业应用集成(EnterPriSeApplicationIntegration,EAD技术应运而生,它能够通过中间件作为粘合剂来连接企业内外各类业务有关的异构系统、应用与数据源,从而满足E-Commerce、ERP、CRM、SCM、0A、数据库、数据仓库等重要系统之间无缝共享与交换数据的需要。EAI涉及技术广泛,实施复杂。EAI的核心是使用中间件连接企业应用。有多种不一致类型的中间件能够提供EAl的功能。在选择EAl中间件时,要注意基本特征如下: 通过中间件将不一致的应用连接起来,保证应用的独立性,在不需

15、要修改应用自身的业务逻辑的同时,又解决了数据共享问题。 对核心共享业务数据模型的处理与支持 实现业务流程自动化。确保各个部门在使用不一致的系统的同时能够协同完成同一个工作。 对流程管理提供预定义的通用模型与行业模型 支持应用架构的不断变更。能够方便地重新配制以增加或者去除系统而不可能影响其它系统。 既能够提供实时接口与批处理接口,又能够提供同步与异步接口 良好的性能与数据吞吐量,同时具有灵活的可扩展性以习惯企业的进展 保证数据的安全的方式是根据需要有目的能够读取应用数据 务必具备恢复机制,当数据传输过程中发生连接中断等特殊时能够确保数据的恢复一个完整的EAI解决方案应当包含下列五个层面: 用户

16、交互:实现应用用户界面统一的接入与安全机制,利用门户技术进行构建。 应用连接:通过HUB或者总线架构,实现应用与应用之间的连接,完成有关的数据路由与数据格式转换。 业务流程整合:实现业务流程管理,包含工作流管理与自动化流程两个方面。 构建整合:这个层面包含两个部分,一部分是构建与现有应用兼容的新应用,另一部分是对现有资源进行重用以习惯新环境的需要。 信息集成:实现数据集成,在异构的数据源之间实现数据层的直接整合有关技术:EAl解决方案通常涉及到JCA、JMS.Web服务与XML等多种企业级技术。这些技术都已经成为业界的标准,从而能够最大化地保护客户投资。这些技术既能够被包含在有关产品中供用户透

17、明地使用,也能够由用户自己在应用程序中加以调用。此外,SOA(面向服务的架构)随着各大厂商的追捧而变得炙手可热。尽管SOA本身不是一个全新的概念,但由于Web服务与网格计算等技术的成熟,SoA具备了更好的进展条件。关于EAl来说,基于SOA的企业应用系统能够随着企业业务的变化而逐步变化,能够实现“柔性化”的软件系统,从而降低实施EAI的成本与风险,因此我们能够说SOA的兴起给了EAI厂商一个新的机会。5.2. ETL5.2.1. 概念ETL即数据抽取(Extract)转换(Transform)、装载(Load)的过程。它是构建数据仓库的重要环节。数据仓库是面向主题的、集成的、稳固的且随时间不断

18、变化的数据集合,用以支持经营管理中的决策制定过程。数据仓库系统中有可能存在着大量的噪声数据,引起的要紧原因有:滥用缩写词、惯用语、数据输入错误、重复记录、丢失值、拼写变化等。即便是一个设计与规划良好的数据库系统,假如其中存在着大量的噪声数据,那么这个系统也是没有任何意义的,由于“垃圾进,垃圾出(garbagein,garbageout),系统根本就不可能为决策分析系统提供任何支持。为了清除噪声数据,务必在数据库系统中进行数据清洗。目前有很多数据清洗研究与ETL研究,但是如何在ETL过程中进行有效的数据清洗并使这个过程可视化,此方面研究不多。木文要紧从两个方面阐述ETL与数据清洗的实现过程:ET

19、L的处理方式与数据清洗的实现方法。5.2.2. ETL的处理方式还有一种方式,假如数据量小,没有什么转换逻辑的时候,自己开发ETL大概非常节约成本的一种好方式。但是假如不能得到厂家长期的支持,必定随着数据量的增加,ETL复杂度的增加,自己开发ETL成本就不低了。53ETL与EAl之间的关系随着集成的增多,企业信息系统之间需处理的数据量也将越来越大,数据的传输将变得越来越复杂。ETL越来越适合用于这种数据处理的工作,并逐步挑战传统EAI(enterpriseapplicationintegration)在系统集成中的地位了。ETL(extraction,transformationandIoad

20、ing)最初ETL的设计是为了方便建立数据市场与数据仓库,并将它们升级为批处理方式。而下一代的ETL工具则在许多功能上做了扩展,使其能够适用于企业的应用集成,同时其中的一些工具将能够起到EAI某些工具的作用。但是ETL还不能取代EAI,下一代ETL在应用集成领域中还只是EAI的补充。但是随着ETL技术的进展,企业在建立基于批处理数据仓库的系统集成工具时,将越来越关注对ETL的选择,同时EAI与ETL之间的界限也将变得越来越模糊。5.4. ETL与EAI之间的区别ETL工具适合数据集成,EAl工具则适用于流程操作。ETL工具更加适用于解决两个系统间数据的批量或者者实时同步工作,特别是当大量巨大的

21、数据在两个系统间提取、转换与存储时,ETL的优势更加明显。EAI则适用于工作流与商业流程管理的需求,特别是擅长处理大量小事务。关于交互式流程,假如它没有扩展工作流的需求,没有复杂数据的转换的需求,或者者需要批量实时数据的合并处理,则工具将是比较好的选择。ETL工具比较适合于数据集成的工作,如应用系统之间的数据同步与点对点的单步交互工作:需要实时数据处理的工作中包含了大量的数据处理、复杂的数据传输与数据运算,它同样适合使用ETL工具。上面这些工作,即便是有些具体的处理需要通过EAI工具编程实现,我们还是能够用ETL中的工具来处理。由于ETL工具要紧是通过关系型数据库来实现大量数据操作的,因此使用

22、这类工具来传输大块的数据将取得更好的效果。EAl工具无疑是最适合流程集成的工具,假如流程中包含了大量的传输,那么它就必定包含了对业务流程的管理与实时交互的流程。5.5. ETL各阶段任务做数据仓库系统,ETL是关键的一环。说大了,ETL是数据整合解决方案,说小了,就是倒数据的工具。从名字上就能够看到,将倒数据的过程分成3个步骤,E、T、L分别代表抽取、转换与装载。事实上ETL过程就是数据流淌的过程,从不一致的数据源流向不一致的目标数据。但在数据仓库中,ETL有几个特点,一是数据同步,它不是一次性倒完数据就拉到,它是经常性的活动,按照固定周期运行的,甚至现在还有人提出了实时ETL的概念。二是数据

23、量,通常都是巨大的,值得你将数据流淌的过程拆分成E、T与L。56ETL难点5.6.1. 难点一ETL的过程就是数据流淌的过程,从不一致异构数据源流向统一的目标数据。其间,数据的抽取、清洗、转换与装载形成串行或者并行的过程。ETL的核心还是在于T这个过程,也就是转换,而抽取与装载通常能够作为转换的输入与输出,或者者,它们作为一个单独的部件,其复杂度没有转换部件高。与OLTP系统中不一致,那里充满这单条记录的insert.UPdate与SeIeCt等操作,ETL过程通常都是批量操作,比如它的装载多使用批量装载工具,通常都是DBMS系统自身附带的工具,比如OradeSQLLoader与DB2的aut

24、oloader等。ETL本身有一些特点,在一些工具中都有表达,下面以datastage与powermart举例来说。 静态的ETL单元与动态的ETL单元实例;一次转换指明了某种格式的数据如何格式化成另一种格式的数据,关于数据源的物理形式在设计时能够不用指定,它能够在运行时,当这个ETL单元创建一个实例时才指定。关于静态与动态的ETL单元,DataStage没有严格区分,它的一个Job就是实现这个功能,在早期版本,一个Job同时不能运行两次,因此一个Job相当于一个实例,在后期版本,它支持multipleinstances,而且还不是默认选项。POWermart中将这两个概念加以区分,静态的叫做

25、Mapping,动态运行时叫做Sessiono ETL元数据;元数据是描述数据的数据,他的含义非常广泛,这里仅指ETL的元数据。要紧包含每次转换前后的数据结构与转换的规则。ETL元数据还包含形式参数的管理,形式参数的ETL单元定义的参数,相对还有实参,它是运行时指定的参数,实参不在元数据管理范围之内。 数据流程的操纵:要有可视化的流程编辑工具,提供流程定义与流程监控功能。流程调度的最小单位是ETL单元实例,ETL单元是不能在细分的ETL过程,当然这由开发者来操纵,比如能够将抽取、转换放在一个ETL单元中,那样这个抽取与转换只能同时运行,而假如将他们分作两个单元,能够分别运行,这有利于错误恢复操

26、作。当然,ETL单元毕竟应该细分到什么程度应该根据具体应用来看,目前还没有找到很好的细分策略。比如,我们能够规定将装载一个表的功能作为一个ETL单元,但是不可否认,这样的ETL单元之间会有很多共同的操作,比如两个单元共用一个HaSh表,要将这个HaSh表装入内存两次。 转换规则的定义方法;提供函数集提供常用规则方法,提供规则定义语言描述规则。 对数据的快速索引;通常都是利用HaSh技术,将参照关系表提早装入内存,在转换时查找这个hash表。DataStage中有Hash文件技术,Powermart也有类似的LOOkUP功能。5.6.2. 难点二一分类我们眼中的ETL工具都是价格昂贵,能够处理海

27、量数据的家伙,但是这是其中的一种。它能够分成4种,针对不一致的需求,要紧是从转换规则的复杂度与数据量大小来看。它们包含: 交互式运行环境,你能够指定数据源、目标数据,指定规则,立马ETL。这种交互式的操作无疑非常方便,但是只能适合小数据量与复杂度不高的ETL过程,由于一旦规则复杂了,可能需要语言级的描述,不能简简单单拖拖拽拽就能够的。还有数据量的问题,这种交互式必定建立在解释型语言基础上,另外他的灵活性必定要牺牲一定的性能为代价。因此假如要处理海量数据的话,每次读取一条记录,每次对规则进行解释执行,每次在写入一条记录,这对性能影响是非常大的。 专门编码型的,它提供了一个基于某种语言的程序框架,

28、你能够不必将编程精力放在一些周边的功能上,比如读文件功能、写数据库的功能,而将精力要紧放在规则的实现上面。这种近似手工代码的性能确信是没话说,除非你的编程技巧只是关(这也是不可忽视的因素之一)。关于处理大数据量,处理复杂转换逻辑,这种方式的ETL实现是非常直观的。 代码生成器型的,它就像是一个ETL代码生成器,提供简单的图形化界面操作,让你拖拖拽拽将转换规则都设定好,事实上他的后台都是生成基于某种语言的程序,要运行这个ETL过程,务必要编译才行。DataStage就是类似这样的产品,设计好的job务必要编译,这避免了每次转换的解释执行,但是不明白它生成的中间语言是什么。往常我设计的ETL工具大

29、挪移事实上也是归属于这一类,它提供了界面让用户编写规则,最后生成C+语言,编译后即可运行。这类工具的特点就是要在界面上下狠功夫,务必让用户轻松定义一个ETL过程,提供丰富的插件来完成读、写与转换函数。大挪移在这方面就太弱了,规则务必手写,而且要写成标准C+语法,这未免还是有点难为最终用户了,还不如做成一个专业编码型的产品呢。另外一点,这类工具务必提供面向专家应用的功能,由于它不可能考虑到所有的转换规则与所有的读写,一方面提供插件接口来让第三方编写特定的插件,另一方面还有提供特定语言来实现高级功能。比如DataStage提供一种类Basic的语言,只是他的Job的脚本化实现好像就做的不太好,只能

30、手工绘制job,而不能编程实现Job“ 最后还有一种类型叫做数据集线器,顾名思义,他就是像Hub一样地工作。将这种类型分出来与上面几种分类在标准上有所差异,上面三种更多指ETL实现的方法,此类要紧从数据处理角度。目前有一些产品属于EAI(EnterpriseApplicationIntegration),它的数据集成要紧是一种准实时性。因此这类产品就像Hub一样,不断接收各类异构数据源来的数据,通过处理,在实施发送到不一致的目标数据中去。尽管,这些类看似各又千秋,特别在Bl项目中,面对海量数据的ETL时,中间两种的选择就开始了,在选择过程中,务必要考虑到开发效率、保护方面、性能、学习曲线、人员

31、技能等各方面因素,当然还有最重要也是最现实的因素就是客户的意象。5.6.3. 难点三一转换ETL难点一中提到,ETL过程最复杂的部分就是T,这个转换过程,T过程毕竟有什么类型呢?宏观输入输出从对数据源的整个宏观处理分,看看一个ETL过程的输入输出,能够分成下面几类: 大小交,这种处理在数据清洗过程是常见了,比如从数据源到ODS阶段,假如数据仓库使用维度建模,而且维度基本使用代理键的话,必定存在代码到此键值的转换。假如用SQL实现,必定需要将一个大表与一堆小表都Join起来,当然假如使用ETL工具的话,通常都是先将小表读入内存中再处理。这种情况,输出数据的粒度与大表一样。 大大交,大表与大表之间

32、关联也是一个重要的课题,当然其中要有一个主表,在逻辑上,应当是主表LeftJOin辅表。大表之间的关联存在最大的问题就是性能与稳固性,关于海量数据来说,务必有优化的方法来处理他们的关联,另外,关于大数据的处理无疑会占用太多的系统资源,出错的几率非常大,如何做到有效错误恢复也是个问题。关于这种情况,我们建议还是尽量将大表拆分成适度的稍小一点的表,形成大小交的类型。这类情况的输出数据粒度与主表一样。 站着进来,躺着出去。事务系统中为了提高系统灵活性与扩展性,很多信息放在代码表中保护,因此它的“事实表”就是一种窄表,而在数据仓库中,通常要进行宽化,从行变成列,因此称这种处理情况叫做“站着进来,躺着出

33、去”。大家对Decode确信不陌生,这是进行宽表化常见的手段之一。窄表变宽表的过程要紧表达在对窄表中那个代码字段的操作。这种情况,窄表是输入,宽表是输出,宽表的粒度必定要比窄表粗一些,就粗在那个代码字段上。 聚集,数据仓库中重要的任务就是沉淀数据,聚集是必不可少的操作,它是粗化数据粒度的过程。聚集木身事实上很简单,就是类似SQL中GrOUPby的操作,选取特定字段(维度),对度量字段再使用某种聚集函数。但是关于大数据量情况下,聚集算法的优化仍是探究的一个课题。比如是直接使用SQL的Groupby,还是先排序,在处理。微观规则从数据的转换的微观细节分,能够分成下面的几个基本类型,当然还有一些复杂

34、的组合情况,比如先运算,在参照转换的规则,这种基于基本类型组合的情况就不在此列了。ETL的规则是依靠目标数据的,目标数据有多少字段,就有多少条规则。 直接映射,原先是什么就是什么,原封不动照搬过来,对这样的规则,假如数据源字段与目标字段长度或者精度不符,需要特别注意看是否确实能够直接映射还是需要做一些简单运算。 字段运算,数据源的一个或者多个字段进行数学运算得到的目标字段,这种规则通常对数值型字段而言。 参照转换,在转换中通常要用数据源的一个或者多个字段作为Key,去一个关联数组中去搜索特定值,而且应该只能得到唯一值。这个关联数组使用HaSh算法实现是比较合适也是最常见的,在整个ETL开始之前

35、,它就装入内存,对性能提高的帮助非常大。 字符串处理,从数据源某个字符串字段中经常能够获取特定信息,比如身份证号。而且,经常会有数值型值以字符串形式表达。对字符串的操作通常有类型转换、字符串截取等。但是由于字符类型字段的随意性也造成了脏数据的隐患,因此在处理这种规则的时候,一定要加上特殊处理。 空值推断,关于空值的处理是数据仓库中一个常见问题,是将它作为脏数据还是作为特定一种维成员?这估计还要看应用的情况,也是需要进一步探求的。但是不管如何,关于可能有NULL值的字段,不要使用“直接映射”的规则类型,务必对空值进行推断,目前我们的建议是将它转换成特定的值。 日期转换,在数据仓库中日期值通常都会

36、有特定的,不一致于日期类型值的表示方法,比如使用8位整型20040801表示日期。而在数据源中,这种字段基本都是日期类型的,因此关于这样的规则,需要一些共通函数来处理将日期转换为8位日期值、6位月份值等。 日期运算,基于日期,我们通常会计算日差、月差、时长等。通常数据库提供的日期运算函数都是基于日期型的,而在数据仓库中使用特定类型来表示日期的话,务必有一套自己的日期运算函数集。 聚集运算,关于事实表中的度量字段,他们通常是通过数据源一个或者多个字段运用聚集函数得来的,这些聚集函数为SQL标准中,包含SUm,coUnt,avg,min,max. 既定取值,这种规则与以上各类类型规则的差别就在于它

37、不依靠于数据源字段,对目标字段取一个固定的或者是依靠系统的值。5.6.4. 难点四一数据质量“不要绝对的数据准确,但要明白为什么不准确J这是我们在构建Bl系统是对数据准确性的要求。确实,对绝对的数据准确谁也没有把握,不仅是系统集成商,包含客户也是无法确定。准确的东西需要一个标准,但首先要保证这个标准是准确的,至少现在还没有这样一个标准。客户会提出一个相对标准,比如将你的OLAP数据结果与报表结果对比。尽管这是一种不太公平的比较,你也只好认了吧。首先在数据源那里,已经很难保证数据质量了,这一点也是事实。在这一层有什么可能原因导致数据质量问题?能够分为下面几类: 数据格式错误,比如缺失数据、数据值

38、超出范围或者是数据格式非法等。要明白关于同样处理大数据量的数据源系统,他们通常会舍弃一些数据库自身的检查机制,比如字段约束等。他们尽可能将数据检查在入库前保证,但是这一点是很难确保的。这类情况诸如身份证号码、手机号、非日期类型的日期字段等。 数据一致性,同样,数据源系统为了性能的考虑,会在一定程度上舍弃外键约束,这通常会导致数据不一致。比如在帐务表中会出现一个用户表中没有的用户ID,在比如有些代码在代码表中找不到等。 业务逻辑的合理性,这一点很难说对与错。通常,数据源系统的设计并不是非常严谨,比如让用户开户日期晚于用户销户日期都是有可能发生的,一个用户表中存在多个用户ID也是有可能发生的。对这

39、种情况,有什么办法吗?构建一个Bl系统,要做到完全懂得数据源系统根本就是不可能的。特别是数据源系统在交付后,有更多保护人员的即兴发挥,那更是要花大量的时间去寻找原因。往常曾经争辩过设计人员对规则描述的问题,有人提出要在ETL开始之前务必将所有的规则弄得一清二楚。我并不一致意这样的意见,倒是认为在ETL过程要有处理这些质量有问题数据的保证。定要正面这些脏数据,是丢弃还是处理,无法躲避。假如没有质量保证,那么在这个过程中,错误会逐步放大,抛开数据源质量问题,我们再来看看ETL过程中什么因素对数据准确性产生重大影响。 规则描述错误。上面提到对设计人员对数据源系统懂得的不充分,导致规则懂得错误,这是一

40、方面。另一方面,是规则的描述,假如无二义性地描述规则也是要探求的一个课题。规则是依附于目标字段的,在难点三中,提到规则的分类。但是规则总不能总是用文字描述,务必有严格的数学表达方式。我甚至想过,假如设计人员能够使用某种规则语言来描述,那么我们的ETL单元就能够自动生成、同步,省去很多手工操作了。 ETL开发错误。即时规则很明确,ETL开发的过程中也会发生一些错误,比如逻辑错误、书写错误等。比如关于一个分段值,开区间闭区间是需要指定的,但是常常开发人员没注意,一个大于等于号写成大于号就导致数据错误。 人为处理错误。在整体ETL流程没有完成之前,为了图省事,通常会手工运行ETL过程,这其中一个重大

41、的问题就是你不可能按照正常流程去运行了,而是按照自己的懂得去运行,发生的错误可能是误删数据、重复装载数据等。5.6.5. 难点五一质量保证上回提到ETL数据质量问题,这是无法根治的,只能采取特定的手段去尽量避免,而且务必要定义出度量方法来衡量数据的质量是好还是坏。关于数据源的质量,客户对此应该更加关心,假如在这个源头不能保证比较干净的数据,那么后面的分析功能的可信度也都成问题。数据源系统也在不断进化过程中,客户的操作也在逐步规范中,Bl系统也同样如此。本文探讨一下时数据源质量与ETL处理质量的应对方法。如何应对数据源的质量问题?记得在Onteldatastage列表中也讨论过一个话题一-1的处

42、理“,在数据仓库模型维表中,通常有一条-1记录,表示“未知”,这个未知含义可广了,任何可能出错的数据,NULL数据甚至是规则没有涵盖到的数据,都转成-1。这是一种处理脏数据的方法,但这也是一种掩盖事实的方法。就好像写一个函数FiIeOpenIfiIename),返回一个错误码,当然,你能够只返回一种错误码,如-1,但这是一种不好的设计,关于调用者来说,他需要根据这个错误码进行某些推断,比如是文件不存在,还是读取权限不够,都有相应的处理逻辑。数据仓库中也是一样,因此,建议将不一致的数据质量类型处理结果分别转换成不一致的值,譬如,在转换后,-1表示参照不上,-2表示NULL数据等。只是这仅仅应付了

43、上回提到的第一类错误,数据格式错误。关于数据一致性与业务逻辑合理性问题,这仍有待探求。但这里有一个原则就是“务必在数据仓库中反应数据源的质量”。关于ETL过程中产生的质量问题,务必有保障手段。从以往的经验看,没有保障手段给实施人员带来烦恼重重。实施人员关于反复装载数据一定不可能陌生,甚至是最后数据留到最后的CUbe,才发现了第一步ETL事实上已经错了。这个保障手段就是数据验证机制,当然,它的目的是能够在ETL过程中监控数据质量,产生报警。这个模块要将实施人员当作是最终用户,能够说他们是数据验证机制的直接收益者。首先,务必有一个对质量的度量方法,什么是高质什么是低质,不能靠感官感受,但这却是在没

44、有度量方法条件下通常的做法。那经营分析系统来说,联通总部曾提出测试规范,这事实上就是一种度量方法,比如指标的误差范围不能高于5%等,对系统本身来说事实上务必要有这样的度量方法,先不要说这个度量方法是否科学。关于ETL数据处理质量,他的度量方法应该比联通总部测试规范定义的方法更要严格,由于他更多将Bl系统看作一个黑盒子,从数据源到展现的数据误差同意一定的误差。而ETL数据处理质量度量是一种白盒的度量,要注重每一步过程。因此理论上,要求输入输出的指标应该完全一致。但是我们务必正面完全一致只是理想,关于有误差的数据,务必找到原因。在质量度量方法的前提下,就能够建立一个数据验证框架。此框架根据总量、分

45、量数据稽核方法,该方法在高的数据仓库中的数据稽核技术一文中已经指出。作为补充,下面提出几点功能上的建议: 提供前端。将开发实施人员当作用户,同样也要为之提供友好的用户界面。稽核技术一文中指出测试报告的形式,这种形式还是要依靠人为推断,在一堆数据中去找规律。到不如用OLAP的方式提供界面,不光是加上测试统计出来的指标结果,同时配合度量方法的计算。比如误差率,关于误差率为大于。的指标,就要好好查一下原因了。 提供框架。数据验证不是一次性工作,而是每次ETL过程中都务必做的。因此,务必有一个框架,自动化验证过程,并提供扩展手段,让实施人员能够增加验证范围。有了这样一个框架,事实上它起到规范化操作的作

46、用,开发实施人员能够将要紧精力放在验证脚本的编写上,而不必过多关注验证如何融合到流程中,如何展现等工作。为此,要设计一套表,类似于DM表,每次验证结果数据都记录其中,同时自动触发多维分析的数据装载、公布等。这样,实施人员能够在每次装载,甚至在流程过程中就能够观察数据的误差率。特别是,假如数据仓库的模型能够统一起来,甚至数据验证脚本都能够确定下来,剩下的就是规范流程了。 规范流程。上同提到有一种ETL数据质量问题是由于人工处理导致的,其中最要紧原因还是流程不规范。开发实施人员运行单独一个ETL单元是很方便的,尽管往常曾建议一个ETL单元务必是“可重入”的,这能够解决误删数据,重复装载数据问题。但

47、要记住数据验证也是在流程当中,要让数据验证能够日常运作,就不要让实施者感受到他的存在。总的来说,规范流程是提高实施效率的关键工作,这也是以后要继续探求的。5.6.6. 难点六一元数据关于元数据(Metadata)的定义到目前为止没有什么特别精彩的,这个概念非常广,通常都是这样定义,“元数据是描述数据的数据(DataaboutData)”,这造成一种递归定义,就像问小强住在哪里,答,在旺财隔壁。按照这样的定义,元数据所描述的数据是什么呢?还是元数据。这样就可能有元元元元数据。我还听说过一种对元数据,假如说数据是一抽屉档案,那么元数据就是分类标签。那它与索引有什么区别?元数据表达是一种抽象,哲学家

48、从古至今都在抽象这个世界,力图找到世界的本质。抽象不是一层关系,它是一种逐步由具体到通常的过程。比如我-男人-人-哺乳动物-生物这就是一个抽象过程,你要是在软件业混会发现这个例子很常见,面向对象方法就是这样一种抽象过程。它对世界中的事物、过程进行抽象,使用面向对象方法,构建一套对象模型。同样在面向对象方法中,类是对象的抽象,接口又是对类的抽象。因此,我认为能够将“元”与“抽象”换一下,叫抽象数据是不是好懂得一些。常听到这样的话,“xx领导的讲话高屋建领,给我们后面的工作指引的清晰的方向”,这个成语“高屋建领”,站在10楼往下到水,居高临下,能砸死人,这是指站在一定的高度看待事物,这个一定的高度就是指他有够“元”。在设计模式中,强调要对接口编程,就是说你不要处理这类对象与那类对象的交互,而要处理这个接口与那个接口的交互,先别管他们内部是怎么干的。元数据存在的意义也在于此,尽管上面说了一通都撤到哲学上去,但这个词务必还是要结合软件设计中看,我不明白在别的领域是不是存在Metadata这样的叫法,尽管我相信别的领域必定有类似的东东。元

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 在线阅读 > 生活休闲


备案号:宁ICP备20000045号-1

经营许可证:宁B2-20210002

宁公网安备 64010402000986号