数据仓库数据模型之:极限存储--历史拉链表

摘要: 在数据仓库的数据模型设计过程中,经常会遇到文内所提到的这样的需求。而历史拉链表,既能满足对历史数据的需求,又能很大程度的节省存储资源。

在数据仓库的数据模型设计过程中,经常会遇到这样的需求:
1. 数据量比较大;
2. 表中的部分字段会被update,如用户的地址,产品的描述信息,订单的状态等等;
3. 需要查看某一个时间点或者时间段的历史快照信息,比如,查看某一个订单在历史某一个时间点的状态,比如,查看某一个用户在过去某一段时间内,更新过几次等等;
4. 变化的比例和频率不是很大,比如,总共有1000万的会员,每天新增和发生变化的有10万左右;
5. 如果对这边表每天都保留一份全量,那么每次全量中会保存很多不变的信息,对存储是极大的浪费;

拉链历史表,既能满足反应数据的历史状态,又可以最大程度的节省存储;

举个简单例子,比如有一张订单表,6月20号有3条记录:

到6月21日,表中有5条记录:

到6月22日,表中有6条记录:

数据仓库中对该表的保留方法:

 

1. 只保留一份全量,则数据和6月22日的记录一样,如果需要查看6月21日订单001的状态,则无法满足;

2. 每天都保留一份全量,则数据仓库中的该表共有14条记录,但好多记录都是重复保存,没有任何变化,如订单002,004,数据量大了,会造成很大的存储浪费;

 

如果在数据仓库中设计成历史拉链表保存该表,则会有下面这样一张表:

说明:

 

1. dw_begin_date表示该条记录的生命周期开始时间,dw_end_date表示该条记录的生命周期结束时间

2. dw_end_date = '9999-12-31'表示该条记录目前处于有效状态;

3. 如果查询当前所有有效的记录,则select * from order_his where dw_end_date = '9999-12-31'

4. 如果查询2012-06-21的历史快照,则select * from order_his where dw_begin_date
<= '2012-06-21' and dw_end_date >= '2012-06-21',这条语句会查询到以下记录:

和源表在6月21日的记录完全一致:

拉链表设计

 在企业中,由于有些流水表每日有几千万条记录,数据仓库保存5年数据的话很容易不堪重负,因此可以使用拉链表的算法来节省存储空间。

1.采集当日全量数据存储到 ND(当日) 表中。 
2.可从历史表中取出昨日全量数据存储到 OD(上日数据)表中。
3.用ND-OD(minus差集)为当日新增和变化的数据(即日增量数据)。

两个表进行全字段比较,将结果记录到tabel_I表中

4.用OD-ND为状态到此结束需要封链的数据。 (需要修改END_DATE)

两个表进行全字段比较,将结果记录到tabel_U表中 
5.历史表(HIS)比ND表和OD表多两个字段(START_DATE,END_DATE) 
6.将tabel_I表的内容全部insert插入到HIS表中。START_DATE='当日',END_DATE可设为'9999-12-31' 
7.更新封链记录的END_DATE

历史表(HIS)和tabel_U表比较,START_DATE,END_DATE除外,以tabel_U表为准,两者交集(INTERSECT)将其END_DATE改成当日,说明该记录失效。 
8。取数据时对日期进行条件选择即可,如:取20100101日的数据为 
(where START_DATE<='20100101' and END_DATE>='20100101' )

union all  并集,并排除重复记录:

union   并集,并包含重复记录

参考文章:

http://www.cnblogs.com/zhangchenliang/archive/2012/09/11/2680945.html

原文链接:

http://www.dataguru.cn/portal.php?mod=view&aid=3272

时间: 2024-11-02 11:07:00

数据仓库数据模型之:极限存储--历史拉链表的相关文章

《Greenplum企业应用实战》一第3章 Greenplum实战3.1 历史拉链表

第3章 Greenplum实战 从本章开始我们结合实际需求,阐述一下日常项目开发中如何结合Greenplum的特性进行高效的开发,展现出Greenplum在海量数据分析中的优势. 本章将介绍两个完整的例子:数据仓库拉链记历史和网页浏览日志分析.在这两个例子中,会结合Greenplum的一些特性加以描述,之后会介绍使用Greenplum中要注意的一些特性,以及这些特性对性能的影响. 3.1 历史拉链表 数据仓库是一个面向主题的.集成的.相对稳定的.反映历史变化的数据集合,用于支持管理决策.由于需要

漫谈数据仓库之拉链表(原理、设计以及在Hive中的实现)

本文将会谈一谈在数据仓库中拉链表相关的内容,包括它的原理.设计.以及在我们大数据场景下的实现方式. 全文由下面几个部分组成: 先分享一下拉链表的用途.什么是拉链表. 通过一些小的使用场景来对拉链表做近一步的阐释,以及拉链表和常用的切片表的区别. 举一个具体的应用场景,来设计并实现一份拉链表,最后并通过一些例子说明如何使用我们设计的这张表(因为现在Hive的大规模使用,我们会以Hive场景下的设计为例). 分析一下拉链表的优缺点,并对前面的提到的一些内容进行补充说明,比如说拉链表和流水表的区别.

《Greenplum企业应用实战》一导读

前 言 为什么写作本书 阿里巴巴是国内最早使用Greenplum作为数据仓库计算中心的公司.从2009年到2012年Greenplum都是阿里巴巴B2B最重要的数据计算中心,它替换掉了之前的Oracle RAC,有非常多的优点. Greenplum的性能在数据量为TB级别时表现非常优秀,单机性能相比Hadoop要快好几倍. Greenplum是基于PostgreSQL的一个完善的数据库,在功能和语法上都要比Hadoop上的SQL引擎Hive好用很多,对于普通用户来说更加容易上手. Greenpl

三个例子,让你看懂数据仓库多维数据模型的设计

一.概述 多维数据模型是最流行的数据仓库的数据模型,多维数据模型最典型的数据模式包括星型模式.雪花模式和事实星座模式,本文以实例方式展示三者的模式和区别. 二.星型模式(star schema) 星型模式的核心是一个大的中心表(事实表),一组小的附属表(维表).星型模式示例如下所示:   三.雪花模式(snowflake schema) 雪花模式是星型模式的扩展,其中某些维表被规范化,进一步分解到附加表(维表)中.雪花模式示例如下图所示: 从图中我们可以看到地址表被进一步细分出了城市(city)

动态单链表的传统存储方式和10种常见操作-C语言实现

顺序线性表的优点:方便存取(随机的),特点是物理位置和逻辑为主都是连续的(相邻).但是也有不足,比如:前面的插入和删除算法,需要移动大量元素,浪费时间,那么链式线性表 (简称链表) 就能解决这个问题.   一般链表的存储方法 一组物理位置任意的存储单元来存放线性表的数据元素,当然物理位置可以连续,也可以不连续,或者离散的分配到内存中的任意位置上都是可以的.故链表的逻辑顺序和物理顺序不一定一样.   因为,链表的逻辑关系和物理关系没有必然联系,那么表示数据元素之间的逻辑映象就要使用指针,每一个存储

Facebook数据仓库揭秘:RCFile高效存储结构

本文介绍了Facebook公司数据分析系统中的RCFile存储结构,该结构集行存储和列存储的优点于一身,在MapReduce环境下的大规模数据分析中扮演重要角色. Facebook曾在2010 ICDE(IEEE International Conference on Data Engineering)会议上介绍了数据仓库Hive.Hive存储海量数据在Hadoop系统中,提供了一套类数据库的数据存储和处理机制.它采用类SQL语言对数据进行自动化管理和处理,经过语句解析和转换,最终生成基于Had

Bash之命令历史的存储和记录

//ps: 这篇文章系bash的history相关,多了解点儿也好!不同session的history操作同步问题 在Bash中我们可以使用 history 命令回顾,修改和重用之前使用过的历史命令.去掉信号机制.去掉作业控制.去掉各种参数调用,今天我们只看下Bash中如何记录命令,如何存储历史命令. 在 Bash 的源代码中,history 命令的定义代码为 builtins/history.def , builtins 目录下存放的是内部命令的源代码,每个内部命令是一个def文件,如hist

如何构建银行数据仓库

数据 如何构建银行数据仓库河南省邓州市新华东路11号市人行 宋玉长 数据仓库技术作为一项数据管理领域的新技术,其精髓在于针对联机分析处理(OLAP)提出了一种综合的解决方案,与以往很多技术不同的是,它主要是一种概念,在此概念指导下完成系统的构造.既没有可以直接购买到的现成产品,也没有具体的分析规范和实现方法,也就是说没有成熟.可靠且被广泛接受的数据仓库标准.在以往关系数据库的设计和实现中,不仅有详细的理论推导,还有无数的设计实例,无论你使用的是什么公司的数据库产品.开发工具,只要按照规范做,那么

胖子哥的大数据之路(一)-数据仓库也需要大数据

一.楔子 大数据传统企业实施,其路漫漫,绝不会如昙花一现,探索大数据在传统行业的实施之路,寻找一条适合传统行业的企业大数据实施方法体系,是我执着坚守的信念,大数据是一种信仰,吾将上下而求索.记下项目中的点滴,算是日志,自勉. 二.项目背景 最近在处理一个商业银行的大数据项目,旨在构建大数据资源池,项目边界确认过程中,针对项目的定位出现了两种不同的观点,对大数据的在传统行业的应用有了新的启发.观点一.大数据作为操作数据历史库,存储操作数据库数据,提供历史数据长周期,快速检索的历史数据存储和快速查询