增量表全量表拉链表区别_hive 增量数据更新

增量表全量表拉链表区别_hive 增量数据更新一、概念增量表:记录更新周期内新增的数据,即在原表中数据的基础上新增本周期内产生的新数据;全量表:记录更新周期内的全量数据,无论数据是否有变化都需要记录;拉链表:一种数据存储和处理的技术方式,可以记录数据的历史信息,记录数据从开始一直到当前所有变化的信息。二、举例详解增量表:以页面访问数据表为例,假设该表从2020-06-01开始记录数据,按天更新,分区为dt。2020-06-01产生了三条访问数据,如下表:2020-06-02首页和商详页又产生了2条访问数据,该两条即为2020-06-


Jetbrains全系列IDE稳定放心使用

一、概念

  1. 增量表:记录更新周期内新增的数据,即在原表中数据的基础上新增本周期内产生的新数据;
  2. 全量表:记录更新周期内的全量数据,无论数据是否有变化都需要记录;
  3. 拉链表:一种数据存储和处理的技术方式,可以记录数据的历史信息,记录数据从开始一直到当前所有变化的信息。

二、举例详解

  1. 增量表:以页面访问数据表为例,假设该表从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进行查询;
  2. 全量表:以用户表为例,假设该表从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的所有注册用户数据。
  3. 拉链表:拉链表中有开始时间(start_time)和结束时间(end_time)两个字段,同时有dt和dp两个分区字段;
    start_time:数据的开始时间;
    end_time:数据有效的截至日期;
    dp:一般有ACTIVE(线上)和EXPIRED(过期)两个分区。ACTIVE表示数据当前在线上使用,所以其end_time为4712-12-31(系统能处理的最大时间,表示一个达不到的无限向后延伸的时间,意味着该数据在线上永久有效);EXPIRED表示数据过期,已变更,为历史状态,其end_time是数据变更时具体的时间。对于部分拉链表dp中还有HISTORY分区,此是由于有些拉链表数据量巨大,造成ACTIVE分区使用困难,因此将一部分业务上不再变更的数据转移到HISTORY分区。
    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之后的新数据。

以上内容为个人学习所得,如有问题,欢迎交流指正~

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/181145.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • scp 和 ssh 关于端口号的参数的区别 [转]

    scp 和 ssh 关于端口号的参数的区别 [转]

    2021年8月23日
  • uniapp- onshow和onload

    uniapp- onshow和onload官网onload:只加载一次,监听页面加载,其参数为上个页面传递的数据,参数类型为Object(用于页面传参),onShow:监听页面显示。页面每次出现在屏幕上都触发,包括从下级页面点返回露出当前页面例子:页面b:通过缓存跳转到页面aB:缓存uni.setStorageSync(‘newMember’,this.newMember)A:接收:onShow(){letstr=uni.getStorageSync(‘newMember’)this.list.

    2022年6月18日
  • Java基础语法(二)jdk的安装和Java环境配置

    Java基础语法(二)jdk的安装和Java环境配置

    2021年4月21日
  • vue支持es6_vue2转vue3

    vue支持es6_vue2转vue3转载:Vue2.0ES6语法降级ES5由于部分低版本的手机还不支持ES6语法,将会导致vue报错。综合了网上的各种办法,我的项目现在终于成功降级ES5.首先安装插件npminstall-Dbabel-preset-es2015babel-corebabel-preset-stage-2babel-loader编辑配置文件…

    2022年9月25日
  • nexus3下载地址

    nexus3下载地址由于nexus目前官网上已经很难下载了,除非翻墙,故整理了一下目前最新版本的分享一下,有需要的欢迎下载。win64:nexus-3.20.1-01-win64.zip链接:https://pan.baidu.com/s/19THgVb6LzLXJlxzomsvwhw提取码:9vvglinux:nexus-3.20.1-01-unix.tar.gz链接:https://pan.baid…

    2022年7月12日
  • 软件测试经典面试题(小题汇总)[通俗易懂]

    整理收集一些大家的题,自己来作答,回答不妥或者不全的还请大家指正网络(一)简单描述下TCP协议TCP:传输控制协议,是传输层通信协议。它有面向连接、可靠、字节流传输等特点TCP建立连接时,需要三次握手协议TCP三次握手的过程如下:客户端发送SYN保温给服务端,进入SYN_SEND(SEQ=X)状态服务端收到SYN保温,回应一个SYN(SEQ=Y)ACK(ACK=X+1)报文,进入…

    2022年4月13日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号