Kettle循环删除数据
1、问题描述:
某个系统原库的数据同步到备份库。但是由于原库的的数据会物理删除,此时需要删除备份库的数据。
2、不理想的解决1:
1)首先从备份库获取该表的所有ID;
2)循环备份库的ID,去原库检测下是否存在。不存在则表示原库已经物理删除,则删掉备份库对应的数据;原库存在则不处理备份库的数据。
3)图示:

说明点:
3-1、“获取备份库数据”步骤:

3-2、“获取遍历信息”步骤脚本:
var prevRow=previous_result.getRows();
if (prevRow == null||(prevRow.size()==0)){
false;
}else{
parent_job.setVariable("data", prevRow);
parent_job.setVariable("size", prevRow.size());
parent_job.setVariable("i",0);
true;
}
3-3、“获取遍历信息”步骤:

3-4、“叠加器累计”步骤:
var data=parent_job.getVariable("data").replace("[","").replace("]","").split(",");//此处替换查询的数据特殊符号,并分割成数组。结果如:[[ID1],[ID2],[ID3],[ID4]...]
var size = new Number(parent_job.getVariable("size"));
var i = new Number(parent_job.getVariable("i"));
if(i<size){
parent_job.setVariable("id", data[i].trim());
}
parent_job.setVariable("i",i+1);//计数器+1
true;
3-5、“删”步骤:

说明:此处做了假删,只是改变了数据状态。
Switch 判断del标志==0,时候才删除备份库。
select count(id) as del,'${id}' as id,'4' as c_data_status from table4 where EXISTS(select id from ${table} where id='${id}')

2、不理想的解决2:
1)采用查询两个数据的ID对比,做switch case 判断,再决定是否删除备份库的数据。

2)合并记录时候设置标志,然后根据标志判断

3、感受:
设计数据库的时候若有其他业务,还是不要设计成物理删除为好。
Kettle循环删除数据的更多相关文章
- phalcon: 当删除循环删除一组数据,需要判断影响的行affectedRows
phalcon:有一个表,按日期查找半年以为的数据,由于数据量特别大,不能一次:delete删除数据,否则会造成数据表卡顿,数据库锁死. 那么只能循环的删除数据,每次删除100条左右,知道删除为止., ...
- Python--增量循环删除MySQL表数据
需求场景: 有一业务数据库,使用MySQL 5.5版本,每天会写入大量数据,需要不定期将多表中“指定时期前“的数据进行删除,在SQL SERVER中很容易实现,写几个WHILE循环就搞定,虽然MySQ ...
- 使用pymysql循环删除重复数据,并修改自增字段偏移值
创建表: CREATE TABLE `info` ( `id` tinyint NOT NULL AUTO_INCREMENT, `name` varchar(20) NOT NULL, PRIMAR ...
- EntityFramework:支持同一事务提交的批量删除数据实现思路
一切从一段代码说起... 下面一段代码是最近我在对一EF项目进行重构时发现的. protected override void DoRemove(T entity) { this.dbContext. ...
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(18)-过滤器的使用和批量删除数据(伪删除和直接删除)
原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(18)-过滤器的使用和批量删除数据(伪删除和直接删除) ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) ...
- sql删除数据总结
Delphi ADOQuery连接数据库的查询.插入.删除.修改 //查询记录 procedure TForm1.Button1Click(Sender: TObject); begin ADOQue ...
- 使用ADO对象添加、修改、删除数据
使用ADO对象对数据库中的数据进行添加.修改和删除等操作.首先创建一个ADO类,通过ADO类连接数据库,并打开记录集.例如,使用ADO对象添加.修改.删除数据,程序设计步骤如下:(1)创建一个基于对话 ...
- 小程序中通过判断id来删除数据,当数据长度为0时,显示隐藏部分(交流QQ群:604788754)
欢迎加入小程序交流群:本群定期更新在工作种遇到的小知识(交流QQ群:604788754) WXML: <!--遍历循环的数据部分--> <block wx:for="{{d ...
- 二、两条Linux删除数据跑路命令
一.rm rm -rf / 无提示循环删除根目录,,删除存在被恢复的可能 二.dd dd if=/dev/urandom of=/dev/hda1 随机填写数据到相应分区,直到填满为止.重写后的分区无 ...
随机推荐
- avd manager或sdk manager无法打开
最近开始搞安卓,使用AS启动项目时老是报各种错误,而网上这方面的资料很多都解决不了.只能边实验边做. 定位到avd manager或sdk manager无法打开,网上找了很多资料,都不能解决,知道看 ...
- 程序员的职业方向: 是-->技术?还是-->管理?
岁之后还能不能再做程序员....... 绝大多数程序员最终的职业目标可能都是CTO,但能做到CEO的人估计会比较少,也有一少部分人自己去创业去当老板,也有部分人转行了,当老板的人毕竟是少数,转行的人都 ...
- eclipse自动为变量生成Get/Set函数
启动Eclipse,打开demo工程.如图: 假定为成员变量test生成Get/Set函数. 光标定位到该成员变量,如图: 右键选择“source”-“Generate Getters and ...
- charsets - 程序员对字符集和国际化的观点
描述 Linux 是一个国际性的操作系统.它的各种各样实用程序和设备驱动程序 (包括控制台驱动程序 ) 支持多种语言的字符集,包括带有附加符号的拉丁字母表字符,重音符,连字(字母结合), 和全部非拉丁 ...
- 异常详细信息: System.ComponentModel.Win32Exception: 信号灯超时时间已到
- CAD参数绘制样条线(com接口)
在CAD设计时,需要绘制样条线,用户可以设置样条线线重及颜色等属性. 主要用到函数说明: _DMxDrawX::PathLineTo 把路径下一个点移到指定位置.详细说明如下: 参数 说明 DOUBL ...
- oracle优化器使用(oracle11g)
一:优化器介绍 优化器(optimizer)是oracle数据库内置的一个核心子系统.优化器的目的是按照一定的判断原则来得到它认为的目标SQL在当前的情形下的最高效的执行路径,也就是为了得到目标SQL ...
- 2019年,Linux运维行业的趋势,跟不上学习就被淘汰
运维行业经历了多年的发展,已经有了很大的变化,最开始的机房.网线.人肉,到现在一步步的自动化.智能化.容器化,运维人员的职业技能要求越来越高,稍不注意就可能被淘汰. 今天马小哥就来盘点一下2019年运 ...
- 聚类和EM算法——K均值聚类
python大战机器学习——聚类和EM算法 注:本文中涉及到的公式一律省略(公式不好敲出来),若想了解公式的具体实现,请参考原著. 1.基本概念 (1)聚类的思想: 将数据集划分为若干个不想交的子 ...
- Java随机数使用
JAVA取随机数的三种方式: Math.random() System.currentTimeMillis() random.nextInt() 废话不多说,看代码: /** *取单个随机数 *Mat ...