kettle怎么实现重复抽取更新数据

kettle怎么实现重复抽取更新数据,第1张

插入/更新

1你是否遇到了需要将mysql数据库中的所有表与数据迁移到Oracle。

2你是否还在使用kettle重复的画着:表输入-表输出、创建表,而烦恼。下面为你实现了一套通用的数据库迁移流程。技术引导:实现之初,在kettle提供的例子中找到了一个类似的(samples\jobs\processalltables)。通过相关改造,终于达到目标。实现过程解剖:整套流程分为:2个job,4个trans。使用到的Trans插件:表输入、字段选择、复制记录到结果、从结果获取记录、设置变量、自定义java脚本、表输出。1大job。2要迁移的源库表名称获取,并设置到结果集,为下面的job使用。

3配置子job为前面的每一条记录(即每个表)执行一次该子job4下面是子job。5获取记录中的表名称,并设置为到变量。6读取当前表的结果信息,并在目标库中创建表(这个是难点)。因为只需要获取抓取要抽取表的结构信息,故在sql后面加上where1=2。下面代码是创建目标库表。Java代码publicbooleanprocessRow(StepMetaInterfacesmi,StepDataInterfacesdi)throwsKettleException{//First,getarowfromthedefaultinputhop//Object[]r=getRow();orgpentahodicoredatabaseDatabaseMetadbmeta=null;javautilListlist=getTrans()getRepository()readDatabases();//3x中获取资源库的所有数据库连接信息用getDatabases();if(list!=null&&!listisEmpty()){for(inti=0;i

大致流程

如果是纯JSP技术的话:

1、创建model类,对应表a的表元(每个model类的对象对应表a的一行,model类的属性对应表a的字段)

2、创建取表a数据的类( *** 作A表的类):类中有取表A所有数据的方法如:publicList();//实现取数据即将a表的每行包装成一个model类对象,然后添加到一个List中,返回该List

3、JSP页面中引入 *** 作a表的类;然后创建其一个 *** 作对象;调用方法得到包含所有数据的List。

4、JSP中用for循环输出List中的内容结合HTML实现显示。

后台:

List

dataList

=

new

ArrayList();

dataList

=

DaoqueryForList(XXX,XXX);

getRequest()setAttribute("records",

dataList);

JSP页面:

requestgetAttribute获取数据集,再用for循环取出处理即可,至于这个代码,使用不一,就不贴了,现在界面上基本都是专门的客户端处理数据集,只需后台抛出即可。

分析你的逻辑应该如下:

1、查询表1中符合条件的信息,获取一个结果集合1;

2、基于结果集合1循环,检索表2,获取结果集合2。

如此,如果表1、表2间存在直接关联关系(即直接使用结果集合1中的部分信息作为表2查询的条件),那么完全可以在后台将两张表关联查询,这样避免了通过java进行循环,在大数量级情况下会严重占用内存。

如果表1,表2间没有直接的关联关系(即通过循环表1,判断其中条件后按照其它的特定对照值去查询表2),那么仍然建议使用后台表关联查询,及将表1查询的结果集按照不同的条件获取的值转换成对应的映射值后作为一个基准集合,然后将这个集合与表2关联查询即可。具体的sql语句,得根据你使用的数据库和具体场景去编写。

总之,此类情况,完全可以交由数据库搞定,如果使用你现在的逻辑(即查询表1,循环结果集1,然后查询表2,获取结果集2),虽然原则上没有错,但会增加很多内存开销,在大数据量级的情况下,非常容易出现内存溢出的异常,并不作为合理的编码方式。

list是一个链表结构,主要功能是push,pop,获取一个范围内所有值等等, *** 作中key可以理解为链表的名字。Redis的list类型实际上就

list是一个链表结构,主要功能是push,pop,获取一个范围内所有值等等, *** 作中key可以理解为链表的名字。

Redis的list类型实际上就是每个子元素都是string类型的双向链表,我们可以通过push,pop命令 *** 作从链表的头部或者尾部添加删除元素,这样list既可以作为栈,又可以作为队列。

list常见的 *** 作:

(1)lpush和rpush

lpush表示在key对应的list的头部添加字符串元素。例如:lpush list Hello

rpush表示在key对应的list的尾部添加字符串元素。例如:rpush list World

(2)lpop和rpop

lpop代表从list的头部删除元素,并返回元素。

rpop代表从list的头部删除元素,并返回元素。

(3)lrange

取出指定范围内的元素。例如:lrange list 0 -1,0是第一个元素的下标,-1是最后一个元素的下标。

(4)linsert

在key对应的list的特定位置前或后添加字符串,例如:

linsert list before Hello Redis 表示在list链表的Hello前面插入一个元素Redis

(5)lset

设定list中指定下标的元素值,例如:lset list 1 Database,意思是把list中下标为1的元素替换为

Database。

(6)lrem

从key对应的list中删除n个和value相同的元素,如果n<0表示从尾部删除,n=0表示全部删除。

例如:lrem list 1 Hello

(7)ltrim

保留指定key范围内的数据。比如:ltrim list 1 -1,相当于只保留下表从1开始到最后的元素的值。

(8)rpoplpush

从第一个list的尾部移除元素并添加到第二个list的头部。例如:

(9)lindex

返回名称为key的list中index位置的元素。例如:lindex list 1,返回list中下标为1的元素。

(10)llen

返回key对应list的长度。

以上就是关于kettle怎么实现重复抽取更新数据全部的内容,包括:kettle怎么实现重复抽取更新数据、读取数据库中的值(获取数据库)、怎么用list接收数据库内的多条数据并输出等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10204251.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存