本文主要来讲一下历史层(his),重点是如下三个方面
1.历史层的数据清洗
2.历史层的数据存储
3.历史层的数据校验
历史层,顾名思义,就是保存所有的历史数据,我们知道数据仓库的一个原则就是数据是不变的,就是说进来了的数据就不做更改,不做删除,那这个不做更改,不做删除,主要体现在的就是历史层。
数据仓库体系是一个OLAP体系,主要用来分析历史数据的,那么历史层数据的保存就显得异常的重要。
一.历史层的数据清洗
到了历史层,其实对清洗的要求也不会很高,如果在ODS层做了基本的清洗,那么在历史层要做的清洗就更少了。历史层因为是保存历史的数据,简单的理解就是把ODS的数据全部都存一遍,历史层的粒度最好还是保持最细的粒度,在历史层来说,相对更为重要的应该是存储了。本文也主要讲述历史层的存储
二.历史层的数据存储
历史层的数据存储主要有4种,1.全量,2.增量切片,3.全量切片,4.拉链
1.全量
如前面ODS讲到的,如果我们是全量把数据导入到ODS的,我们会根据业务需要,如果是缓慢变化的,或者确认这种变化后对我们的业务作用基本可以忽略不计的,我们通常就采取全量的方式存储,这样的存储方式其实是和ODS里面一样的。
2.全量切片
如前面ODS讲到的,如果我们是全量把数据导入到ODS的,如果数据量不是很大的话,我们通常考虑全量切片的方式。就是把每一次全量抽取过来的数据都保存下来,然后在后面加一个 *** 作时间字段
这里要讲一下选择全量存储,还是全量切片存储的问题
对于数据仓库来说,因为要保存历史的数据,历史的变化,那么在这种原则下,我们肯定优先选择全量切片存储了。但是,我们还需要考虑其他的存储和实际的业务情况。
(1)个就是存储空间的问题,假设一张很大的表从源体系全量抽取的,每天1个T,一年下来就365T,hive中再乘以3,那对存储空间的要求实在太多了。可能这张表变化的字段就是一个一年就用一次的字段。从存储和使用比来说,划不来。
(2)个就是使用问题,在hive这种有分区的数仓体系中还好,如果是oracle,TD等数据仓库,如果这张表存储了1年的数据,我要查一个某一天的数据的某一部分,可能怎么样都没法查出来了
所以通常的原则,1.是小表,变化比较频繁的表,变化的字段比较重要,并且经常要进行历史对比的表,考虑全量切片
如果是变化比较慢,并且变化的字段基本不用的,就全量存储就好,比如,一张地区维度表,把北京市统一改为北京存储了,其实就没有必要每天都存一遍了。
(3).就是数据量大,变化的字段比较缓慢的,这样也考虑用全量表
那么这里问题就来了,如果数据量大,又变化的字段比较重要呢?
也许这真的就是数据存储中的一个难题了,现在大数据量,又变化快的情况,可能主要使用的还是增量切片的方式,
3.增量切片,就是把新增的数据存储下来,或者说变化的数据存储下来,一般来说,这是当前一种主要的存储形态
主要优点有2个:
1>增量数据相对全量数据来说,量级会少好多,会节省很多存储空间
2>每天存储变化的值,在我们做相关使用时,效率会更高,总体的数据量级会少
4.拉链表
拉链表对于很多人来说可能比较陌生,一般做数据仓库没做个一年,可能都不会接触到这种类型的表,并且目前考虑用这种表存储的情况,实际来说比较少,这里就说两点:1.拉链表本质上适合与缓慢变化的大量数据集,2.拉链表的使用不方便。
三.历史层的数据校验
历史数据的准确性,是数据仓库分析的基础,对于历史数据的校验,其他也遵循通用的校验方法,因为多了历史数据缘故,还可以加一些趋势性的校验方法,比如同比,环比的数据总量,某一类指标的变化阈值,都可以根据历史数据做一定的预警
数据仓库 历史拉链表Data warehouse history zipper table
数据仓库 历史拉链表
Data warehouse history zipper table
使用计算机后,随着数据处理量的增长,产生了数据管理技术。
数据管理技术的发展与计算机硬件(主要是外部存储器)系统软件及计算机应用的范围有着密切的联系。
数据管理技术的发展经历了以下四个阶段:人工管理阶段、文件系统阶段、数据库阶段和高级数据库技术阶段。
数据管理的诞生
数据库的历史可以追溯到五十年前,那时的数据管理非常简单。
通过大量的分类、比较和表格绘制的机器运行数百万穿孔卡片来进行数据的处理,其运行结果在纸上打印出来或者制成新的穿孔卡片。
而数据管理就是对所有这些穿孔卡片进行物理的储存和处理。
然而,1950 年雷明顿兰德公司(Remington Rand Inc)的一种叫做Univac I 的计算机推出了一种一秒钟可以输入数百条记录的磁带驱动器,从而引发了数据管理的革命。
1956 年IBM生产出第一个磁盘驱动器—— the Model 305 RAMAC。
此驱动器有50 个盘片,每个盘片直径是2 英尺,可以储存5MB的数据。
使用磁盘最大的好处是可以随机存取数据,而穿孔卡片和磁带只能顺序存取数据。
1951: Univac系统使用磁带和穿孔卡片作为数据存储。
数据库系统的萌芽出现于二十世纪60 年代。
当时计算机开始广泛地应用于数据管理,对数据的共享提出了越来越高的要求。
传统的文件系统已经不能满足人们的需要,能够统一管理和共享数据的数据库管理系统(DBMS)应运而生。
数据模型是数据库系统的核心和基础,各种DBMS软件都是基于某种数据模型的。
所以通常也按照数据模型的特点将传统数据库系统分成网状数据库、层次数据库和关系数据库三类。
最早出现的网状DBMS,是美国通用电气公司Bachman等人在1961年开发的IDS(Integrated Data Store)。
1964年通用电气公司(General ElectricCo.)的Charles Bachman 成功地开发出世界上第一个网状DBMS也即第一个数据库管理系统——集成数据存储(Integrated Data Store IDS),奠定了网状数据库的基础,并在当时得到了广泛的发行和应用。
IDS 具有数据模式和日志的特征,但它只能在GE主机上运行,并且数据库只有一个文件,数据库所有的表必须通过手工编码生成。
之后,通用电气公司一个客户——BF Goodrich Chemical 公司最终不得不重写了整个系统,并将重写后的系统命名为集成数据管理系统(IDMS)。
网状数据库模型对于层次和非层次结构的事物都能比较自然的模拟,在关系数据库出现之前网状DBMS要比层次DBMS用得普遍。
在数据库发展史上,网状数据库占有重要地位。
层次型DBMS是紧随网络型数据库而出现的,最著名最典型的层次数据库系统是IBM 公司在1968 年开发的IMS(Information Management System),一种适合其主机的层次数据库。
这是IBM公司研制的最早的大型数据库系统程序产品。
从60年代末产生起,如今已经发展到IMSV6,提供群集、N路数据共享、消息队列共享等先进特性的支持。
这个具有30年历史的数据库产品在如今的WWW应用连接、商务智能应用中扮演着新的角色。
1973年Cullinane公司(也就是后来的Culli软件公司),开始出售Goodrich公司的IDMS改进版本,并且逐渐成为当时世界上最大的软件公司。
网状数据库和层次数据库已经很好地解决了数据的集中和共享问题,但是在数据独立性和抽象级别上仍有很大欠缺。
用户在对这两种数据库进行存取时,仍然需要明确数据的存储结构,指出存取路径。
而后来出现的关系数据库较好地解决了这些问题。
1970年,IBM的研究员E.F.Codd博士在刊物《munication of the ACM》上发表了一篇名为“A Relational Model of Data for Large Shared Data Banks”的论文,提出了关系模型的概念,奠定了关系模型的理论基础。
尽管之前在1968年Childs已经提出了面向 *** 的模型,然而这篇论文被普遍认为是数据库系统历史上具有划时代意义的里程碑。
Codd的心愿是为数据库建立一个优美的数据模型。
后来Codd又陆续发表多篇文章,论述了范式理论和衡量关系系统的12条标准,用数学理论奠定了关系数据库的基础。
关系模型有严格的数学基础,抽象级别比较高,而且简单清晰,便于理解和使用。
但是当时也有人认为关系模型是理想化的数据模型,用来实现DBMS是不现实的,尤其担心关系数据库的性能难以接受,更有人视其为当时正在进行中的网状数据库规范化工作的严重威胁。
为了促进对问题的理解,1974年ACM牵头组织了一次研讨会,会上开展了一场分别以Codd和Bachman为首的支持和反对关系数据库两派之间的辩论。
这次著名的辩论推动了关系数据库的发展,使其最终成为现代数据库产品的主流。
1969年Edgar F.“Ted” Codd发明了关系数据库。
1970年关系模型建立之后,IBM公司在San Jose实验室增加了更多的研究人员研究这个项目,这个项目就是著名的System R。
其目标是论证一个全功能关系DBMS的可行性。
该项目结束于1979年,完成了第一个实现SQL的 DBMS。
然而IBM对IMS的承诺阻止了System R的投产,一直到1980年System R才作为一个产品正式推向市场。
IBM产品化步伐缓慢的三个原因:IBM重视信誉,重视质量,尽量减少故障;IBM是个大公司,官僚体系庞大,IBM内部已经有层次数据库产品,相关人员不积极,甚至反对。
然而同时,1973年加州大学伯克利分校的Michael Stonebraker和Eugene Wong利用System R已发布的信息开始开发自己的关系数据库系统Ingres。
他们开发的Ingres项目最后由Oracle公司、Ingres公司以及硅谷的其他厂商所商品化。
后来,System R和Ingres系统双双获得ACM的1988年“软件系统奖”。
1976年霍尼韦尔公司(Honeywell)开发了第一个商用关系数据库系统——Multics Relational Data Store。
关系型数据库系统以关系代数为坚实的理论基础,经过几十年的发展和实际应用,技术越来越成熟和完善。
其代表产品有Oracle、IBM公司的 DB2、微软公司的MS SQL Server以及Informix、ADABAS D等等。
1974年IBM的Ray Boyce和Don Chamberlin将Codd关系数据库的12条准则的数学定义以简单的关键字语法表现出来,里程碑式地提出了SQL(Structured Query Language)语言。
SQL语言的功能包括查询、 *** 纵、定义和控制,是一个综合的、通用的关系数据库语言,同时又是一种高度非过程化的语言,只要求用户指出做什么而不需要指出怎么做。
SQL集成实现了数据库生命周期中的全部 *** 作。
SQL提供了与关系数据库进行交互的方法,它可以与标准的编程语言一起工作。
自产生之日起,SQL语言便成了检验关系数据库的试金石,而SQL语言标准的每一次变更都指导着关系数据库产品的发展方向。
然而,直到二十世纪七十年代中期,关系理论才通过SQL在商业数据库Oracle和DB2中使用。
1986年,ANSI把SQL作为关系数据库语言的美国标准,同年公布了标准SQL文本。
SQL标准有3个版本。
基本SQL定义是ANSⅨ3135-89,“Database Language - SQL with Integrity Enhancement”[ANS89],一般叫做SQL-89。
SQL-89定义了模式定义、数据 *** 作和事务处理。
SQL- 89和随后的ANSⅨ3168-1989,“Database Language-Embedded SQL”构成了第一代SQL标准。
ANSⅨ3135-1992[ANS92]描述了一种增强功能的SQL,叫做SQL-92标准。
SQL-92包括模式 *** 作,动态创建和SQL语句动态执行、网络环境支持等增强特性。
在完成SQL-92标准后,ANSI和ISO即开始合作开发SQL3标准。
SQL3的主要特点在于抽象数据类型的支持,为新一代对象关系数据库提供了标准。
1976年IBM E.F.Codd发表了一篇里程碑的论文“R系统:数据库关系理论”,介绍了关系数据库理论和查询语言SQL。
Oracle的创始人Ellison非常仔细地阅读了这篇文章,被其内容震惊,这是第一次有人用全面一致的方案管理数据信息。
作者E.F.Codd 1966年就发表了关系数据库理论,并在IBM研究机构开发原型,这个项目就是R系统,存取数据表的语言就是SQL。
Ellison看完后,敏锐意识到在这个研究基础上可以开发商用软件系统。
而当时大多数人认为关系数据库不会有商业价值。
Ellison认为这是他们的机会:他们决定开发通用商用数据库系统Oracle,这个名字来源于他们曾给中央情报局做过的项目名。
几个月后,他们就开发了Oracle 1.0。
但这只不过是个玩具,除了完成简单关系查询不能做任何事情,他们花相当长的时间才使Oracle变得可用,维持公司运转主要靠承接一些数据库管理项目和做顾问咨询工作。
而IBM却没有计划开发,为什么蓝色巨人放弃了这个价值上百亿的产品,原因有很多:IBM的研究人员大多是学术出身,他们最感兴趣的是理论,而非推向市场的产品,从学术上看,研究成果应公开发表论文和演讲能使他们成名,为什么不呢?还有一个很主要的原因就是IBM当时有一个销售得还不错的层次数据库产品IMS。
直到1985年IBM才发布了关系数据库DB2 ,Ellision那时已经成了千万富翁。
Ellison曾将IBM 选择Microsoft 的MS-DOS作为IBM-PC机的 *** 作系统比为:“世界企业经营历史上最严重的错误,价值超过了上千亿美元。”IBM发表R系统论文,而且没有很快推出关系数据库产品的错误可能仅仅次之。
Oracle的市值在1996年就达到了280亿美元。
随着信息技术和市场的发展,人们发现关系型数据库系统虽然技术很成熟,但其局限性也是显而易见的:它能很好地处理所谓的“表格型数据”,却对技术界出现的越来越多的复杂类型的数据无能为力。
九十年代以后,技术界一直在研究和寻求新型数据库系统。
但在什么是新型数据库系统的发展方向的问题上,产业界一度是相当困惑的。
受当时技术风潮的影响,在相当一段时间内,人们把大量的精力花在研究“面向对象的数据库系统(object oriented database)”或简称“OO数据库系统”。
值得一提的是,美国Stonebraker教授提出的面向对象的关系型数据库理论曾一度受到产业界的青睐。
而Stonebraker本人也在当时被Informix花大价钱聘为技术总负责人。
然而,数年的发展表明,面向对象的关系型数据库系统产品的市场发展的情况并不理想。
理论上的完美性并没有带来市场的热烈反应。
其不成功的主要原因在于,这种数据库产品的主要设计思想是企图用新型数据库系统来取代现有的数据库系统。
这对许多已经运用数据库系统多年并积累了大量工作数据的客户,尤其是大客户来说,是无法承受新旧数据间的转换而带来的巨大工作量及巨额开支的。
另外,面向对象的关系型数据库系统使查询语言变得极其复杂,从而使得无论是数据库的开发商家还是应用客户都视其复杂的应用技术为畏途。
二十世纪六十年代后期出现了一种新型数据库软件:决策支持系统(DSS),其目的是让管理者在决策过程中更有效地利用数据信息。
于是在1970年,第一个联机分析处理工具——Express诞生了。
其他决策支持系统紧随其后,许多是由公司的IT部门开发出来的。
1985年,第一个商务智能系统(business intelligence)由Metaphor计算机系统有限公司为Procter &Gamble公司开发出来,主要是用来连接销售信息和零售的扫描仪数据。
同年, Pilot软件公司开始出售第一个商用客户/服务器执行信息系统——mand Center。
同样在这年,加州大学伯克利分校Ingres项目演变成Postgres,其目标是开发出一个面向对象的数据库。
此后一年, Graphael公司开发了第一个商用的对象数据库系统—Gbase。
1988年,IBM公司的研究者Barry Devlin和Paul Murphy发明了一个新的术语—信息仓库,之后,IT的厂商开始构建实验性的数据仓库。
1991年,W.H. Bill Inmon出版了一本“如何构建数据仓库”的书,使得数据仓库真正开始应用。
1991: W.H.“Bill” Inmon发表了”构建数据仓库”
二十世纪九十年代,随着基于PC的客户/服务器计算模式和企业软件包的广泛采用,数据管理的变革基本完成。
数据管理不再仅仅是存储和管理数据,而转变成用户所需要的各种数据管理的方式。
Inter的异军突起以及XML语言的出现,给数据库系统的发展开辟了一片新的天地。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)