hadoop学习---基于Hive的数仓搭建增量信息拉链表的实现

拉链表就是SCD2,它的优点是即满足了反应数据的历史状态,又能在最大程度上节省存储。

拉链表的实现需要在原始字段基础上增加两个新字段:

  1. start_time(表示该条记录的生命周期开始时间------周期快照时的状态)
  2. end_time(该条记录的生命周期结束时间)

采集实现步骤

  1. 建立增量数据临时表update;
  2. 抽取昨日增量数据(新增和更新)到update表;
  3. 建立合并数据临时表tmp;
  4. 合并昨日增量数据(update表)与历史数据(拉链表):
    1. 新数据end_time设为'9999-12-31',也就是当前有效;
    2. 如果增量数据有重复id的旧数据,将旧数据end_time更新为前天(昨日-1),也就是从昨天开始不再生效;
    3. 合并后的数据写入tmp表;
  5. 将临时表的数据,覆盖到拉链表中;
  6. 下次抽取需要重建update表和tmp表。
  7. 查询拉链表数据时,可以通过start_time和end_time查询出快照数据。

小结:

当每日采集增量信息时,采用拉链表的方式,通常在原始信息表中增加有效信息开始时间start_time和结束时间end_time两个字段,先将改变或新增的信息提取出来组成一张新表,再将新表与原始表做右外联接,重新抽取字段更新end_time字段信息,目的是改变原始表的旧信息的end_time时间,最后将更新后的原始表和新增的更新信息表进行union all 操作,并将结果覆盖到hive数据库中。

也就是原有hive数据库中的表不变,想办法更新旧信息的end_time时间,同时将新增信息后改写后的信息重新新增一行到原始数据表中即可。

案例流程:

相关推荐
辞旧 lekkk2 分钟前
【Linux】Linux进程控制(三)自主实现简易shell命令行解释器
linux·运维·服务器·学习·萌新
学历真的很重要17 分钟前
【系统架构师】第一章 计算机系统基础知识(详解版)
学习·职场和发展·系统架构·系统架构师
浅念-21 分钟前
C语言——自定义类型:结构体、联合体、枚举
c语言·开发语言·数据结构·c++·笔记·学习·html
AI视觉网奇27 分钟前
ue slot 插槽用法笔记
笔记·学习·ue5
Jack___Xue29 分钟前
LangGraph学习笔记(二)---核心组件与工作流人机交互
笔记·学习·人机交互
微露清风38 分钟前
系统性学习Linux-第三讲-进程概念
linux·运维·学习
AI视觉网奇43 分钟前
blender fbx 比例不对 比例调整
笔记·学习·ue5
中二病码农不会遇见C++学姐1 小时前
SRT文件全解析:从“视频对话本”到时间轴字幕格式
学习·srt
新缸中之脑1 小时前
构建一个论文学习AI助手
人工智能·学习
FPGA小迷弟1 小时前
FPGA处理图像需要用到的主流接口详解
学习·fpga开发·verilog·fpga·modelsim