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] 七大查找算法
查找是在大量的信息中寻找一个特定的信息元素,在计算机应用中,查找是常用的基本运算,例如编译程序中符号表的查找.本文简单概括性的介绍了常见的七种查找算法,说是七种,其实二分查找.插值查找以及斐波那契查找 ...
随机推荐
- Python 风格指南
https://zh-google-styleguide.readthedocs.io/en/latest/google-python-styleguide/contents/ 目前个人遵循的基本规范 ...
- Resource Model
API不应该直接返回Entity,应该是返回一个Resource,不想把entity内部的细节暴漏给外部 viewModel是在MVC中的叫法 使用AutoMapper来对Entity和Resourc ...
- 【原创】数据库基础之Sqlite
官方:https://www.sqlite.org/index.html 简介 SQLite is a C-language library that implements a small, fast ...
- 异常-throws的方式处理异常
定义功能方法时,需要把出现的问题暴露出来让调用者去处理.那么就通过throws在方法上标识. package cn.itcast_05; import java.text.ParseException ...
- 深入理解hadoop之HDFS
深入理解hadoop之HDFS 刚刚才写完关于mapreduce的一篇博文,趁热打铁接下来聊聊HDFS.本博文参考资料为HADOOP权威指南第3版完版,博文如有错漏之处,敬请指正. HDFS即Hado ...
- js下载blob的形式
前端构建blob的方式就是通过服务器返回的文件来创建blob,需要知道文件在服务器的具体路径,用bob创建object url对象,添加到a标签上,然后触发,blob有两个问题,1.对浏览器有兼容性限 ...
- js之数据类型(对象类型——构造器对象——数组2)
一.数组空位与undefined 数组空位:数组的某一个位置没有任何值 产生空位的原因:数组中两个逗号之间不放任何值:用new Array()的方法,参数里是个数字:通过一个不存在的下标去增加数组:增 ...
- React中使用遍历
1.使用for(let item of items){} render(){ var itemList = [] for(let item of items){ itemList.push(<I ...
- fastadmin 随笔 刷新表格数据 获取当前登录人信息 服务端导出Excel
table.bootstrapTable('refresh',{url:'你的url'}); 获取当前登录人信息 $this->auth就能获取当前用户信息,比如$this->auth-& ...
- [ZOJ 3610] Yet Another Story of Rock-paper-scissors
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=4713 题目很水,但是注意,越是简单的题目越应该关注细节,比如说输出上 ...