Hive 之拉链表

news2024/11/24 16:06:21

文章目录

    • 什么是拉链表?
    • 如何实现拉链?
    • 拉链表实现示例

什么是拉链表?

一张存储历史数据的表,记录数据由 “生” 到 “死” 的过程,用于处理缓慢变化维。

好处是拉链表可以保存每条数据的所有历史记录,轨迹十分清晰。

如何实现拉链?

我们在拉链表中常常通过定义 start_timeend_time 这两个字段来记录数据当前是否还在有效期内

具体实现逻辑:

假如用户当前某个字段的值发生了变化,例如:昵称被用户修改了。我们需要进行下面两个操作。

新增数据:
此时便会产生一条新的数据,start_time 值为数据更新的时间,而 end_time 的值一般设为 9999-12-31(不过期的时间)。

过期数据:
我们需要将用户的上一条数据设置为过期状态,也就是说用户上一条数据的 end_time 字段的值应该被设置为新数据开始时间的上一秒,让它成为过去式。

通过为新增数据设置过期时间,为过期数据设置结束时间的方式,我们完成对数据的更新操作,同时还可以保存历史数据,这就是拉链表的作用。

拉链表实现示例

  1. 我们在 Hive 中 dwd 层创建拉链表,并插入示例数据。
create table if not exists dwd.dwd_zip(
id int, -- 主键
name string,
gender string,
addr string,
start_time string,
end_time string)
row format delimited fields terminated by '\t';

insert into dwd.dwd_zip values
(001,"zhangsan","男","上海","2022-10-20","9999-12-31"),
(002,"lisi","男","北京","2022-10-20","9999-12-31"),
(003,"wangwu","男","天津","2022-10-20","9999-12-31"),
(004,"laoqin","男","常德","2022-10-20","9999-12-31"),
(005,"zc","男","平江","2022-10-20","9999-12-31"),
(006,"lihua","男","长沙","2022-10-20","9999-12-31");

插入后数据如下所示:

在这里插入图片描述

  1. 我们在 Hive 中 ods 层设置增量表 update_zip,并插入示例数据。
create table if not exists ods.update_zip(
id int, -- 主键
name string,
gender string,
addr string,
start_time string,
end_time string)
row format delimited fields terminated by '\t';

insert into ods.update_zip values
(001,"张三","男","上海","2022-10-21","9999-12-31"),
(099,"wuziyi","女","武汉","2022-10-21","9999-12-31");

插入后数据如下所示:

在这里插入图片描述

  1. 在 ods 层中的增量表中可以看到我们修改了一行数据,增加了一行数据,现在我们通过拉链表的方式对其进行更新。

  2. 实现 SQL

create table dwd.tmp_zip as
select
  id,
  name,
  gender,
  addr,
  start_time,
  end_time
from
  ods.update_zip -- 增量表
union all -- 合并历史表
select
  a.id,
  a.name,
  a.gender,
  a.addr,
  a.start_time,
  -- 判断是否进行新增或者更新,如果没有进行新增或更新操作,就返回 end_time 原值。否则就对结束时间进行修改,增量数据的开始时间减1,将它设置为过期状态。
  if(b.id is null or a.end_time < '9999-12-31',a.end_time,date_sub(b.start_time,1)) end_time
from
  dwd.dwd_zip a -- 历史拉链表
left join
  ods.update_zip b -- 增量数据表
on
  a.id = b.id;

最终结果如下所示:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/28196.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java高级之Git

Java高级之Git 第1章 Git简介 Git是一个免费的、开源的分布式版本控制系统&#xff0c;旨在快速高效地处理从小型到非常大的项目的所有内容。 Git易于学习&#xff0c;占用空间小&#xff0c;性能快如闪电。它超越了SCM工具&#xff0c;如Subversion&#xff0c;CVS&#xf…

10.0 SpringMVC源码分析之MVC 模型由来

0.MVC 模型由来 0.1 Model1 模型 Model1 模型是很早以前项目开发的一种常见模型&#xff0c;项目主要由 jsp 和 JavaBean 两部分组成。 它的优点是:结构简单&#xff0c;开发小型项目时效率高。 它的缺点也同样明显: 第一:JSP的职责兼顾于展示数据和处理数据(也就是干了控制…

m基于matlab的BTS天线设计,带GUI界面

目录 1.算法概述 2.仿真效果预览 3.MATLAB部分代码预览 4.完整MATLAB程序 1.算法概述 内容&#xff1a; N个天线按等距分布在z轴上&#xff0c;第N个和第N-1的之间的天线的距离是一定的为d。 在上述有红色的一块&#xff0c;是计算Taylor 公式的&#xff0c;有一个疑问就…

【计算机毕业设计】23.网上商城购物系统+vue

一、系统截图&#xff08;需要演示视频可以私聊&#xff09; 摘 要 随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的先进技术接轨&#xff0c;通过科技手段来提高自身的优势&#xff0c;网上商城购物系统当然也不能排除在外。网上商城购物系统是…

Java不得不知道的八股文之哈希表

哈希表简介 在哈希表中进行添加&#xff0c;删除&#xff0c;查找等操作&#xff0c;性能十分之高&#xff0c;不考虑哈希冲突的情况下&#xff08;后面会探讨下哈希冲突的情况&#xff09;&#xff0c;仅需一次定位即可完成&#xff0c;时间复杂度为O(1)&#xff0c;接下来我…

如何回复SCI审稿人评审意见(response letter)

如何高效地回复审稿意见&#xff1f;&#xff08;上&#xff09; 如何高效地回复审稿意见&#xff1f;&#xff08;中&#xff09; 如何高效地回复审稿意见&#xff1f;&#xff08;下&#xff09; 如何高效回复审稿人意见&#xff08;附实例&#xff09; 如何高效的回复审稿人…

机器学习笔记之核方法(一)核方法介绍

机器学习笔记之核方法——核方法介绍引言回顾&#xff1a;支持向量机的对偶问题核方法思想介绍线性可分与线性不可分非线性带来高维转换对偶表示带来内积核函数核函数满足的条件(2022/11/23)引言 本节将介绍核方法以及核函数。 回顾&#xff1a;支持向量机的对偶问题 在支持…

Ubuntu sudo apt update 过程中遇到的报错解决

文章目录参考资料1. 前言2. 换源方式1. 方式1&#xff1a; 更换/etc/apt/sources.list文件里的源2. 方式2&#xff1a;在设置中software&updates(软件和更新)里进行换源3. 问题解决--移除失效的ppa参考资料 E: 仓库 “https://mirrors.aliyun.com/docker-ce/linux/ubuntu …

目标检测算法——YOLOv5/YOLOv7改进结合涨点Trick之ASFF(自适应空间特征融合)

>>>深度学习Tricks,第一时间送达<<< 🚀🚀🚀NEW!!!魔改YOLOv5/YOLOv7目标检测算法来啦 ~ 💡💡魔法搭配计算机视觉领域各类创新新颖且行之有效的网络结构,平均精度均值mAP涨点明显,实验效果也俱佳。有需要的小伙伴可以在CSDN后台留言+点赞收藏…

闲人闲谈PS之三十三——项目承诺成本管理

惯例闲话&#xff1a;学习很苦&#xff0c;坚持很酷——最近看到这句话&#xff0c;苦和酷放在一起&#xff0c;总有一种感觉&#xff0c;吃苦是为了耍酷。这恰恰是这句话的问题之处&#xff0c;苦是自己的&#xff0c;酷是外部环境对自己的评价。所以&#xff0c;苦这件事情&a…

k8s1.25版本集群部署(亲测有效)

1.实验环境准备 准备三台centos7虚拟机&#xff0c;用来部署k8s集群&#xff1a; master&#xff08;hadoop1&#xff0c;192.168.229.111&#xff09;配置&#xff1a; 操作系统&#xff1a;centos7.3以及更高版本都可以配置&#xff1a;4核cpu&#xff0c;4G内存&#xff…

【JavaScript流程控制-分支】

JavaScript流程控制-分支1 本节目标2 流程控制3 顺序流程控制4 分支流程控制if语句4.1 分支结构4.2 if语句4.2.1 语法结构4.2.2 执行流程4.3 if else语句(双分支语句)4.3.1 语法结构4.3.2 执行流程4.4 if else if语句(多分支语句)4.4.1 语法结构4.4.2 执行流程5 三元表达式5.1 …

蓝桥杯嵌入式第一篇 点亮LED灯开启成功之路

文章目录前言一、准备工作1.拿到开发板第一步看原理图2.下载STM32cubeMX二、开始点灯1.查看LED原理图2.cubeMX配置3.代码实现总结前言 从这篇文章开始将为大家带来最详细最全面的蓝桥杯嵌入式教学&#xff0c;本教程将使用STM32cubeMX教大家快速入门STM32。花最少的时间拿下国…

电镀废水末端除镍工艺,除镍树脂如何使用?

电镀废水的处理方案分析 电镀废水中含有铜、镍等金属物质&#xff0c;具有较高的回收价值。因此&#xff0c;为了减少环境污染&#xff0c;提高电镀企业的经济效率&#xff0c;一般会对电镀废水进行 回收性的处理&#xff0c;来回收金属铜、镍等。而从目前情况看&#xff0c;…

ipv6地址概述——了解ipv6与ipv4不同

目录 一 ipv4与ipv6 1.ipv4的概述 2.ipv4存在的问题 3.ipv6的概述 4.ipv4与ipv6的优点和特点 5.ipv6与ipv4的变化 ipv4包头 ipv6包头 6.ipv6的基本术语 个人简介&#xff1a;云计算网络运维专业人员&#xff0c;了解运维知识&#xff0c;掌握TCP/IP协议&#xff0c;每…

三菱机床联网

一、设备信息确认 1、确认型号 数控面板拍照确认&#xff1a; 此系统为&#xff1a;M70控制器 注&#xff1a;目前M70和M80&#xff0c;基本上都有网络通讯和采集功能。 2、确认通讯接口 网口常见位置&#xff0c;LAN标号&#xff0c;可通过这个确认&#xff1a; 1、数控…

云计算的一些常见安全风险

许多企业正在将业务转移到云端以提高效率并简化工作负载。虽然云计算可以为组织提供竞争优势&#xff0c;但重要的是不要在不了解所涉及的风险的情况下仓促采用云。无论您的组织是否已经开始迁移到云&#xff0c;有几个关键的安全注意事项需要牢记在心。下文是一些云计算的常见…

【SQLite】一、SQLite简介——MySQL的简洁版

作者主页&#xff1a;Designer 小郑 作者简介&#xff1a;浙江某公司软件工程师&#xff0c;负责开发管理公司OA、CRM业务系统&#xff0c;全栈领域优质创作者&#xff0c;CSDN学院、蓝桥云课认证讲师&#xff0c;开发过20余个前后端分离实战项目&#xff0c;主要发展方向为Vue…

PTA题目 寻找250

对方不想和你说话&#xff0c;并向你扔了一串数…… 而你必须从这一串数字中找到“250”这个高大上的感人数字。 输入格式&#xff1a; 输入在一行中给出不知道多少个绝对值不超过1000的整数&#xff0c;其中保证至少存在一个“250”。 输出格式&#xff1a; 在一行中输出第…

openEuler 通过Rook在k8s集群部署Ceph

openEuler 版本号: 2209 前置条件 k8s集群版本 kubectl version Server Version: version.Info{Major:"1", Minor:"22", GitVersion:"v1.22.12", GitCommit:"b058e1760c79f46a834ba59bd7a3486ecf28237d", GitTreeState:"clean&…