数据仓库那些事儿 之 各种神表

Posted 十年IT老兵

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据仓库那些事儿 之 各种神表相关的知识,希望对你有一定的参考价值。

数据仓库,是为企业提供决策支持的战略数据集合。

数据仓库里的数据随时间积累不断积聚,当数据量积累到一定程度的时候(因各企业对数据仓库投入不同,建设标准不同,数据仓库所能承载的“数据量”也不同),对数据的管理也就需要适时调整,否则就无法满足结算时效要求,或数据剧增导致数据仓库硬件成本过高,经济性下降。

贴源层数据就不说了,因为一般情况下贴源层数据需要跟业务系统保持高度一致,当然了,极少数情况下可能会有所微调。

在贴源层数据之后,就是为提供决策支持所需要我们继续加工整理的“加工表”了。在数据不断向上汇聚分层的过程中,会产生各种各样的表。今天这篇文章,我总结数据仓库里的各种神表,这些有着各种名字的神表们,总有几款是你经常用到或经常遇到的。

1. 横表

    数据仓库里99%以上的常用表都是横表,横表很容易理解,表结构通常为:字段1,字段2,字段3,字段4.....,这里不多说,相信都能明白(可以把下文的竖表看成一种特殊的横表)

2. 竖表

竖表是相对横表而言的,竖表应用相对较少,一般在财务上或特殊需求才使用竖表。

竖表的结构一般是:字段代码,字段1,字段2,字段3....举个例子可能更容易理解些。

数据仓库那些事儿 之 各种神表

    上表能很清晰的看到同一个客户在银行内办理的所有业务种类,竖表扩展性非常好,还说上面的例子,如果用户新办了其他业务,那么只需要再插入一条记录即可,相反,如果把此表设计为横表,那么有新的业务类型就必须加入新的字段,扩展性相比而言就差很多。

    当然任何事情都有两面性,竖表最大的问题在于“多记录性”,上表单个用户有多条记录,使用时一般需要汇总(group by),否则会出现数据翻倍的问题

3. 码表

    码表,也叫代码表,码表是用来存放代码键值的表,通常情况下会把大量的键值关系写进同一张码表,这样对于键值的管理就非常方便,码表可以理解为一张数据字典表,同样,为了便于理解,下面举例说明。

数据仓库那些事儿 之 各种神表

    码表也是一种竖表结构。

4. 事实表与纬度表

    数据仓库主要是星型结构和雪花型结构进行数据组织,把业务主题看成是个立方体,时间维度、地点纬度、产品纬度构成了立方地的三个坐标轴,这三个坐标轴的合围区域即为事实表数据。

数据仓库那些事儿 之 各种神表

5. 明细表与汇总表

    用于业务分析的报表一般会对应成套开发,比如“存款规模月报明细表”“存款规模月报汇总表”,汇总表用于整体概览整月经营业绩,明细表则用于详细分析每天存款流入流出情况,每个业务经理每天的具体产能等等,明细表还有一个用处是用于校验数据准确性,比如某人对当月业绩表示怀疑,那么就可以用明细报表来校验汇总表的数据准确性。

6. 流水表

    流水表最常见的应用环境就是交易流水,比如银行卡交易流水表,系统会将所有交易数据全部插入流水表中,流水表的特点是数据只做插入,不做更新或删除,数据量随着时间积累会迅速增大,一般情况下流水表只提供最近3-5年的交易数据,再往前的交易流水会做归档处理。

7. 拉链表

    拉链表真是好东西,有的时候某些全量表数据扩张速度过快,比如余额表,每天都要全量保存全量余额数据,对于这样的表,如果我们经常查询单笔业务,这时候就轮到拉链表施展它的才华了。

    举例说明...唉,算了,我百度一个例子贴近来吧,自己从头写实在太麻烦。

首先创建测试表:

数据仓库那些事儿 之 各种神表

插入初始数据:

数据仓库那些事儿 之 各种神表

假设当前时间为2017年5月7日,今天的订单情况如下:

数据仓库那些事儿 之 各种神表

到了2017年5月8日,部分订单的订单状态发生了改变,并且有了新的订单:

数据仓库那些事儿 之 各种神表

当前状态如下:

数据仓库那些事儿 之 各种神表

到了2017年5月9日,部分订单再次发生了改变,并且有了新的订单:

数据仓库那些事儿 之 各种神表

当前状态如下:

数据仓库那些事儿 之 各种神表

对于上述表来说,由于没有保存历史数据,因此查询“100001”订单的状态历史就查询不到。如果使用历史拉链表来存储以上信息,则存储内容如下:

数据仓库那些事儿 之 各种神表

历史拉链表中,增加了记录的生命周期开始时间和结束时间,一条记录的生命周期为 [生命周期开始时间,生命周期结束时间)。

将原来的数据导入到历史拉链表,最终结果如下:

数据仓库那些事儿 之 各种神表

数据仓库那些事儿 之 各种神表

如果需要查询2017年5月8日的历史快照,可以直接写出SQL:

数据仓库那些事儿 之 各种神表

该SQL的查询结果与之前2017-05-08的数据一致:

数据仓库那些事儿 之 各种神表

8. 分区表

    分区表一般大多是因为单表数据量过大,类似存取款系统的交易流水表,单日数据增量超过5000万条,单日数据占用存储10Gb,对于不同的系统对大表的定义不一样,一般情况,分区表主要分区方式是日分区、月分区、年分区几种,其中以日分区月分区最为常见,具体分区时段应视查询效率要求、存储规模、数据量的情况而最终确定。

================================

往期文稿推荐

================================

项目纪实   数据仓库那些事儿 之 各种神表

==>1 

==>2 

==>3 


项目管理   数据仓库那些事儿 之 各种神表

==>1 

==>2 


技术积累   

==>1 

==>2 

==>3 


行业视野   

==>1 

================================


以上是关于数据仓库那些事儿 之 各种神表的主要内容,如果未能解决你的问题,请参考以下文章

信管•讲座回顾 |《数据仓库那些事儿》

回味 | 关于数据仓库的那些事儿

关于Hive数据仓库的那些事儿模式设计

关于Hive数据仓库的那些事儿Hive架构

信管•讲座预告|《数据仓库那些事儿》

Docker 那些事儿如何高效地搭建 Docker 私有仓库