首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > 数据库开发 >

基于“全表对照方式”的增量数据抽取

2012-12-31 
基于“全表对比方式”的增量数据抽取本帖最后由 commonnx 于 2010-11-08 23:43:15 编辑典型的全表比对的方式

基于“全表对比方式”的增量数据抽取
本帖最后由 commonnx 于 2010-11-08 23:43:15 编辑 典型的全表比对的方式是采用MD5校验码。ETL工具事先为要抽取的表建立一个结构类似的MD5临时表,该临时表记录源表主键以及根据所有字段的数据计算出来的MD5校验码。每次进行数据抽取时,对源表和MD5临时表进行MD5校验码的比对,从而决定源表中的数据是新增、修改还是删除,同时更新MD5校验码。
这是全表对比方式的原理。
现在遇到问题如下
//获得源表主键字符串(每个主键之间加字符‘&’),getKeystr是自己定义的方法
String tableid = getKeystr(orgtable);
//这是从源表中选出新增数据,orgtable是源表,tempid是临时表主键(即源表主键字符串),temptable是临时表(包含tempid和MD5校验码)
String sqlstr = "select * from "+orgtable+" where "+tableid+" not in(select tempid from "+temptable+")";
现在遇到的问题是,tableid是主键字符串,而源表orgtable中并不存在这个字段,该如何做才能 选出 在源表而不在临时表的记录?
[解决办法]
这么做效率也未免太低了吧

oracle的话,可以用物化视图的方式解决,SQL server不太清楚

热点排行