数据仓库-拉链算法

这篇具有很好参考价值的文章主要介绍了数据仓库-拉链算法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

数据仓库-拉链算法,如何处理开链、闭链数据文章来源地址https://www.toymoban.com/news/detail-572372.html

\timing on
set client_encoding='GBK';
/******程序功能说明*********************************/


/*****以下根据任务不同进行变量设置*****************/

SELECT
	:'AUTO_PDMVIEW' 	AS "PDM_VIEW"
	,:'20230710' 		AS "20230710"
	 ,:'AUTO_exampleDB' 		AS "example_DATA"
	,:'AUTO_SDATADB' 	AS "SDATA"
	,:'AUTO_exampleVIEW' 	AS "example_VIEW"
	,:'AUTO_ODSVIEW' 	AS "ODS_VIEW"
	,:'AUTOVIEW' 	AS "SUM_VIEW"
	,:'AUTOEVIEW' 	AS "CDE_VIEW"
	--,'examplesc_read'      AS    "example_DATA"	
	,:'MAX_DT' 			AS "MAX_DT"
	,:'NULL_DT' 		AS "NULL_DT"
; 
\gset

/******以下为程序主体******************************/

数据示例:
Start_Dt   End_Dt
20230601  30001231
20230710  30001231 (正常无数据)
20230501  20230710 (正常无数据)

DELETE FROM :example_DATA.INT_D_example_ACCT_CAP_CHANGE
WHERE Start_Dt = TO_DATE(:'20230710','YYYYMMDD')
and sys_src='exam';


Start_Dt   End_Dt
20230601  30001231
20230501  20230710

UPDATE :example_DATA.int_d_example_acct_cap_change
SET End_Dt = TO_DATE('30001231','YYYYMMDD')
WHERE End_Dt = TO_DATE(:'20230710','YYYYMMDD')
and sys_src='exam';


Start_Dt   End_Dt
20230601  30001231
20230501  30001231

CREATE TEMPORARY TABLE int_d_example_acct_cap_change_ND(LIKE :example_DATA.int_d_example_acct_cap_change INCLUDING DEFAULTS INCLUDING CONSTRAINTS)
ON COMMIT PRESERVE ROWS;



INSERT INTO int_d_example_acct_cap_change_ND
(asset_acct
,securities_code
 ,TO_DATE(:'TX_DATE','YYYYMMDD')AS  update_dt
 ,TO_DATE(:'TX_DATE','YYYYMMDD') AS Start_Dt     
 ,TO_DATE('30001231','YYYYMMDD') AS End_Dt 
)
select 
  COALESCE(TRIM(CAST(A.fundid AS bigint)), '')  asset_acct  ---资金账户
, case when trim(b.belong_exampleflag)='0' then 'E1005731000018' else 'E1013565000016' end as securities_code   ---金融机构编码
from  :ODS_VIEW.ODS_exam_FUNDINFO   A 
left join :CDE_VIEW.examplebroke_branch  B 
on (case  when  TRIM(A.orgid) = '0000' then  'ORG-999'
          else  COALESCE('ORG-' || TRIM(A.orgid), '')
    END)=trim(B.branch)
   WHERE A.Ods_Start_Dt <=:'20230710'
  AND A.Ods_End_Dt >:'20230710' 
;
-----插入原数据
CREATE TEMPORARY TABLE int_d_example_acct_cap_change_OD(LIKE :example_DATA.int_d_example_acct_cap_change INCLUDING DEFAULTS INCLUDING CONSTRAINTS)
ON COMMIT PRESERVE ROWS;
--插入新数据
CREATE TEMPORARY TABLE int_d_example_acct_cap_change_W_I(LIKE :example_DATA.int_d_example_acct_cap_change INCLUDING DEFAULTS INCLUDING CONSTRAINTS)
ON COMMIT PRESERVE ROWS;

----插入更新的数据
CREATE TEMPORARY TABLE int_d_example_acct_cap_change_W_U(LIKE :example_DATA.int_d_example_acct_cap_change INCLUDING DEFAULTS INCLUDING CONSTRAINTS)
ON COMMIT PRESERVE ROWS;9号全部开链的切片数据插入

数据错乱情况:
1、该闭链的开链了,这样的话该条数据取到,但是在处理的时候会被闭链,10号数据里会新增一条,开链
2、该开链的闭链了,这样的话该条数据取不到,10号数据里会新增一条,并且开链
INSERT INTO int_d_example_acct_cap_change_OD
SELECT * FROM :example_DATA.int_d_example_acct_cap_change
WHERE Start_Dt <= TO_DATE(:'20230710','YYYYMMDD')
AND   End_Dt   > TO_DATE(:'20230710','YYYYMMDD')
AND   sys_src='exam'
;


全字段找出有变动、或者新增的数据,插入W_I表(比如10号的数据,不在9号的里面),如果数据有减少,则找不出来
INSERT INTO int_d_example_acct_cap_change_W_I
(
asset_acct
,securities_code
     
)
SELECT 
asset_acct
,securities_code   
FROM int_d_example_acct_cap_change_ND
WHERE    sys_src='exam' AND (
COALESCE(asset_acct,'')
,COALESCE( securities_code,'')
 )  NOT IN (
   SELECT 
COALESCE(asset_acct,'')
,COALESCE( securities_code,'')
FROM int_d_example_acct_cap_change_OD
  WHERE   sys_src='exam'  )
;


  
找出在9号切片,OD(old)里,但是不在10号ods表中,ND(new)里的数据,找出有变动或者减少的数据
INSERT INTO int_d_example_acct_cap_change_W_U
(
asset_acct
,securities_code 
)
SELECT 
asset_acct
,securities_code
FROM int_d_example_acct_cap_change_OD
WHERE  sys_src='exam' AND (
COALESCE(asset_acct,'')
,COALESCE( securities_code,'')
 )  NOT IN (
   SELECT 
COALESCE(asset_acct,'')
,COALESCE( securities_code,'')
FROM int_d_example_acct_cap_change_ND
WHERE   sys_src='exam'
    )
;

把变动的数据闭链,减少的数据也闭链
UPDATE :example_DATA.int_d_example_acct_cap_change
SET End_Dt = TO_DATE(:'20230710','YYYYMMDD')
WHERE (
COALESCE(asset_acct,'')
,COALESCE( securities_code,'')
) IN (
SELECT 
COALESCE(asset_acct,'')
,COALESCE( securities_code,'')
FROM int_d_example_acct_cap_change_W_U
WHERE  sys_src='exam')
AND Start_Dt <= TO_DATE(:'20230710','YYYYMMDD')
AND End_Dt > TO_DATE(:'20230710','YYYYMMDD')
AND  sys_src='exam'
;


插入新增的数据或者有变动的数据(闭链日期已提前置为30001231)

INSERT INTO :example_DATA.int_d_example_acct_cap_change
(asset_acct
,securities_code
)
SELECT 
asset_acct
,securities_code
    FROM int_d_example_acct_cap_change_W_I
	WHERE  sys_src='exam'
;

/**************************退出主程序****************************/




到了这里,关于数据仓库-拉链算法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 详解数据仓库之拉链表(原理、设计以及在Hive中的实现)

    最近发现一本好书,读完感觉讲的非常好,首先安利给大家,国内第一本系统讲解数据血缘的书!点赞!近几天也会安排朋友圈点赞赠书活动(ง•̀_•́)ง 0x00 前言 本文将会谈一谈在数据仓库中拉链表相关的内容,包括它的原理、设计、以及在我们大数据场景下的实现方式

    2024年02月05日
    浏览(44)
  • 漫谈数据仓库之拉链表(原理、设计以及在Hive中的实现

    本文将会谈一谈在数据仓库中拉链表相关的内容,包括它的原理、设计、以及在我们大数据场景下的实现方式。 全文由下面几个部分组成: 先分享一下拉链表的用途、什么是拉链表。 通过一些小的使用场景来对拉链表做近一步的阐释,以及拉链表和常用的切片表的区别。

    2024年04月12日
    浏览(27)
  • 【大数据hive】hive 拉链表设计与实现

    目录 一、前言 二、拉链表业务背景 2.1 数据同步引发的问题 2.1.1 解决方案1

    2024年02月09日
    浏览(28)
  • MD-MTSP:光谱优化算法LSO求解多仓库多旅行商问题MATLAB(可更改数据集,旅行商的数量和起点)

    光谱优化算法(Light Spectrum Optimizer,LSO)由Mohamed Abdel-Basset等人于2022年提出。 参考文献: [1]Abdel-Basset M, Mohamed R, Sallam KM, Chakrabortty RK. Light Spectrum Optimizer: A Novel Physics-Inspired Metaheuristic Optimization Algorithm .  Mathematics . 2022; 10(19):3466. Mathematics | Free Full-Text | Light Spectrum Optimizer: A

    2024年02月13日
    浏览(21)
  • MD-MTSP:成长优化算法GO求解多仓库多旅行商问题MATLAB(可更改数据集,旅行商的数量和起点)

    成长优化算法(Growth Optimizer,GO)由Qingke Zhang等人于2023年提出,该算法的设计灵感来源于个人在成长过程中的学习和反思机制。学习是个人通过从外部世界获取知识而成长的过程,反思是检查个体自身不足,调整个体学习策略,帮助个体成长的过程。 参考文献: Qingke Zhang

    2024年02月14日
    浏览(30)
  • MD-MTSP:星雀优化算法NOA求解多仓库多旅行商问题MATLAB(可更改数据集,旅行商的数量和起点)

    星雀优化算法(Nutcracker optimizer algorithm,NOA)由Mohamed Abdel-Basset等人于2023年提出,该算法模拟星雀的两种行为,即:在夏秋季节收集并储存食物,在春冬季节搜索食物的存储位置。星雀优化算法(Nutcracker optimizer algorithm,NOA)_IT猿手的博客-CSDN博客 参考文献: [1]Mohamed Abdel-Basset, Reda

    2024年02月13日
    浏览(33)
  • 拉链表详解

    目录 一、拉链表概念 二、拉链表对应的业务需求 三、代码实现 3.1 数据初始化:  3.2 创建ods层增量表:  3.3 创建dwd层拉链表  3.4 数据更新 ,将数据日期为2023-3-4的日期添加到拉链表中  3.4.1 先追加数据到ods层表 3.4.2 更新dwd层表数据         拉链表是一种数据模型,主要

    2024年01月17日
    浏览(23)
  • 拉链表概述

    数据仓库中有一种数据存储模型,用于维护历史状态以及最新状态,反映某一Key的历史变化演进过程,该种模型叫做缓慢变化维,简称SCD(Slowly Changing Dimensions),通常所说的拉链表其实属于缓慢变化维的一种实现方式,拉链表通过增加一列维度信息维护拉链状态,他们之间

    2024年02月12日
    浏览(22)
  • Hive---拉链表

    拉链表是一种数据模型,主要是针对数据仓库设计中表存储数据的方式而定义的,顾名思义,所谓拉链,就是记录历史。记录一个事物从开始,一直到当前状态的所有变化的信息。拉链表可以避免按每一天存储所有记录造成的海量存储问题,同时也是处理缓慢变化数据(SCD

    2024年02月10日
    浏览(61)
  • 通俗易懂:什么是拉链表

    拉链表是数据仓库中一种重要的模型,相信很多数据工作者都接触过,面试也是经常考察的点。 但是很多人第一次接触“拉链表”这个词,难免会产生疑惑:拉链表是什么? 按照度娘的解释:“拉链表是一种针对数据仓库设计中表存储数据的方式而定义的数据模型,它有点

    2024年02月08日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包