拉链表制作

news2024/11/29 4:36:20

1.拉链表的应用场景

拉链表适合于:数据会发生变化,但是大部分是不变化的(即:缓慢变化维。还需要保留历史数据做分析的场景)

2.拉链表的形成过程

关键的过程

第四步:获取变化的数据(创建和修改的数据)

第五步:创建和修改的得到维护开始日期和结束日期,匹配到历史拉链表中更新的数据、将结束日期修改为同步时间 减1

 3.拉链表的创建实操

3.1三张表的建表语句

dim_consignor_belong 原始同步表、每天全量同步,

dim_consignor_belong_lz 拉链表,

dim_consignor_belong_lz_temp 拉链临时表。

CREATE TABLE IF NOT EXISTS dim_consignor_belong(
    company_id BIGINT COMMENT '企业货主id',
    consignor STRING COMMENT '企业货主',
    belong_manager STRING COMMENT '归属业务经理',
    is_count BIGINT COMMENT '0 代表不统计,1代表统计') 
partition by (dt string) 
STORED AS ALIORC ;

CREATE TABLE IF NOT EXISTS dim_consignor_belong_lz(
    company_id BIGINT COMMENT '企业货主id',
    consignor STRING COMMENT '企业货主',
    belong_manager STRING COMMENT '归属业务经理',
    is_count BIGINT COMMENT '0 代表不统计,1代表统计',
    start_time string comment '有效开始时间',
    end_time string comment '有效结束时间') 
STORED AS ALIORC ;

CREATE TABLE IF NOT EXISTS dim_consignor_belong_lz_temp(
    company_id BIGINT COMMENT '企业货主id',
    consignor STRING COMMENT '企业货主',
    belong_manager STRING COMMENT '归属业务经理',
    is_count BIGINT COMMENT '0 代表不统计,1代表统计',
    start_time string comment '有效开始时间',
    end_time string comment '有效结束时间') 
STORED AS ALIORC ;

3.2初始化拉链表

insert overwrite table muyuanwuliu.dim_consignor_belong_lz 
select
company_id,
consignor,
belong_manager,
is_count,
'19000101',
'99999999'
from muyuanwuliu.dim_consignor_belong
where dt = '20230426';

 3.3得到变化的数据

这里根据数据的值来判断、如果能够同步的时候有创建时间和更新时间那就最方便了

select dim.company_id,
dim.consignor,
dim.belong_manager,
dim.is_count,
dim.dt,
'99999999' from 
dim_consignor_belong dim 
join dim_consignor_belong_lz lz on dim.company_id = lz.company_id 
     and lz.end_time = '99999999' and dim.dt = '${bizdate}'
where dim.consignor != lz.consignor or dim.belong_manager != lz.belong_manager or dim.is_count != lz.is_count

3.4变化数据和原始拉链表合并

关键点: 拉链表数据和更新数据关联的时候记得增加lz.end_time='99999999'  字段

               关联到的数据end_time 需要取 date_add(分区时间,-1)

with dim_consignor_belong_di as (
select dim.company_id,
dim.consignor,
dim.belong_manager,
dim.is_count,
dim.dt,
'99999999' from 
dim_consignor_belong dim 
join dim_consignor_belong_lz lz on dim.company_id = lz.company_id 
     and lz.end_time = '99999999' and dim.dt = '${bizdate}'
where dim.consignor != lz.consignor or dim.belong_manager != lz.belong_manager or dim.is_count != lz.is_count
)


insert overwrite table dim_consignor_belong_lz_temp
SELECT 
*
from 
dim_consignor_belong_di
union ALL 
select 
	lz.company_id,
	lz.consignor,
	lz.belong_manager,
	lz.is_count,
    lz.start_time,
    replace(if(di.company_id is null, lz.end_time, date_add(concat(SUBSTR(di.dt,1,4),'-',SUBSTR(di.dt,5,2),'-',SUBSTR(di.dt,7,2)),-1)),'-','') end_time
from dim_consignor_belong_lz lz left join 
dim_consignor_belong_di di on lz.company_id=di.company_id and lz.end_time='99999999' 

4.拉链表的应用

取最新的数据:

select * from dim_consignor_belong_lz where end_time = '99999999';

取指定区间的数据:

select * from dim_consignor_belong_lz where start_time <= '20230331' and  end_time >=  '20230331';

看数据的变化:

select * from dim_consignor_belong_lz order by company_id,start_time;


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

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

相关文章

Flask连接MySQL

本文章涉及到Flask框架和HTML内容&#xff0c;相关知识可查看链接 HTML-form表单和提交_html form 提交_小梁今天敲代码了吗的博客-CSDN博客https://blog.csdn.net/weixin_43780415/article/details/130110722 前端引入和html标签_小梁今天敲代码了吗的博客-CSDN博客https://b…

vscode下drawio无法使用

问题描述&#xff1a; Vscode下&#xff0c; 刚下载drawio这个插件&#xff0c;在vscode左边EXPLORER下&#xff0c;没有Test这个页面,导致vscode无法使用drawio。 解决办法&#xff1a; 在自己需要的目录下&#xff0c;新建一个文件&#xff0c;例如test,并命名为test.drawi…

数据结构算法

直接插入排序 1.从第一个元素开始&#xff0c;该元素可以认为已经被排序 2.取下一个元素tem&#xff0c;从已排序的元素序列从后往前扫描 3.如果该元素大于tem&#xff0c;则将该元素移到下一位 4.重复步骤3&#xff0c;直到找到已排序元素中小于等于tem的元素 5.tem插入到该元…

5.1劳动节,致敬最可爱的人!Cocos社区杰出贡献者出炉

Cocos 引擎的生态建设与繁荣&#xff0c;离不开社区开发者的辛勤付出。 2022.5 ~ 2023.5 年度期间&#xff0c;有这样一批 Cocos 社区开发者&#xff0c;他们使用 Cocos Creaor 引擎创作内容与产品、分享技术和经验&#xff0c;为 Cocos 社区默默贡献自己的一份力量&#xff0c…

改进YOLOv8:替换轻量化骨干网络Efficient V1、Efficient V2《重新思考卷积神经网络的模型缩放》)

这里写目录标题 1 EfficientNetV1中存在的问题2.EfficientNetV2网络框架3.YOLOv8添加Efficient V1代码yaml文件Efficient V1代码运行4. 添加Efficient V2代码yaml文件Efficient V2运行Efficient V1论文地址:https://arxiv.org/pdf/1905.11946.pdf Efficient V1代码地址:

Golang每日一练(leetDay0049) 二叉树专题(9)

目录 144. 二叉树的前序遍历 Binary-tree Preorder Traversal &#x1f31f; 145. 二叉树的前序遍历 Binary-tree Postorder Traversal &#x1f31f; 对比&#xff1a; 94. 二叉树的中序遍历 Binary-tree Inorder Traversal &#x1f31f; 146. LRU缓存 LRU Cache &am…

调用移动云OCR识别身份证

一.开通移动云OCR服务 在下面这个网址开通免费服务&#xff0c;&#xff0c;每个账号可免费使用500次&#xff0c;先要实名认证。 通用文字识别 (10086.cn)https://ecloud.10086.cn/home/product-introduction/Generalverify 有两种方式&#xff1a; 这里选择第二种 。 二…

炸裂的 Auto-GPT,帮我自动生成小视频!

大家好&#xff0c;我是程序员贺同学。 继前段时间爆火的 ChatGPT 后&#xff0c;又一个炸裂的开源项目 Auto-GPT 出现了。 仿佛一夜之间&#xff0c;AI 圈又出现了一个新晋顶流。我们来看看它有多&#x1f525;。 在 GitHub 上&#xff0c;仅最近不到两个礼拜&#xff0c;这个…

TCP/IP基础知识

文章目录 互联网与TCP/IP的关系TCP/IP与OSI参考模型硬件&#xff08;物理层&#xff09;互联网层&#xff08;网络层&#xff09;IPICMPARP 传输层TCPUDP 应用层WWW电子邮件&#xff08;E-Mail)文件传输&#xff08;FTP&#xff09;远程登录&#xff08;TELNET与SSH&#xff09…

Redis Set 用了 2 种数据结构来存储,到现在才知道

Sets 无序集合&#xff0c;他的功能就好像你熟悉的 Java 中的 HashSet 一样。集合是通过散列表实现的&#xff0c;所以添加、删除、查找元素的时间复杂度是 O(1)。 1. 是什么 Sets 是 String 类型的无序集合&#xff0c;集合中的元素是唯一的&#xff0c;集合中不会出现重复的数…

【百问百答】可靠性基础知识第三期

1.电连接器的基本性能有哪些? 三个基本性能&#xff1a;机械性能、电气性能和耐环境性能。 电连接器机械性能测试包括&#xff1a;插拔力测试、端子保持力测试、端子正向力测试、耐久性测试。 电气特性测试包括&#xff1a;绝缘电阻测试、 耐电压测试、 低电平电阻测试(LLCR…

【YOLO v1】模型搭建 | model | 代码

YOLO V1 模型 import torch import torch.nn as nn from torchsummary import summarydef build_block(in_channel, out_channel, kernel_size, stride1, maxpoolFalse):padding kernel_size//2block nn.Sequential(nn.Conv2d(in_channel, out_channel, kernel_sizekernel_si…

数据包守恒 TCP 拥塞控制

数据包守恒是包括拥塞控制在内的合理利用带宽的方法之基石&#xff0c;它维持了有效网络传输的稳定&#xff0c;过去 40 年是&#xff0c;未来还是。数据包守恒可以描述为&#xff1a; 当带宽恰好满载时&#xff0c;receiver 收到 1 个数据包后 sender 才能发送 1 个数据包。当…

LeetCode链表OJ题目 代码+思路分享

目录 删除有序数组中的重复项合并两个有序数组移除链表元素 删除有序数组中的重复项 链接: link 题目描述&#xff1a; 题目思路&#xff1a; 本题使用两个指针dst和src一前一后 相同情况&#xff1a; 如果nums[dst]nums[src]&#xff0c;那么src 不相同情况&#xff1a; 此…

基于B/S架构SpringBoot+Bootstrap框架的中小医院信息系统

一、开源项目简介 基于B/S架构&#xff0c;SpringBootBootstrap框架的中小医院信息系统。简单实现了挂号收费&#xff0c;门诊管理&#xff0c;划价收费&#xff0c;药房取药&#xff0c;体检管理&#xff0c;药房管理&#xff0c;系统维护等基础功能。 二、功能概述 本系统是…

计算机网络学习04(应用层常见协议总结)

1、HTTP:超文本传输协议 超文本传输协议&#xff08;HTTP&#xff0c;HyperText Transfer Protocol) 是一种用于传输超文本和多媒体内容的协议&#xff0c;主要是为 Web 浏览器与 Web 服务器之间的通信而设计的。当我们使用浏览器浏览网页的时候&#xff0c;我们网页就是通过 …

电脑硬盘检测怎么操作?如何检查硬盘的健康情况?

案例&#xff1a;如何对电脑硬盘进行检测&#xff1f; 【我的电脑硬盘中有许多重要的数据&#xff0c;我想知道电脑硬盘的健康状况怎么样&#xff1f;有没有小伙伴知道电脑硬盘检测的方法&#xff1f;】 电脑硬盘是存储数据的关键组件&#xff0c;而随着时间的推移和使用频率…

JAVA IO 模型详解

什么是IO I/O&#xff08;Input/Outpu&#xff09; 即输入&#xff0f;输出 。 从计算机结构的视角来看的话&#xff0c; I/O 描述了计算机系统与外部设备之间通信的过程。 从应用程序的视角来看的话&#xff0c;我们的应用程序对操作系统的内核发起 IO 调用&#xff08;系统调…

RocketMq windows 安装

RocketMq安装步骤&#xff1a; 1、直接在官网下载。也可以从这里自取 https://rocketmq.apache.org/download/ 2、修改bin目录下的文件 runserver.cmd 和 runbroker.cmd文件。主要修改所占用内存的大小。 runserver.cmd 修改如下&#xff1a; runbroker.cmd 修改如下&#xff…

数据结构与算法(三):树论(树形结构、二叉树、二叉搜索树、红黑树、BtreeB+Tree、赫夫曼树、堆树)

树论&#xff08;树形结构、二叉树、二叉搜索树、红黑树、Btree、BTree、赫夫曼树、堆树&#xff09; 树形结构概念 在树形结构里面重要的术语&#xff1a; 结点&#xff1a;树里面的元素。 父子关系&#xff1a;结点之间相连的边 子树&#xff1a;当结点大于1时&#xff0…