相关文章推荐
聪明的冰棍  ·  Navicat for Sqlite ...·  11 月前    · 
刚毅的灭火器  ·  通过V$SESSION视图查看当前数据库会话 ...·  11 月前    · 
卖萌的烤土司  ·  【【专家观点】东数西算高楼渐起——全国算力一 ...·  11 月前    · 
时尚的蜡烛  ·  AWS DMS 数据验证 - AWS ...·  11 月前    · 
温柔的黄花菜  ·  mysql怎么根据逗号将一行数据拆分成多行数 ...·  11 月前    · 
高大的柿子  ·  AWVS14下载(Win、Linux、Mac ...·  1 年前    · 
聪明的柚子  ·  人工智能识别图像是从输入到输出-掘金·  2 年前    · 
暴走的苹果  ·  org.springframework.we ...·  2 年前    · 
淡定的跑步鞋  ·  sql server select ...·  2 年前    · 
傲视众生的高山  ·  tkinter 弹出窗口 传值回到 主窗口 ...·  3 年前    · 
Code  ›  增量表全量表拉链表区别_hive 增量数据更新开发者社区
数据表 hive 大数据
https://cloud.tencent.com/developer/article/2150568
开朗的书包
3 年前
全栈程序员站长

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

前往小程序,Get 更优 阅读体验!
立即前往
腾讯云
开发者社区
文档 建议反馈 控制台
首页
学习
活动
专区
圈层
工具
MCP广场
文章/答案/技术大牛
发布
首页
学习
活动
专区
圈层
工具
MCP广场
返回腾讯云官网
全栈程序员站长
首页
学习
活动
专区
圈层
工具
MCP广场
返回腾讯云官网
社区首页 > 专栏 > 增量表全量表拉链表区别_hive 增量数据更新

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

作者头像
全栈程序员站长
发布 于 2022-11-03 16:54:44
发布 于 2022-11-03 16:54:44
2.7K 0
举报
文章被收录于专栏: 全栈程序员必看 全栈程序员必看

一、概念

  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进行查询;

    1. 全量表 :以用户表为例,假设该表从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的所有注册用户数据。

      1. 拉链表 :拉链表中有开始时间(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个账户信息,如下表:
 
推荐文章
聪明的冰棍  ·  Navicat for Sqlite 合并两个相同的数据库(扩充数据库内容)_sqlite_程序小小说-DAMO开发者矩阵
11 月前
刚毅的灭火器  ·  通过V$SESSION视图查看当前数据库会话信息-云原生数据库 PolarDB-阿里云
11 月前
卖萌的烤土司  ·  【【专家观点】东数西算高楼渐起——全国算力一张网 东西协同一盘棋】-国家发展和改革委员会
11 月前
时尚的蜡烛  ·  AWS DMS 数据验证 - AWS 数据库迁移服务
11 月前
温柔的黄花菜  ·  mysql怎么根据逗号将一行数据拆分成多行数据 - 开发技术 - 亿速云
11 月前
高大的柿子  ·  AWVS14下载(Win、Linux、Mac)-腾讯云开发者社区-腾讯云
1 年前
聪明的柚子  ·  人工智能识别图像是从输入到输出-掘金
2 年前
暴走的苹果  ·  org.springframework.web.util.nestedservletexception request processing failed nested exception-掘金
2 年前
淡定的跑步鞋  ·  sql server select 如果值为Null则给0 sql如果是null就不显示_deanyuancn的技术博客_51CTO博客
2 年前
傲视众生的高山  ·  tkinter 弹出窗口 传值回到 主窗口 - 罗兵 - 博客园
3 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号