数据仓库数据模型之:极限存储--历史拉链表
摘要: 在数据仓库的数据模型设计过程中,经常会遇到文内所提到的这样的需求。而历史拉链表,既能满足对历史数据的需求,又能很大程度的节省存储资源。
在数据仓库的数据模型设计过程中,经常会遇到这样的需求:
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
转载于:https://blog.51cto.com/tianxingzhe/1697844
相关文章:

super的用法(带了解)
super的用法(带了解) super的用法(带了解)posted on 2018-05-11 21:31 leolaosao 阅读(...) 评论(...) 编辑 收藏 转载于:https://www.cnblogs.com/leolaosao/p/9026686.html

Posted content type isn't multipart/form-data
版权声明:欢迎转载,请注明沉默王二原创。 https://blog.csdn.net/qing_gee/article/details/48712507 在有文件上传的表单提交过程中,搞不好就会报Posted content type isnt multipart/form-data的错误。 解决办法 <form class"form-…

CSDN 十大技术主题盘点-AI篇
关于2021,我们能看到的技术变化有很多。当云原生向下而生,当分布式数据库席卷而至,当低代码平台扩展了开发的边界,当万物互联蔚然成风……我们看到了太多在2021年形成的变化,但也能看到这些趋势非但没有结束࿰…

PHP编程问题集锦
1. Win32下apache2用get方法传递中文参数会出错 test.php?a你好&b你也好传递参数是会导致一个内部错误解决办法:"test.php?a".urlencode(你好)."&b".urlencode(你也好)2. win32下的session不能正常工作 php.ini默认的session.save_path /tmp 这…

jsonp详解
json相信大家都用的多,jsonp我就一直没有机会用到,但也经常看到,只知道是“用来跨域的”,一直不知道具体是个什么东西。今天总算搞明白了。下面一步步来搞清楚jsonp是个什么玩意。 同源策略 首先基于安全的原因,浏览器…

PHP面向对象精华
PHP面向对象精华1 使用extends实现继承以及重载、魔术方法的含义 class B extends A 声明的时候B里可以没有A里的方法 调用的时候$bnew B(); $b->A里的方法(); $b->A里的属性1; $b->B里的方法(); $b->B里的方法(); 如果$anew A(); 可以 $a->A里的方法(); $a->…
springmvc和mybatis整合关键配置
springmvcmybaits的系统架构: 第一步:整合dao层 mybatis和spring整合,通过spring管理mapper接口。 使用mapper的扫描器自动扫描mapper接口在spring中进行注册。 第二步:整合service层 通过spring管理 service接口。 使用配置方式将…

阿里亲制明信片,字节、百度直接发锅……这些公司的新年礼盒越来越会玩~
整理 | 王晓曼出品 | 程序人生(ID:coder _life)每到年末,各大互联网大厂的新年礼盒都会作为…

html中radio、checkbox选中状态研究(静下心来看,静下心来总结)
html中radio、checkbox选中状态研究(静下心来看,静下心来总结) 一、总结 1、单选框的如果有多个checked 会以最后一个为准 2、js动态添加checked属性:不行:通过 $("[namesex]:eq(1)").attr("checked&q…

新年新气象,100 行 Python 代码制作动态鞭炮
作者 | FrigidWinter来源 | CSDN博客放鞭炮贺新春,在我国有两千多年历史。关于鞭炮的起源,有个有趣的传说。西方山中有焉,长尺余,一足,性不畏人。犯之令人寒热,名曰年惊惮,后人遂象其形…

php 反射类简介
反射是操纵面向对象范型中元模型的API,其功能十分强大,可帮助我们构建复 杂,可扩展的应用。其用途如:自动加载插件,自动生成文档,甚至可用来扩充 PHP 语言。php 反射api 由若干类组成,可帮助我们…

shell时间
Shell 调用系统时间变量 Linux常用命令获取今天时期:date %Y%m%d 或 date %F 或 $(date %y%m%d) 获取昨天时期:date -d yesterday %Y%m%d 获取前天日期:date -d -2day %Y%m%d 依次类推比如获取10天前的日期:date -d -10day %Y%m%d…

杨老师课堂_Java核心技术下之控制台模拟记事本案例...
预览效果图: 背景介绍: 编写一个模拟记事本的程序通过在控制台输入指令,实现在本地新建文件打开文件和修改文件等功能。 要求在程序中: 用户输入指令1代表“新建文件”,此时可以从控制台获取用户输入的文件内容&#x…

PHP的URL处理
完整URL地址: http://username:passwordhostname/path?argvalue#auchor 协议:http:// 用户名和密码: username:password 以:将两者分隔 主机名:hostname 和/为分隔符 路径: /path 以/开头、包含/符号 参…

UnitOfWork以及其在ABP中的应用
Unit Of Work(UoW)模式在企业应用架构中被广泛使用,它能够将Domain Model中对象状态的变化收集起来,并在适当的时候在同一数据库连接和事务处理上下文中一次性将对象的变更提交到数据中。 从字面上我们可以我们可以把UnitOfWork叫…

分享3个好用到爆的 Python 模块,点赞收藏
作者 | 俊欣来源 | 关于数据分析与可视化今天给大家介绍3个特别好用的Python模块,知道的人可能不多,但是特别的好用。PsutilPendulumPyfigletPsutilPython当中的Psutil模块是个跨平台库,它能够轻松获取系统运行的进程和系统利用率,…

使用XHProf分析PHP性能瓶颈(二)
上一篇文章里,我们介绍了如何基于xhprof扩展来分析PHP性能,并记录到日志里,最后使用xhprof扩展自带的UI在web里展示出来。本篇文章将讲述2个知识点: 使用xhgui代替xhprof的默认UI界面,更便于分析使用tideways扩展替换x…

PHP自动加载类—__autoload()和spl_autoload_register()
test.php <?phpfunction __autoload($class_name) {require_once $class_name . .php;}$obj new j();?> 当前目录下有j.php <?phpclass j{function __construct() {echo "成功加载";} }?> 正常输出:成功加载修改test.php代码<?phpf…

二分 + 模拟 - Carries
Carries Problems Link Mean: 给你n个数,让你计算这n个数两两组合相加的和进位的次数. analyse: 脑洞题. 首先要知道:对于两个数的第k位相加会进位的条件是:a%(10^k)b%(10^k)>10^k. 想到这一点后就简单了,枚举每一位&#…

机器学习的出现,是否意味着“古典科学”的过时?
作者:Laura Spinney译者:刘媛媛原文:Are we witnessing the dawn of post-theory science?让我们回忆一下,Isaac Newton 被一个苹果砸中头部,然后是怎么提出牛顿第二定律——万有引力的?大概过程是这样的&…

MySQL5.6.16二进制源码安装详解及一键安装实现
一、系统环境 1.1操作系统 [rootlocalhost ~]# cat /etc/redhat-release CentOS Linux release 7.4.1708 (Core) [rootlocalhost ~]# uname -rm 10.0-693.el7.x86_64 x86_64 [rootlocalhost ~]# 1.2 安装前环境监测 1.2.1.SELinux和系统防火墙关闭 检查selinux [rootlocalho…

基于 OpenCV 的表格文本内容提取
作者 | 小白来源 | 小白学视觉小伙伴们可能会觉得从图像中提取文本是一件很麻烦的事情,尤其是需要提取大量文本时。PyTesseract是一种光学字符识别(OCR),该库提了供文本图像。PyTesseract确实有一定的效果,用PyTessera…

Redis以及Redis的php扩展安装无错版
安装Redis 下载最新的 官网:http://redis.io/ 或者 http://code.google.com/p/redis/downloads/list第一步:下载安装编译 #wget http://redis.googlecode.com/files/redis-2.4.4.tar.gz#tar zxvf redis-2.4.4.tar.gz#cd redis-2.4.4#make #make instal…
Android UI SurfaceView的使用-绘制组合图型,并使其移动
绘制容器类: //图形绘制容器 public class Contanier {private List<Contanier> list;private float x0,y0;public Contanier(){listnew ArrayList<Contanier>();}public void draw(Canvas canvas){canvas.save();canvas.translate(getX(), getY());chi…

新型混合共识机制及抗量子特性的 Hcash 主链测试链即将上线
由上海交通大学密码与计算机安全实验室(LoCCS)及上海观源信息科技有限公司负责研发的、具有新型混合共识机制及抗量子特性的 Hcash 主链代码已完成并在 2017 年 12 月18 日之前上传至github: https://github.com/HcashOrg/hcashd https://git…

CentOS 6虚拟机安装
这篇博客已经被合并到这里了: 虚拟机安装CentOS以及SecureCRT设置【完美无错版】 下面不用看了,看上面即可 1.下载虚拟机Oracle VM VirtualBox最新的下载地址: http://download.virtualbox.org/virtualbox/4.1.6/VirtualBox-4.1.6-74713-Win…

开发中新游戏《庞加莱》
三体题材的游戏,表现三体人在三体星上生活和冒险。收集水和物器,躲避火焰与巨日,探索遗迹并与巨型生物战斗。温度会因太阳位置不同而发生变化,进而对环境产生一定影响。 游戏开发中。 ---- 2017-4-27版视频: http://v.…

介绍一个打怪升级练习 Python 的网站,寓教于乐~
作者 | 周萝卜来源 | 萝卜大杂烩这是一个学习 Python 的趣味网站,通过关卡的形式来锻炼 Python 水平。一共有 33 关,每一关都需要利用 Python 知识解题找到答案,然后进入下一关。很考验对 Python 的综合掌握能力,比如有的闯关需要…

hive基本操作与应用
通过hadoop上的hive完成WordCount 启动hadoop ssh localhost cd /usr/local/hadoop ./sbin/start-dfs.sh cd /usr/local/hive/lib service mysql start start-all.sh Hdfs上创建文件夹 hdfs dfs -mkdir test1 hdfs dfs -ls /user/hadoop 上传文件至hdfs hdfs dfs -put ./try.tx…

PHP源代码分析-字符串搜索系列函数实现详解
今天和同事在讨论关键字过虑的算法实现,前几天刚看过布隆过滤算法,于是就想起我们公司内部的查找关键字程序,好奇是怎么实现的。于是查找了一下源代码,原来可以简单地用stripos函数查找, stripos原型如下: …