概念

增量表:记录更新周期内新增的数据,即在原表中数据的基础上新增本周期内产生的新数据;

全量表:记录更新周期内的全量数据,无论数据是否有变化都需要记录;

拉链表:一种数据存储和处理的技术方式,可以记录数据的历史信息,记录数据从开始一直到当前所有变化的信息。

增量表

以页面访问数据表为例,假设该表从2020-06-01开始记录数据,按天更新,分区为dt。2020-06-01产生了三条访问数据,如下表:


2020-06-02首页和商详页又产生了2条访问数据,该两条即为2020-06-02新增的数据,表更新后,dt分区2020-06-02新增2条数据(标红),此时数据表如下:

以此类推,2020-06-03又产生1条访问数据,表更新后,2020-06-03分区下新增1条数据(标黄),此时数据表如下:

因此,增量表每次更新是在原表数据的基础上记录本周期内新增的数据,如上例,按天更新的流量表,每次更新只新增一天内产生的新数据。注意:每次新产生的数据是以最新分区增加到表中,原先的数据依然存在于表中,如今天是2020-06-03,新增1条数据到表中,dt=2020-06-03,但2020-06-01的数据依然在表中,可以按照dt=2020-06-01进行查询;

全量表

以用户表为例,假设该表从2020-06-01开始记录数据,按天更新,分区为dt。2020-06-01有三个用户注册,数据表如下:

2020-06-02有一名用户注册,即新增了一名用户(标红),表更新后2020-06-02分区内会记录全量的数据,包括2020-06-01的用户数据(标绿),此时数据表如下:

同理,2020-06-03又有2名用户注册,即新增了2名用户(标蓝),表更新后2020-06-03分区内会记录全量数据,即包含2020-06-02的用户数据(标黄),此时数据表如下:

因此,全量表每次更新都会记录全量数据,包括原全量数据和本次新增数据,即每个分区内的数据都是截至分区时间的全量总数据。注意:全量表中每个分区内都是截至分区时间的全量数据,原先分区的数据依然存在于表中,只是每次更新会在最新分区内再更新一遍全量数据。如上例,按照dt=2020-06-03查询出的数据是截至2020-06-03的所有注册用户数据,也可以按照dt=2020-06-02查询截至2020-06-02的所有注册用户数据。

拉链表

拉链表中有开始时间(start_time)和结束时间(end_time)两个字段,同时有dt和dp两个分区字段,end_time也可做分区

  • start_time:数据的开始时间;

  • end_time:数据有效的截至日期;

dp:一般有 ACTIVEEXPIRED 两个分区。对于部分拉链表dp中还有HISTORY分区。

  • ACTIVE表示数据当前在线上使用,所以其end_time为4712-12-31(系统能处理的最大时间,表示一个达不到的无限向后延伸的时间,意味着该数据在线上永久有效);
  • EXPIRED表示数据过期,已变更,为历史状态,其end_time是数据变更时具体的时间。
  • 对于部分拉链表dp中还有HISTORY分区,此是由于有些拉链表数据量巨大,造成ACTIVE分区使用困难,因此将一部分业务上不再变更的数据转移到HISTORY分区,这就是归档。

dt:数据所在的时间分区,记录数据发生变更的时间。dt 记录数据从ACTIVE转移到EXPIRED的日期,大部分与end_time一致;当dp中有HISTORY分区,且数据转移到HISTORY分区时,其dt为数据转移到HISTORY的时间。

以账户数据表为例(表主键为账户id), 假设2020-06-01数据表中有3个账户信息,如下表:


2020-06-02账户id为111的用户支出100元,账户余额变为400,则原数据(标黄)的end_time即原数据的结束时间变为2020-06-02,dp变为EXPIRED即数据变为过期历史状态,dt为数据从ACTIVE变为EXPIRED的时间即2020-06-02;而新增的数据即账户id为111的用户余额变为400这条数据如下标红所示。数据表变化如下:


同理,2020-06-03账户id为222的用户支出50元,余额为50元,账户id为333的用户支出1000元,余额为500元,此时数据标变化如下:(标黄为变更前数据,标红为变更后数据)

因此,拉链表可以记录一条数据从开始到当前的所有历史信息,便于查询历史数据。

如还原2020-06-02的历史快照,使用end_time> ‘2020-06-02’ and start_time<= ‘2020-06-02’ 查询,end_time过滤2020-06-02之前的旧数据,start_time过滤2020-06-02之后的新数据。

select * from XX_table_chain
where star_date<=’2020-12-12’ and end_date>’2020-12-12’

又如获取最新数据,有两种写法:

select * from XX_table_chain where dp='active'
select * from XX_table_chain where star_date<=sysdate(-1) and end_date>sysdate(-1)

记住,获取某一天的历史快照不能写成where dt='2020-12-12’的格式。因为dt记录的是数据发生变化的时间,用这个条件筛选只能筛选出这一天状态发生变化的数据,并不是数据的历史快照。

参考:https://zhuanlan.zhihu.com/p/386463401

增量表、全量表和拉链表相关推荐

  1. 什么是全量表,增量表,快照表,拉链表?

    这一篇文章我们的目的是搞懂这四种表的概念,闲话不多说,直接看文字. 全量表 全量表没有分区,表中的数据是前一天的所有数据,比如说今天是24号,那么全量表里面拥有的数据是23号的所有数据,每次往全量表里 ...

  2. hive 如何判断 增量表和全量表

    文章目录 定义 如何判断 定义 全量表 全量表没有分区,表中的数据是前一天的所有数据,比如说今天是24号,那么全量表里面拥有的数据是23号的所有数据,每次往全量表里面写数据都会覆盖之前的数据,所以全量 ...

  3. 数仓建模-增量表及全量表

    判断一张表是增量表还是全量表,我认为有以下步骤: 1.这张表是基础数据表还是统计数据表(基础数据表一般来自业务系统的明细记录数据,统计数据表则为基于明细记录数据通过各种统计口径的统计表). 2.判断这 ...

  4. update 两个表关联_你真的了解全量表,增量表及拉链表吗?

    1 Mysql数据准备 第一天 9月10号数据 1,待支付,2020-09-10 12:20:11,2020-09-10 12:20:112,待支付,2020-09-10 14:20:11,2020- ...

  5. 真正秒懂增量表、全量表和拉链表

    一.概念 增量表:记录更新周期内新增的数据,即在原表中数据的基础上新增本周期内产生的新数据: 全量表:记录更新周期内的全量数据,无论数据是否有变化都需要记录: 拉链表:一种数据存储和处理的技术方式,可 ...

  6. hive增量表和全量表_你需要了解的全量表,增量表及拉链表

    mysql测试数据准备第一天 9月10号数据 1 2 31,待支付,2020-09-10 12:20:11,2020-09-10 12:20:11 2,待支付,2020-09-10 14:20:11, ...

  7. 拉链表、增量表、全量表

    1.概念解析 (1)存量:系统在某一时点时的所保有的数量: (2)流量:是指在某一段时间内流入/出系统的数量 (3)增量:则是指在某一段时间内系统中保有数量的变化 (4)增量 = 流入量 - 流出量 ...

  8. hive增量表和全量表_你真的了解全量表,增量表及拉链表吗?

    1 Mysql数据准备 第一天 9月10号数据 1,待支付,2020-09-10 12:20:11,2020-09-10 12:20:112,待支付,2020-09-10 14:20:11,2020- ...

  9. 关于数据仓库中变化历史数据处理方式:全量表、快照表、拉链表

    关于数据仓库中变化历史数据处理方式:全量表.快照表.拉链表 一.全量表 二.快照表 三.拉链表 对于数据仓库中变化的历史数据存储,一般有三种方式:全量表.快照表.拉链表 一.全量表 直接全量导入,覆盖 ...

最新文章

  1. 未来十年,人机交互将是重要的发展
  2. python手机版下载3.7.2-Python3.5.2
  3. 廉颇老矣,尚能饭否?响鼓重擂,上阵杀敌!
  4. 阐述计算机历程以及未来发展方向,计算机程序的发展史
  5. WINCE6.0添加对viewrs(PDF,Word,Execel和PowerPoint)支持
  6. Java 时间日期整理
  7. 【django】配置文件
  8. 计算机操作应用实训,计算机操作实训教案计算机操作实训教案.doc
  9. 发布软件之前,怎样告诉用户怎么用
  10. js match()方法
  11. 妙啊,小米11保护壳先小米11一步上市了...
  12. 阿里巴巴开源项目汇总-(JAVA)
  13. ELK logstash基本配置
  14. 三向合并和 Git 的合并策略,手把手教你Git 合并
  15. java教学视频_孔浩老师_孔浩Java教学系列视频教程 - 轻松自学网
  16. ShowModalDialog数据缓存的清除方法
  17. 国家企业信用信息公示系统爬取
  18. android svn新建分支,android studio中创建、切换svn分支
  19. 使用 vlmcsd 部署 KMS 服务器
  20. macOS Monterey 怎么升级?macOS 12升级教程

热门文章

  1. 华三服务器R6900系统安装,H3C UniServer R6900 G5服务器支持智能管理模块等多种运维工具...
  2. C#批量修改文件后缀
  3. vue-router的addRoutes()和addRoute()的使用问题
  4. vue中v-for使用key
  5. cmd命令行 【超快】定位到指定路径
  6. cmd 怎么找到文件目录路径
  7. 使用telnet远程华为路由器及CRT使用连接
  8. 4G背包多卡聚合路由器评测报告,高视与新支点ICG
  9. Linux学习 第一期 Ubuntu入门篇
  10. MICROS 9700安装