拉链表在数仓的应用十分普遍。它会在原始的表字段里面添加两个新的字段:create_time和end_time这两个。这两个字段的日期代表的是这条数据的开始时间和结束时间,也就是数据的生命周期。
我在开发的过程中会有这么一个问题,那就是我要取某一天的数据,有说法是create_time<=XXXX-XX-XX and end_time>=XXXX-XX-XX,也有说法说是:create_time<=XXXX-XX-XX and end_time>XXXX-XX-XX。区别在于end_time的时间是否取等号。这个问题我通过例子来详细理解。
举例:
有一张订单表,6月20号有3条记录:

订单创建日期 订单编号 订单状态 create_time end_time
2012-06-20 001 创建订单 2012-06-20 4921-12-31
2012-06-20 002 创建订单 2012-06-20 4921-12-31
2012-06-20 003 支付完成 2012-06-20 4921-12-31

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

订单创建日期 订单编号 订单状态 create_time end_time
2012-06-20 001 创建订单 2012-06-20 2012-06-21
2012-06-20 001 支付完成 2012-06-21 4921-12-31
2012-06-20 002 创建订单 2012-06-20 4921-12-31
2012-06-20 003 支付完成 2012-06-20 4921-12-31
2012-06-21 004 创建订单 2012-06-21 4921-12-31
2012-06-21 005 创建订单 2012-06-21 4921-12-31

我要取2012-06-21这一天的历史快照数据,
也就是
如果是:create_time<=2012-06-21 and end_time>=2012-06-21
上面整张表里面的数据都可以取到。
如果是:create_time<=2012-06-21 and end_time>2012-06-21
得出的结果是:

订单创建日期 订单编号 订单状态 create_time end_time
2012-06-20 001 支付完成 2012-06-21 4921-12-31
2012-06-20 002 创建订单 2012-06-20 4921-12-31
2012-06-20 003 支付完成 2012-06-20 4921-12-31
2012-06-21 004 创建订单 2012-06-21 4921-12-31
2012-06-21 005 创建订单 2012-06-21 4921-12-31

少了001创建订单这条数据,所以不取等号,我们取到的数据为这条数据到指定日期当前状态最新的数据。

补充一个新的点:以传统的电商系统为例,我们在单天有一条数据从创建订单到支付完成。离线往往是T+1,我第二天去跑昨天的数据,这时候,到了第二天只会跑这条数据最新的状态,也就是昨天留下来的这条数据是只有支付完成的状态,不会把创建订单这条数据也留下来。

拉链表取某一天的历史快照相关推荐

  1. 缓慢变化维解决方案——拉链表实现详解

    缓慢变化维--拉链表实现 1.概述 1 缓慢变化维简介 缓慢变化维,简称SCD(Slowly Changing Dimensions) 一些维度表的数据不是静态的,而是会随着时间而缓慢地变化(这里的缓 ...

  2. mysql 时间拉链表_拉链表 - 夜半钟声到客船 - 博客园

    1.为什么要做拉链表 拉链表适用于同步新增和变化的数据!对于周期型事实表,采用同步新增和变化的方式! 使用场景: 1)比如订单状态: 三天内该订单状态发生了变化,但是同一个事物内进行的 2)人的出行轨 ...

  3. 三、数据仓库实践-拉链表设计

    1 写在开头的话 拉链表,学名叫缓慢变化维(Slowly Changing Dimensions),简称渐变维(SCD),俗称拉链表,是为了记录关键字段的历史变化而设计出来的一种数据存储模型,常见于维 ...

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

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

  5. hql取满足条件最新一条记录_数据仓库怎么做拉链表记录数据变化情况,看看这篇文章 就明白了...

    小文老师给你讲解数据仓库的ETL拉链算法,通过这篇文档,让你快速了解数据拉链. 一 首先我们先来看下,什么是拉链?在数据仓库中,拉链就是记录数据在某一时间区间内的状态以及数据在某一时间点上的数据变化的 ...

  6. 数据仓库中历史拉链表的更新方法

    原文地址:http://lxw1234.com/archives/2015/08/473.htm 这里简单介绍一下这种历史拉链表的更新方法. 本文中假设: 数据仓库中订单历史表的刷新频率为一天,当天更 ...

  7. hive 分区_Hive下数据仓库历史拉链表如何加工,分区键该如何选择

    缓慢变化维 说到历史拉链表,首先得说下缓慢变化维. 在现实世界中,维度的属性并不是静态的,而是随着时间的变化而变化,这也体现了数据仓库的特点之一,是反映历史变化的.相对于数据增长较为快速的事实表,维度 ...

  8. Hive数据仓库中历史拉链表实践

    数据准备 在mysql中创建测试表orders CREATE TABLE `orders` (`orderid` int(11) NOT NULL AUTO_INCREMENT,`status` va ...

  9. greenplum 历史拉链表

    3.1 历史拉链表 数据仓库定义:是一个面向主题的.集成的.相对稳定的.反映历史变化的数据集合,用于支持管理决策. 历史拉链表:一种数据模型,主要是针对数据仓库设计中表存储数据的方式而定义的.它记录了 ...

最新文章

  1. Mashmokh and Numbers CodeForces - 415C
  2. MemberShip驗證
  3. mysql2005错误_SQL Server 2005 还原数据库错误解决方法
  4. 在linux下面安装MySQL5.6管理帐号安装失败的解决方法
  5. Node.js 目录操作
  6. 洛谷 CF1043F Make It One 解题报告
  7. Android——线程通讯 Handler、Looper、Message;
  8. RePlugin插件接入指南
  9. 所有受限制的应用程序包_您需要了解的有关Mac的Apple新款M1芯片的所有信息
  10. paip.提升性能----java 无锁结构(CAS, Atomic, Threadlocal, volatile, 函数式编码, 不变对象)
  11. P5018 对称二叉树
  12. python接口自动化之自动发送测试报告邮件
  13. 人工智能TensorFlow进行车辆检测车辆识别
  14. 每日一佳——Computational Rationalization: The Inverse Equilibrium Problem(Kevin Waugh et al. ,ICML ,2011)
  15. PyGame每日一练——五子棋小游戏
  16. 使用WebGL绘制流动虚线
  17. 研报实现——抓“妖股”就那么容易吗?
  18. 悲剧艺术! finalize方法实现对象的自我拯救
  19. 容斥原理 —— 求1~n有多少个数与k互质(二进制算法详细解释模板)
  20. 2012nbsp;百度实习生招聘nbsp;笔试试题

热门文章

  1. licode erizo pipleline 1 : handlercontext
  2. 六、mysql性能优化
  3. 如何提升营销工作ROI?跨渠道营销了解一下
  4. 计算机房面积设置气消条件,广东省《建筑防烟排烟系统技术标准》问题释疑
  5. 学习笔记(2):Java面试:核心考点突击大串讲-Redis的持久化机制
  6. 游戏开发中的专业术语
  7. HO-PLGA-COOR,酯封端聚(D,L-丙交酯-co-乙交酯)共聚物
  8. 爱上python系列------python上下文管理器(二):对suppress进行装饰器重新实现
  9. 你好,法语!A2知识点总结(1)
  10. arch Linux更新添加源,Arch Linux 更新源(以清华 arch 源为例)