2023.12.1 --数据仓库之 拉链表

目录

什么是拉链表

为什么要做拉链表?

没使用拉链表:

使用了拉链表:

题中订单拉链表的形成过程

实现语句


什么是拉链表

拉链表是缓慢渐变维的一种解决方案.

拉链表,记录每条信息的生命周期,一旦一条记录的生命周期结束,就重新开始一条新的记录,并把当前日期放入生效开始日期,如果当前信息至今都有效,就在结束日期中填入一个最大值(9999-12-31)

为什么要做拉链表?


拉链表适合于:数据会发生变化,但是大部分是不变的
比如:订单信息从未支付、已支付、未发货、已完成等状态经历了一周,大部分时间是不变化的,如果数据量有定规模,无法按照每天全量的方式保存。

没使用拉链表:

从上图可以看到,如果按照上面那个表的记录方法,因为订单未发货的状态从1月持续到了12月,假如一直都是全量同步的方式,那么未发货这条信息,我们将需要用350多行来记录维护他,但对客户来说,或者维护人员来说,我们关心的是订单状态转换的那一刻,在这期间的信息并不重要,所以这种记录方法这会导致冗余过多

使用了拉链表:

从上图的下面那张图可以看到,原本我们需要用350多行来维护未发货这条状态的信息,使用了拉链表后,我们只需要一行,即可涵盖了1月3日到12月11日这300多天的状态.

题中订单拉链表的形成过程

 制作拉链表,简单来说就是在表原本的字段上,再加上两列字段,一个是开始时间,一个是结束时间

然后每天找出新增和变化的订单导入到拉链表中,通过合并初始的表和新增变化的表,就能得到对应的拉链表

实现语句

1.从ods层得到每天更新或者新增的数据表

2.原始拉链表 left join 增量表,如果增量表关联id为null或者原始拉链表end_time不是9999-12-31(9999说明这是最新的状态) ,保留原有数据,否则修改拉链表的end_time为增量表中的start_time 减去 1

3.拿着left join 修改后的拉链数据,直接union all 增量数据集

4.把最新拉链数据保存到临时表中 

5.insert overwrite 把数据插入到原始拉链表中

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

EI论文复现:基于组合双向拍卖的共享储能机制研究程序代码!

本程序参考EI期刊论文《基于组合双向拍卖的共享储能机制研究》,文中的组合双向拍卖交易机制较为新颖,本质上属于博弈范畴,共享储能是目前的研究热点,牵涉到共享储能参与者的投标策略和收益函数,文中所提模型可为电力市…

【兔子王赠书第10期】零基础入门Python,看这篇就够啦!

文章目录 写在前面推荐图书前言为什么要学习编程如何学习编程本书内容获得帮助 推荐理由粉丝福利写在后面 写在前面 粉丝福利第10期来啦,本期博主给大家推荐一本非常适合零基础入门Python的图书:《Python超能学习手册》,祝大家读完本书后都可…

深入微服务架构 | 微服务与k8s架构解读

微服务项目架构解读 ① 什么是微服务? 微服务是指开发一个单个小型的但有业务功能的服务,每个服务都有自己的处理和轻量通讯机制,可以部署在单个或多个服务器上。 微服务也指一种种松耦合的、有一定的有界上下文的面向服务架构。也就是说&…

<Linux>(极简关键、省时省力)《Linux操作系统原理分析之linux存储管理(5)》(21)

《Linux操作系统原理分析之linux存储管理(5)》(21) 6 Linux存储管理6.6 Linux 物理空间管理6.6.1 Linux 物理内存空间6.6.2 物理页面的管理6.6.3 空闲页面管理——buddy 算法 6.7 内存的分配与释放6.7.1 物理内存分配的数据结构 6…

运维工具之MobaXterm工具安装和使用

一、MobaXterm工具简介 MobaXterm是远程计算的终极工具箱。在一个Windows应用程序中,它提供了大量的功能,这些功能是为程序员、网站管理员、it管理员以及几乎所有需要以更简单的方式处理远程工作的用户量身定制的。MobaXterm在一个开箱即用的可移植exe文…

ros2与stm32通讯比较优秀的串口库

这个是我确定的串口库:serial: serial::Serial Class Reference (wjwwood.io) 我也不知道其他的串口库了,我就知道几个,然后我觉得这个是3个里面学习周期比较短,然后质量比较可靠的库 我隐隐觉得这个串口库就是ros1选择的串口库…

如何在Linux环境搭建本地SVN服务器并结合cpolar实现公网访问

目录 前言 1. Ubuntu安装SVN服务 2. 修改配置文件 2.1 修改svnserve.conf文件 2.2 修改passwd文件 2.3 修改authz文件 3. 启动svn服务 4. 内网穿透 4.1 安装cpolar内网穿透 4.2 创建隧道映射本地端口 5. 测试公网访问 6. 配置固定公网TCP端口地址 6.1 保留一个固定…

SVN 版本管理

SVN 文件状态 这里有一张图片可以说明:

C#中内置的泛型委托Func与Action

简介 从C# 3.0起很少需要自己声明委托。System.Func 是一个泛型委托,它可以表示带有返回值的方法。它可以接受一个到多个输入参数,并返回一个指定类型的结果。System.Func 委托的最后一个类型参数表示方法的返回值类型。而System.Action系列代表返回voi…

文章解读与仿真程序复现思路——中国电机工程学报EI\CSCD\北大核心《考虑富氧燃烧技术的电–气–热综合能源系统低碳经济调度》

这个标题涉及到一个关于能源系统和经济调度的复杂主题。让我们逐步解读: 电–气–热综合能源系统: 指的是一个综合的能源系统,包括了电力、气体(可能是天然气等)、热能等多个能源形式。这种系统的设计和优化旨在使不同…

vue+electron问题汇总

1. Vue_Bug Failed to fetch extension, trying 4 more times 描述:项目启动时报错 解决:注释图片中内容 2. Module not found: Error: Can’t resolve ‘fs’ in 描述:项目启动报错 解决:vue.config.js中添加图中数据 3.导入…

8.7 矢量图层点要素点分布(Point displacement)使用

文章目录 前言点分布(Point displacement)QGis代码实现 总结 前言 前面介绍了矢量-点要素-单一符号、矢量-点要素-分类符号、矢量-点要素-分级符号以及矢量-点要素-基于规则的使用本章介绍如何使用点分布(Point displacement)说明…

Java集合常见问题

目录 Java集合 1.前言2.集合3.Collection接口类3.1 List接口3.1.1 ArrayList(常用)3.1.2 LinkedList(常用)3.1.3 Vector(不常用) 3.2 Set接口3.2.1 HashSet(常用)3.2.2 LinkedHash…

软件设计中如何画各类图之五用例图(Use Case Diagram):系统功能需求与用户交互的图形化描述

目录 1 前言2 用例图基本介绍3 用例图的符号及说明3.1 用例(Use Case)3.2 参与者(Actor)3.2 关系(Relationships) 4 画用例图的步骤4.1 确定系统边界4.2 识别参与者4.3 定义用例4.4 绘制关系4.5 完善细节 5…

webpack学习-2.管理资源

webpack学习-2.管理资源 1.这章要干嘛2.加载css注意顺序! 3.总结 1.这章要干嘛 管理资源,什么意思呢?管理什么资源?项目中经常会 导入各种各样的css文件,图片文件,字体文件,数据文件等等&#…

双目光波导AR眼镜_AR智能眼镜主板PCB定制开发

AR眼镜方案的未来发展潜力非常巨大。随着技术的进步,AR眼镜的光学模块将变得更小巧,像素密度也会增加,实现更高分辨率的画面,甚至能够达到1080P、2K和4K级别的清晰度,从而提升用户的视觉体验。 AR智能眼镜的硬件方面&a…

spring cloud nacos整合gateway

文章目录 gateway快速入门创建gateway服务,引入依赖编写启动类编写基础配置和路由规则重启测试网关路由的流程图 断言工厂过滤器工厂路由过滤器的种类请求头过滤器默认过滤器总结 全局过滤器全局过滤器作用自定义全局过滤器过滤器执行顺序 跨域问题什么是跨域问题解…

GitHub上1.5K标星的QA和软件测试学习路线图

​最近在GitHub上发现一个项目,项目描述了作为QA工程师,进行软件测试技能提升时的,建议的软件测试学习顺序图​。 虽然2021年起就不再更新了,但是居然有1.5K的​星。 整个项目有两个部分​: ​1.QA和软件测试学习顺序…

1.uniapp基础

1.uniapp基础 官方文档:uni-app官网 1.1开发工具 (1)工具: HBuilderX HBuilderX-高效极客技巧 1.2 新建项目 (1) 文件》新建项目 ​ (2)选择相应的配置信息,填写项目根路…

ArkUI组件--Text组件

1.声明Text组件并设置文本内容 Text(content?:string|Recource) #两种数据类型,字符串和本地资源文件 ①string格式,直接填写文本内容 Text(需要显示的文本) ②Recource格式,读取本地资源文件 Text($r(app.string.width_label)) 读取图…