数据仓库系统研究(三)——历史层

如上所述,基本数据仓库分为源层、历史层和数据模型层。

本文主要从以下三个方面来谈his。

1.历史图层的数据清理

2.历史层的数据存储

3.历史层的数据验证

历史层,顾名思义,就是保存所有的历史数据。我们知道数据仓库的一个原则是数据不可改变,也就是说传入的数据不会被改变或删除,所以这一条不会被改变或删除,这主要体现在历史层。

数据仓库系统是一个OLAP系统,主要用于分析历史数据,因此历史数据的保存极其重要。

一、历史层数据清理

在历史层,对清洗的要求不是很高。如果ODS层基本清理完毕,历史层的清理就会少一些。因为历史层是为了保存历史数据,简单的理解就是保存所有的ODS数据,历史层的粒度最好保持最细的粒度。在历史层,相对更重要的是存储。本文还重点研究了历史层的存储。

2.历史级别的数据存储

历史层有四种数据存储,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.增量切片是为了存储新数据或已更改的数据。总的来说,这是目前一种主要的存储形式。

有两个主要优势:

1 & gt;增量数据和总量数据相比,量级会小很多,节省大量存储空间。

2 & gt每天存储变化的值会更有效,当我们做相关的使用时,总的数据量会更少。

4.拉链手表

拉链表可能很多人都不熟悉。一般还没有做数据仓库一年,可能不会接触到这种类型的表。目前考虑用这个表存储的情况其实比较少。这里有两点:1。zipper表本质上适用于大量缓慢变化的数据集,2。使用起来很不方便。

三。历史图层的数据验证

历史数据的准确性是数据仓库分析的基础。对于历史数据的验证,其他也遵循一般的验证方法。因为历史数据比较多,所以可以增加一些趋势性的验证方法,比如数据的同比和环比总量以及某一类指标的变化阈值,可以根据历史数据做出一定的预警。