Hive拉链表实现

news2024/11/28 20:40:37

拉链表

  • 定义:用来记录历史变化,相比每天存储全量数据,可大幅减少数据冗余,可以基于历史变化,统计分析历史变化信息
  • 使用场景: 用于记录维度变化场景,记录维度变化,根据维度变化记录,统计聚合,加成生成不同时期历史指标

Hive 拉链表实现

实现原理

  • 首次(T+1: 2023-04-01) 同步业务系统全量数据到ods_user_info,并确定记录数据变化时标记字段(如日期变更)
  • 将首次全量数据导入到拉链表 dws_user_info_history 信息,记录开始日期(T+1),和截至日期(9999-12-31)
  • 记录当天更新数据,存储到另一张ods_user_info_update,用于与拉链表进行关联
  • 然后进行第二次拉链表制作,如果更新表数据跟拉链表关联上,则截至日期置为T+1 (2023-04-01),若关联不上,则仍然是有效数据;然后再将更新数据ods_user_info_update 与关联后的数据进行union
  • 生成最终拉链表

例子

ods 表

-- ods表
DROP TABLE IF EXISTS ods_user_info;
create table if not exists ods_user_info(
   `id` string COMMENT '用户id',
   `name` string COMMENT '姓名',
   `register_date` string COMMENT '注册日期' 
)COMMENT '用户信息 表'
PARTITIONED BY(dt STRING);

INSERT OVERWRITE TABLE  ods_user_info  PARTITION(dt = '2023-04-01')
select name,email,'2023-04-01'  from sdi_hljy_hrr_rzzp_jlxt.sdi_bs_employee

全量数据

– 更新增量表


-- 增量表
DROP TABLE IF EXISTS ods_user_info_update;
create table if not exists ods_user_info_update(
    `id` string COMMENT '用户id',
    `name` string COMMENT '姓名',
    `register_date` string COMMENT '注册日期' 
)COMMENT '用户信息更新表'
PARTITIONED BY(dt STRING);

INSERT OVERWRITE TABLE  ods_user_info_update  PARTITION(dt = '2023-04-02')
select name,email,'2023-04-02'  from sdi_hljy_hrr_rzzp_jlxt.sdi_bs_employee limit 10

增量更新数据

拉链表

DROP TABLE IF EXISTS dws_user_info_history;
create table if not exists dws_user_info_history(
    `id` string COMMENT '用户id',
    `name` string COMMENT '姓名',
    `register_date` string COMMENT '注册日期' ,
     t_start_date string COMMENT '开始日期' , 
     t_end_date string COMMENT '结束日期'
) COMMENT '用户信息更新表'
 
 
 

首次插入

INSERT INTO TABLE  dws_user_info_history  
select id,name,'2023-04-01','2023-04-01','9999-12-31'  from ods_user_info

后续更新拉链

INSERT OVERWRITE TABLE dws_user_info_history

SELECT
    
    A.id,
    A.name,
    A.register_date,
    A.t_start_date,
    -- 更新表关联上,则该条记录失效
    CASE WHEN A.t_end_date = '9999-12-31' AND B.id IS NOT NULL THEN
        '2023-04-01'
    -- 未关联上,则仍然有效
    ELSE A.t_end_date END AS t_end_date 
FROM dws_user_info_history A 
LEFT JOIN ods_user_info_update B on A.id = B.id
-- 与新增的数据进行合并
UNION
SELECT 
    C.id,
    C.name,
    C.register_date,
    '2023-04-02' AS t_start_date,
    '9999-12-31' AS t_end_date
FROM ods_user_info_update C 
    

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

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

相关文章

MATLAB-Lingo求解线性规划问题-奶制品2

奶制品的生产销售计划,给定条件不变 为了增加工厂的获利,开发了奶制品的深加工技术:用2小时和3元加工费,可将1kgA1加工成0.8kg高级奶制品B1,也可将1kgA2加工成0.75kg高级奶制品B2,每千克B1能获利44元&#…

ABI Research产业研究:ZiFiSense如何革新物流货物及运输包装追踪

“文章源自前沿科技研究机构ABI Research产业研究,重点介绍了ZETA LPWA协议开发公司纵行科技在业务发展、M-FSK调制技术以及ZETag云标签系列产品在物流货物追踪与包装管理等方面的应用分析,还分享了纵行科技ZETA技术在商业市场和生态系统方面的发展情况。…

用扩展方法来实现EventTrigger中事件的异步等待

一、什么是扩展方法? 扩展方法是一种C#语言提供的功能,允许我们向现有类型添加新的方法,而无需修改类型的源代码。扩展方法的优缺点如下: 二、它有什么优点? 1、不需要修改源类型的代码:使用扩展方法可以…

工具-Snipaste与ScreenToGif 生产力工具,对截图进行勾画操作,并可将截图贴至电脑任意界面;快捷动态截图成gif

文章目录 1、演示1.1 snipaste1.2 ScreenToGif 2、操作2.1 snipaste2.2 ScreenToGif 1、演示 1.1 snipaste 1.2 ScreenToGif 2、操作 2.1 snipaste 进入官网,可根据系统进行下载 https://zh.snipaste.com/ 傻瓜式安装成功后,电脑的右下角有个小图标&a…

兰林:科技赋能健康产业 助力乡村振兴建设

万民健康创始人 万民智养中医创始人 万民星农CEO兰林 党建引领谋发展 , 旗帜下乡促振兴 。 乡村振兴,健康先行。自党的十八大以来,国家卫健委贯彻落实“以基层为重点”的党的卫生与健康工作方针,推动医疗卫生工作重心下移、资源下…

Springboot +Flowable,通过代码绘制流程图并设置高亮

一.简介 通过代码绘制一张流程图,并设置成高亮。 首先先来看一下绘制出来的效果图,截图如下: 已经执行的节点和连线用红色标记出来,大致上就是这么一个效果。 二.怎么实现 将一个流程图绘制成图片,相关的 API 在…

倾斜摄影超大场景的三维模型的顶层合并的轻量化处理技术

倾斜摄影超大场景的三维模型的顶层合并的轻量化处理技术 倾斜摄影超大场景的三维模型的顶层合并需要进行轻量化处理,以减小数据量和提高数据的传输和展示性能。以下是几种常用的轻量化处理技术: 1、网格简化:对三角面片数量过多的模型进行网…

10个常用的软件测试工具,你不容错过

在现代软件开发中,软件测试是不可或缺的一部分。为了确保软件产品的质量和稳定性,软件测试工具成为了测试团队的得力助手。 有许多优秀的软件测试工具可以帮助测试人员在各种测试活动中提高效率和准确性。 本文将介绍10个常用的软件测试工具,…

LeetCode第141题——环形链表(Java)

题目描述: 给你一个链表的头节点 head ,判断链表中是否有环。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链…

多线程|基于阻塞队列和环形队列的生产者消费者模型架构

前言 那么这里博主先安利一下一些干货满满的专栏啦! Linux专栏https://blog.csdn.net/yu_cblog/category_11786077.html?spm1001.2014.3001.5482操作系统专栏https://blog.csdn.net/yu_cblog/category_12165502.html?spm1001.2014.3001.5482手撕数据结构https:/…

办公软件中可以使用chatGPT吗?

随着ONLYOFFICE新品协作空间的发布,有很多朋友已经开始在工作区或桌面版用上chatGPT的朋友担心,在协作空间是否也可以正常使用chatGPT,我可以很负责的告诉大家,完全可以正常使用。 什么是ONLYOFFICE协作空间? 简言之&…

Java8新特性--Lambda表达式

一、简述 Lambda 表达式,也可称为闭包,它 允许把函数作为一个方法的参数 (函 数作为参数传递进方法中) Lambda 简化了匿名内部类的形式, 可以达到同样的效果,匿名内部类在 编译之后会创建一个新的匿名内部类 出来,而 L…

Daftart.ai:人工智能专辑封面生成器

前言 Daft Art AI是一款使用人工智能技术来帮助您制作专辑封面的软件,它可以让您在几分钟内,用简单的编辑器和精选的美学风格,为您的专辑或歌曲创建出惊艳的高质量的艺术品。Daft Art AI有以下几个特点:简单易用:您只…

CVE漏洞复现-CVE-2019-11043-PHP-FPM 远程代码执行漏洞

CVE-2019-11043-PHP-FPM 远程代码执行漏洞 漏洞描述 来自Wallarm的安全研究员Andrew Danau在9月14-16号举办的Real World CTF中,意外的向服务器发送%0a(换行符)时,服务器返回异常信息。由此发现了这个0day漏洞 当Nginx使用特定的 fastcgi 配置时&…

Java学习14(ThreadLocal详解)

对于ThreadLocal,大家的第一反应可能是很简单呀,线程的变量副本,每个线程隔离。那这里有几个问题大家可以思考一下: ThreadLocal的 key 是弱引用,那么在 ThreadLocal.get()的时候,发生GC之后,k…

Python小姿势 - # 如何在Python中实现基本的数据类型

如何在Python中实现基本的数据类型 Python是一门面向对象的编程语言,基本的数据类型包括整数、浮点数、字符串、布尔值、列表、元组、字典等。 整数是最基本的数据类型,一个整数可以是任意大小的,只要内存允许。 浮点数也称为实数&#xff0c…

Ubuntu/CentOS 安装gitlab

直接用命令 sudo apt install gitlab-ce 安装最新版 也可以用sudo apt-get install gitlab-ce15.10.2-ce.0 指定要安装的版本,具体参考https://forum.gitlab.com/t/installing-older-versions-of-gitlab-on-ununtu/29507 如果已经安装,可以把原来版本卸…

QT QVBoxLayout 垂直布局控件

本文详细的介绍了QVBoxLayout控件的各种操作,例如:新建界面、添加控件、布局控件、显示控件、添加空白行、设置间距 、添加间距、设置位置、设置外边距、设置边距、添加固定宽度、方向上、方向下、方向左、方向右等等、 样式表等操作。 实际开发中&#…

Qt | 实现一个简单的可以转动的仪表盘

环境:vs2017Qt5.14.2 效果图: 准备工作: 效果图中的可以转动的仪表盘效果分为三个部分: 背景图(就是带去掉中间白色原点,去掉中间蓝色指针省下的部分);指针图片(中间蓝…

客户端发布后,一体机无法下载和安装

一、问题描述:客户端和服务端在不同网段,可以ping通IP,但是主机名ping不通,客户端提示『OPC 找不到主机名』 解决方法: 修改客户端机器的『hosts』文件,路径为: 『C:\Windows\System32\driver…