ETL-拉链算法-1
参考链接:http://blog.csdn.net/nisjlvhudy/article/details/8559518
自己的理解:
主要针对数据的状态变化
表:原表:source
目标表:target
临时表:vt_new
临时表:vt_inc
vt_new将原表数据加工为容易处理的记录,增加起始时间与结束时间,即当日全量表
vt_inc保存target与vt_new表对比后的结果,即增量表
更新目标表
使用函数的参考链接:http://blog.csdn.net/rachel_luo/article/details/8073458
声明一个函数:
create or replace function data_common(P_ETLDATE date) return integer as
$body$
declare
skyid integer;
BEGIN
#将原表数据加工处理后插入vt_new
insert into vt_new select id,name,balance,data_date,'29991231' from source where data_date=P_ETLDATE;
#将目标表与当日全量表vt_new比较,将比较结果存入增量表vt_inc
insert into vt_inc
select id,name,balance,start_dt,'19900102' from vt_new VT where end_dt='29991231'
and(
not exists (select 1 from target T where VT.id=T.id)
or exists (select 1 from (select id, max(end_dt) end_dt from target group by id) TT where TT.id = VT.id and TT.end_dt > P_ETLDATE));
#将增量表中的目标表中已存在的某条记录更新,更新结束日期
update target t
set end_dt=P_ETLDATE
where end_dt='29991231'and exists
(select 1 from vt_inc c
where c.id=t.id and c.balance<>t.balance and c.start_dt=P_ETLDATE);
#将增量表中的目标表中不存在的某条记录添加到目标表中
insert into target
select id,name,balance,start_dt,'29991231' from vt_inc where start_dt=P_ETLDATE;
#删除两个临时表中的数据
truncate table vt_new;truncate table vt_inc;
skyid=1;
return skyid;
END;
$body$
ANGUAGE 'plpgsql' VOLATILE;
使用函数:
select data_common('20140101');
insert into vt_inc
select * from vt_new a left join target b on a.id=b.id and b.end_dt='29991231'
where b.id is null or (a.name<>b.name or a.bal<>b.bal);
进阶拉链算法:http://blog.csdn.net/nsj820/article/details/5876895
ETL-拉链算法-1的更多相关文章
- ETL拉链算法汇总大全
拉链算法总结大全: 一.0610算法(追加) 1.删除仓库表的载入日期是本次载入日期的数据,以支持重跑 delete from xxx where start_dt >=$tx_date; 2. ...
- ETL-拉链算法-带删除的拉链算法
truncate table CUST;truncate table TAG_CUST; truncate table vt_inc;truncate table vt_new; insert int ...
- Dictionary,hashtable, stl:map有什么异同?
相同点:字典和map都是泛型,而hashtable不是泛型. 不同点:三者算法都不相同 Hashtable,看名字能想到,它是采用传统的哈希算法:探测散列算法,而字典则采用的是散列拉链算法,效率较高, ...
- Mysql索引优化1
Btree索引和哈希索引(索引是一种数据结构,提高查询,排序,分组速度) Btree索引的数据结构是平衡二叉树,时间复杂度为lgN 哈希索引的数据结构是一个Hash函数,时间复杂度为O(1),数据输入 ...
- MySQL索引优化 笔记
少取字段,建立合理的索引 表优化: 1 定长与变长分离 如果都是定长 查询比较快 因为每一行的字节都是固定的 fixed 2 常用字段和不常用字段要分离 用户表 常用 放主表 个人介绍不常用 还比较长 ...
- 基于情感词典的python情感分析
近期老师给我们安排了一个大作业,要求根据情感词典对微博语料进行情感分析.于是在网上狂找资料,看相关书籍,终于搞出了这个任务.现在做做笔记,总结一下本次的任务,同时也给遇到有同样需求的人,提供一点帮助. ...
- hash算法与拉链法解决冲突
<?php class HashNode { public $key; public $value; public $nextNode; public function __construct( ...
- 技术分享丨数据仓库的建模与ETL实践技巧
摘要:如何搭建数据仓库,在这个过程中都应该遵循哪些方法和原则,项目实践中有哪些技巧. 一.数据仓库的“心脏” 首先来谈谈数据模型.模型是现实世界特征的模拟和抽象,比如地图.建筑设计沙盘,飞机模型等等. ...
- [Data Structure & Algorithm] 七大查找算法
查找是在大量的信息中寻找一个特定的信息元素,在计算机应用中,查找是常用的基本运算,例如编译程序中符号表的查找.本文简单概括性的介绍了常见的七种查找算法,说是七种,其实二分查找.插值查找以及斐波那契查找 ...
随机推荐
- SQLite数据库_c/s架构的心得
1.使用是Navicat Premium软件, Microsoft Windows版本. 2.选择SQLite并新建数据库: 3.将建好的SQLite数据库,放到新建的项目的debug文件下中, 并在 ...
- Navicat 12的安装与使用(附加破解)
地址https://blog.csdn.net/tomos428/article/details/80483450?tdsourcetag=s_pctim_aiomsg
- JavaSE基础知识之多态
一. 概述 多态是继封装.继承之后,面向对象的第三大特性,指同一行为,具有多个不同表现形式.生活中,比如跑的动作,小猫.小狗和大象,跑起来是不一样的.再比如飞的动作,昆虫.鸟类和飞机,飞起来也是不一样 ...
- RAII惯用法:C++资源管理的利器(转)
RAII惯用法:C++资源管理的利器 RAII是指C++语言中的一个惯用法(idiom),它是“Resource Acquisition Is Initialization”的首字母缩写.中文可将其翻 ...
- luogu P4688 [Ynoi2016]掉进兔子洞
luogu 我们要求的答案应该是三个区间长度\(-3*\)在三个区间中都出现过的数个数 先考虑数列中没有相同的数怎么做,那就是对三个区间求交,然后交集大小就是要求的那个个数.现在有相同的数,考虑给区间 ...
- LeetCode 腾讯精选50题--最小栈
题目很简单,实现一个最小栈,能够以线形的时间获取栈中元素的最小值 自己的思路如下: 利用数组,以及两个变量, last用于记录栈顶元素的位置,min用于记录栈中元素的最小值: 每一次push,都比较m ...
- Dockerfile初体验
Dockerfile构建nginx 创建一个文件夹 mkdir -p /nginx 进入创建的目录 cd /nginx 创建并编辑 添加下面两行 vim Dockerfile 行1,去本地找基础的镜像 ...
- Shell脚本grep命令
三剑客:grep sed awk grep:文本行过滤工具 sed: 文本行编辑器(流编辑器) awk: 报告生成器,输出格式化 grep包含三个命令: grep egrep fgrep .他们 ...
- collections:内建模块,提供额外的集合类
介绍 collections里面包含了很多除了内置类型之外的数据类型,我们使用它们有时可以很方便的完成一系列操作 ChainMap:搜索多个字典 from collections import Cha ...
- C# .NET 微信开发-------当微信服务器推送消息时如何接收处理
最近一直在看微信,整整一个月了,看到现在说实话还有很多没看的,从前两周一点看不懂到现在单个功能的一步步实现,不知道这样的速度是否太慢了. 不过现在往下看还是有思路了,目前整个文档完成学习只有1/3左右 ...