网站如何自己做seo,网站网址怎么找,中国核工业二三建设有限公司招聘信息,求网站建设和网页设计的电子书背景
kettle抽取数据大家还是比较熟悉的#xff0c;kettle在抽取数据的时候会开启很多通道#xff0c;同时抽取#xff0c;但是我现在遇到一个场景#xff1a;
从一个mysql数据库里获取“已办”状态的数据id#xff0c;然后拿这些id去一个oracle数据库里查询#xff0c…背景
kettle抽取数据大家还是比较熟悉的kettle在抽取数据的时候会开启很多通道同时抽取但是我现在遇到一个场景
从一个mysql数据库里获取“已办”状态的数据id然后拿这些id去一个oracle数据库里查询这些id在oracle数据中的状态是不是正确的oracle数据库设置了in条件最多能in1000个值并且oracle数据库是和核心生产库我不能去创建表之类的进行关联只有查询权限。
基于以上场景通过java代码实现其实相当简单做一个mysql分页1000条匹配一次但是用kettle还从来没做过分页于是乎开始百度但是大部分博主给的是错的主要在变量部分同一个转换中“设置变量”后再通过${xx}获取变量值是获取不到的必须跨转换才行真的是比较奇怪。
下面就把完整的kettle过程贴出来
总作业(workflow_oa_check.kjb) 给mysql数据库创建一个可以保存结果数据的表 获取分页页数为了方便其实输出的是页数*1000循环页数匹配逻辑作业注意必须勾选“执行每一个输入行”这样就会有循环的效果 获取页数(workflow_oa_done_num.ktr) 已办总数表输入 SELECT count(0) total from ( ${sql} ) temp ,其中具体sql是个变量可以在job执行的时候自行复制例如可以是select * from act_hi_taskins 字段选择,将上一步的表输入字段选择java代码根据总页数/每页的数量循环 public boolean processRow(StepMetaInterface smi, StepDataInterface sdi) throws KettleException {if (first) {first false;}Object[] r getRow();if (r null) {setOutputDone();return false;}//此处创建 r是为了获取输入参数TOTAL_SRC的值
r createOutputRow(r, data.outputRowMeta.size());double num get(Fields.In, total).getNumber(r);
int pageNum 1000;
int pages (int)num/pageNum 1; //计算总页数
System.out.println(总页数pages);
//生成页码并输出
for(int i0;ipages;i){r createOutputRow(r, data.outputRowMeta.size());get(Fields.Out, PAGE).setValue(r, (i)*pageNum); //将页码*pageNum 赋值给PAGE;putRow(data.outputRowMeta, r);
} return true;
} 复制记录到结果
循环获取异常已办(workflow_oa_check_loop.kjb) 设置page目的是从上一步的结果中获取页数*1000这个值然后把这个值放到当前变量中 2. 获取已办ids通过获取变量EPAGE进行mysql库的分页操作把获取的id集合放入变量中select GROUP_CONCAT(,ID_,) ids from ( ${sql} LIMIT ${EPAGE},1000) temp 3.输出oaids根据上一步的ids查询oracle库的异常数据并将异常数据输出到最开始建的表中