参考链接: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的更多相关文章

  1. ETL拉链算法汇总大全

    拉链算法总结大全: 一.0610算法(追加) 1.删除仓库表的载入日期是本次载入日期的数据,以支持重跑 delete from xxx where start_dt >=$tx_date; 2. ...

  2. ETL-拉链算法-带删除的拉链算法

    truncate table CUST;truncate table TAG_CUST; truncate table vt_inc;truncate table vt_new; insert int ...

  3. Dictionary,hashtable, stl:map有什么异同?

    相同点:字典和map都是泛型,而hashtable不是泛型. 不同点:三者算法都不相同 Hashtable,看名字能想到,它是采用传统的哈希算法:探测散列算法,而字典则采用的是散列拉链算法,效率较高, ...

  4. Mysql索引优化1

    Btree索引和哈希索引(索引是一种数据结构,提高查询,排序,分组速度) Btree索引的数据结构是平衡二叉树,时间复杂度为lgN 哈希索引的数据结构是一个Hash函数,时间复杂度为O(1),数据输入 ...

  5. MySQL索引优化 笔记

    少取字段,建立合理的索引 表优化: 1 定长与变长分离 如果都是定长 查询比较快 因为每一行的字节都是固定的 fixed 2 常用字段和不常用字段要分离 用户表 常用 放主表 个人介绍不常用 还比较长 ...

  6. 基于情感词典的python情感分析

    近期老师给我们安排了一个大作业,要求根据情感词典对微博语料进行情感分析.于是在网上狂找资料,看相关书籍,终于搞出了这个任务.现在做做笔记,总结一下本次的任务,同时也给遇到有同样需求的人,提供一点帮助. ...

  7. hash算法与拉链法解决冲突

    <?php class HashNode { public $key; public $value; public $nextNode; public function __construct( ...

  8. 技术分享丨数据仓库的建模与ETL实践技巧

    摘要:如何搭建数据仓库,在这个过程中都应该遵循哪些方法和原则,项目实践中有哪些技巧. 一.数据仓库的“心脏” 首先来谈谈数据模型.模型是现实世界特征的模拟和抽象,比如地图.建筑设计沙盘,飞机模型等等. ...

  9. [Data Structure & Algorithm] 七大查找算法

    查找是在大量的信息中寻找一个特定的信息元素,在计算机应用中,查找是常用的基本运算,例如编译程序中符号表的查找.本文简单概括性的介绍了常见的七种查找算法,说是七种,其实二分查找.插值查找以及斐波那契查找 ...

随机推荐

  1. EF 查询扩展

    using Microsoft.EntityFrameworkCore; using System; using System.Collections.Generic; using System.Da ...

  2. 题解 POJ1964/UVA1330/SP277 【City Game】

    题目链接: https://www.luogu.org/problemnew/show/UVA1330 http://poj.org/problem?id=1964 https://www.luogu ...

  3. [转载]java的传值和传引用

    本文转载自:https://blog.csdn.net/weixin_36759405/article/details/82764339 基本类型(byte,short,int,long,double ...

  4. 将java文件编译成class文件

    一般情况下,在myeclipse中保存java文件后会自动编译成class文件,但是这种情况只能编译当前工程的java文件,但是如果需要编译不是一个工程的java文件,比如在网上拷贝的java文件改如 ...

  5. webpack配置不同打包配置

    生成环境与开发环境打包配置 使用package.json配置npm run开启不同的打包配置 ...webpack基本使用最后一篇博客 在上一篇博客中详细的演示了webpack开启本地服务和热更新,这 ...

  6. elementui按需加载

    定义一个ele.js文件 官网:https://element.eleme.io/#/zh-CN/component/quickstart // 方法1 import 'element-ui/lib/ ...

  7. google 高清卫星照片

    rel: 如何下载 50 年前自己家乡的高清卫星照片 link: https://zhuanlan.zhihu.com/p/30953275

  8. TVM调试指南

    1. TVM安装 这部分之前就写过,为了方便,这里再复制一遍. 首先下载代码 git clone --recursive https://github.com/dmlc/tvm 这个地方最好使用--r ...

  9. 浅谈RPC框架

    RPC(Remote Promote Call) RPC(Remote Promote Call):一种进程间通信方式.允许像调用本地服务一样调用远程服务. RPC框架的主要目标就是让远程服务调用更简 ...

  10. redis-cluster集群总结

    Redis集群搭建 要想搭建一个最简单的Redis集群,那么至少需要6个节点:3个Master和3个Slave.为什么需要3个Master呢?如果你了解过Hadoop/Storm/Zookeeper这 ...