kettle中有源表和目标表,两个表的表输入的查询中的表名是一个变量,如何让源表中的数据更新到目标表中?

图片说明
如上图所示(不知道有没有显示出来,转换中有两个表输入,一个叫源表,一个叫目标表,他们来自两个不同的库,查询都是 select * from ${TABLENAME} )
那么,如何让源表中的数据插入或更新到目标表中呢?
尝试过的思路(PS:不可取的思路):
1、暴力操作:执行sql脚本(清空目标表数据)--> 表输入(获取源表数据)-->表输出(将源表数据插入到目标表中) 因为表输出可以不用指定数据库字段,因此能实现需求,但太暴力,boss明确说明,这样不可取。
2、合并记录: 合并记录需要关键字段和数据字段,而我两个表输入都是用的变量的方式,因此不知道数据字段,并且每个表的主键也不一样,关键字段也不好填写。不知道有没有方式能够取到关键字段和数据字段。
3、两个表输入都指向java代码,利用java代码实现比较,然后再更新目标表(没有尝试不知道可不可行)

            以上是尝试过的方法,以失败告终。不知道有没有好的方法能够解决这个问题。
            求,急

2个回答

像Kattle这种用可视化的方式来进行配置以达到数据处理的目的,基本上是需要有明确的字段列表的,
而你想要做的是一个相对通用的过程,现有的控件基本上是无法达到要求的
你的第三种思路用java代码来分析进行更新理论上是可行的,
但是有一个前提条件,你想要的结果是有则更新,无则插入
这个判断是否存在,就要求必须有条件来识别是不是存在,大多数时候我们是用主键来判定的
不同的表主键字段很可能不同,又想要做到通用,就要去动态获取主键字段
这些用java代码去做肯定能做出来的,只是会比较麻烦。
达到这个目的差不多就全是代码干的活,你用不用kattle已经关系不大了

非常感谢你的回答
主要是公司的业务需求,数据要做到伪实时迁移(定时迁移,大概四五分钟),这样的数据量上级不想用java去实现(占用系统资源)。
其实如果查表不用变量的形式,很容易实现。但工作量太大了。上百张表,每张表做一个转换。想想就够了。
现在非常纠结.........

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
源表和目标表完全相同,怎么快速创建目标表
发现在抽取数据的时候,好多时候源库表和目标表的表结构是完全相同的,能利用Informatica快速在目标库创建一个相同的表吗?或者说生成一个在目标库里要创建的这个表的脚本?rnrn如果表中有100个自字段,是相同类型的数据库还好说,可以直接到源数据库将这个表的创建脚本拿下来,稍作改动就可以在目标库上创建,如果是不同类型的数据库,在目标库上创建表也需要一定时间的rn
两个表中的查询!!
两个表中又相同的字段,想查询出两个表中的所有字段rnselect *from dj where userid='ppp' union all select * from dj_gm where rnuserid='ppp'rn显示rn务器: 消息 206,级别 16,状态 2,行 1rn操作数类型冲突: ntext 与 datetime 不兼容rn服务器: 消息 205,级别 16,状态 1,行 1rn包含 UNION 运算符的 SQL 语句中的所有查询都必须在目标列表中具有相同数目的表达式。rnrn请高手帮忙!!rn
查找目标表中源表内容位置并在源表设置超链接
查找目标表中源表内容位置并在源表设置超链接: 即我在sheet1中点击单元格,自动跳转到sheet2中和源单元格内容一致的单元格。 超链接在文档打开时自动设置。
一个表中两个字段不在另一个表中的查询
表1rn A B C Drn表2rn A xrnrn表3rnrn A e f g xrnrn查询表1和表2相等的A对应的x 不在表3中 rn
将一个表中的数据更新到另外一个表中
现在我有两个表,表结构如下:rn[code=SQL]rncreate table T_Name_temp(rn AutoId int identity(1,1),rn ItemCode int,rn ItemName varchar(20)rn)rnrncreate table T_Name(rn AutoId int identity(1,1),rn ItemCode int,rn ItemName varchar(20),rn Commentrn)rn[/code]rn我现在要将 T_Name_temp中的数据导入到T_Name中,但是如果T_Name.ItemCode=T_Name_Temp.ItemCode时,rn就不要insert,而是update.rn
如何将一个表中的数据更新到另外一个表中??
现在有两个表rnTB1:rnID Field1 Field2 Field3rn1 a d grnrnTB2:rnT_ID Field1 Field2 Field3rn2 b e hrnrn怎么样将TB1中的与TB2中相同字段的数据更新到TB2中rnrn即结果为:rnT_ID Field1 Field2 Field3rn2 a d grnrnrn
一个表中的查询
ID TYPE TIMErn1 0 2011-01-01 01:01:01rn2 0 2011-01-01 01:02:01rn3 1 2011-01-01 01:03:01rn4 1 2011-01-01 01:04:01rn5 0 2011-01-01 01:05:01rn6 0 2011-01-01 01:06:01rn7 0 2011-01-01 01:07:01rnrn求在表中按TIME DESC 后,TYPE为0的求和直至TYPE为1 结果为3rnrn请问用sql怎么实现
如何源Access数据库中把表导入到目标Access中?
如题,如何从Access数据库中把其中的表导入到另外一个Access中?rnrn其中目标Access中没有对应的表。rnrn查了不少资料,但还没弄明白如何个操作法,希望高手指教下。rn
一个表中的数据更新,怎样用触发器在另一个表中更新数据
其中,客户(client)的属性有:客户编码(cno)、客户名称(cname)、所属行业(trades)、客户地址(caddress)、客户联系人(clinkman)、客户电话(ctelephone) ;产品(product)的属性有:产品编号(pno)、产品名称(pname)、规格(spec)、单位(unit)、单价(unitprice)、供应厂家编码(fno);厂家(factory)的属性有:厂家编码(fno)、厂家名称(fname)、厂家地址(faddress)、销售经理(salesmanager)、厂家电话(ftelephone)。rn在客户订购(order)产品中,一个客户可以订购多种产品,一种产品也可以被多个客户订购,客户订购产品时须标明订购的客户编码、产品编号、订购数量(amount)和订购日期(date);在厂家供应(supply)产品中,一种产品可以由多个厂家供应,而一个厂家只供应一种产品,厂家供应产品时须标明厂家编码、产品编号、供应日期(sdate )和供应数量(samount)。rnrnrn创建一个存放厂家供应产品数量的累计统计表(包括厂家编码、厂家名称、产品编码、产品名称和累计供应数量等列信息);然后创建一个insert触发器,使得厂家增加供应产品时,与累计统计表的数据保持一致。rn谁能帮我编写一个代码吗
如何用一个表中的数据更新另一个表中的数据
在同一数据库中如何用一个表中的数据更新另一个表中的数据。如:rntable1:rnnam addrrnjohn gzrnsusan usarnrntable2:rnnam addrrnjohn 1rnsusan 2rnrn请问如何用table1中的数据使talbe2更新成为rnnam addrrnjohn gzrnsusan usarnrn谢谢!!
如何把两个表中的数据连接到一个表中
如何把两个表中的数据连接到一个表中,是用select into吗?rn比如:表table1,table2结构相同,怎样把他们的数据放到一个表中?
如何从一个表中查询另一个表中的记录
[size=14px] 具体是这样的:有两个表,表1和表2 ,两个表中相互连接的字段是卡片编码,即通过卡片编码可以把两个数据库相连,我想在表1中找出在表2中出现的卡片编码的所有记录。rn 用SQL语句就是这样的:select * from 表1 where 卡片编码 in (select 卡片编码 from 表2)rn 但是问题是现在的电脑是不让安装SQL,而电脑本身就带有access数据库,所以只能用这个了,不知道哪位高手知道如何操作啊,没用过access,但是又急着用它,所以请各位帮帮忙了,把操作尽量说具体点,行吗?rnrn万分感谢[/size]
匹配两个EXCEL表中的数据,即读取一个表中数据在另一个表中查询
File file = new File("D://2014BYSSY-6.xls"); String[][] a1 = ReadExcel.getData(file, 1); File file2 = new File("D://校内导入研究生数据.xls"); String[][] a2 = ReadExcel.getData(file2, 1); int flag = 0;
查询两个表中日期最大的那个表中的数据
比如说rnA表中有id,name,createdatarnB表中有id,name,createdatarnrn哪个表中的日期最大,然后查询哪个表中的所有数据,。
表结构发生变化如何刷新 源表 目标表 mapping
如题,好像有个Refresh,没找到
表中记录是另一个表的表名,如何联合查询?
建了表A:rn编号 字段 表名 说明 唯一码rn1 ccc B B表 guid1rn2 ddd C C表 guid2rn。。。。rn其中表B和表C里面的字段是不一样的,它们和表A里面的记录关联靠的是唯一码。比如表B:rn唯一码 字段1 字段2rnguid1 aaa bbbrn我想要的效果就是,比如选择表B,它会把表A的内容取过来:rn唯一码 字段 字段1 字段2rnguid1 ccc aaa bbbrnrnE71发帖,请帮忙。
让两个表中的数据同步
update shopping_staticpageinfo spirnset spi.unitprice=mp.currentsalepricernfrom shopping_staticpageinfo spi inner join shopping_markprice mp on spi.typeid = mp.marktypeid and spi.unitprice-mp.currentsaleprice!=0rnrn我想判断当mp里面的商品和spi里面的商品一样,mp里面的价格和spi里面的价格不等,那么就让他们相等。SQL怎么写
查询两个数据库中的表
由于数据量太大超过2G,因此分成两个数据库,不知怎么写SQL语句对两个数据库合并查询,请大侠帮忙!
在两个表中查询的问题
在数据库中有两个表,Group:GroupName(组名),GroupID(组编号),Des(组描述);Person:PName(人名),GroupID(所属的组编号),PID(人编号),PDes(人描述)rn我用了 select G.GroupName,G.Des,P.PName from Group G,Person P where G.GroupID=P.GroupID,会有重复行?该怎么改?若想用其他语言把结果显示成:GroupName(组名) Des(组描述) 该组所有的人rn 第一组 无 a,b,crn 第二组 无 d,ernrn该怎么做??
access 表中关联表查询问题
table1rnrn字段 id theme FileId MemoIdrn数据 1 x1 1 2rn数据 2 x2 3 0rnrnrntable2rnrn字段 id style inforn数据 1 file info1rn数据 2 memo info2rn数据 3 file info3rnrn想要查询后显示下面信息rnrntable1.id table1.theme table2.info table2.inforn 1 x1 info1 info2rn 2 x2 info3 (空)rnrn我现在sql语句是这么写的:rnselectrn a.id, a.theme, b.info, c.infornformrn table1 a left join table2 b on a.fileid = b.idrnleft joinrn table2 c on a.memoid = c.idrnrn但有问题。该怎么写呢?
mysql 将A表中的数据更新到B表中
UPDATE table_B t1 INNER JOIN (     SELECT         *     FROM         table_A tt     WHERE         tt.order_info_id IN (             SELECT DISTINCT                 order_info_id             FROM      ...
两个表的联表查询
CREATE TABLE [dbo].[tableA](rn[ID] [bigint] IDENTITY(1,1) NOT NULL,rn[mCount] [int] NOT NULL DEFAULT ((0)),rn[mSMSstate] [bit] NOT NULL,rn[mName] [varchar](50) NOT NULLrn)rnrnrnCREATE TABLE [dbo].[tableB](rn[ID] [bigint] IDENTITY(1,1) NOT NULL,rn[sMsgId] [int] NOT NULL,rn[sRes] [int] NOT NULL,rn[sName] [varchar](50) NOT NULLrn) rnrnrninsert into dbo.tableA values(1,'True','test')rninsert into dbo.tableA values(2,'True','test')rninsert into dbo.tableA values(1,'True','test')rninsert into dbo.tableA values(1,'True','test')rninsert into dbo.tableA values(5,'False','test')rninsert into dbo.tableA values(1,'False','test')rninsert into dbo.tableA values(1,'True','test2')rninsert into dbo.tableA values(1,'True','test2')rninsert into dbo.tableA values(1,'False','test2')rnrninsert into dbo.tableB values(1,1,'test')rninsert into dbo.tableB values(1,1,'test')rninsert into dbo.tableB values(1,1,'test')rninsert into dbo.tableB values(1,1,'test')rninsert into dbo.tableB values(1,2,'test')rninsert into dbo.tableB values(1,2,'test')rninsert into dbo.tableB values(1,2,'test2')rninsert into dbo.tableB values(1,2,'test2')rnrnrn查询语句rnSelect r.mName,sum(r.mCount),sum(case when r.mSMSstate='True' then r.mCount end),count(s.ID),count(case when s.sRes=1 then s.ID end) From tableA as r left join tableB as s on s.sName=r.mName group by r.mName rnrnrn正确需要的结果应该为rnmName ASum ATSum Bcount BTcountrntest 11 4 6 4rntest2 3 2 2 0rnrn现在的结果确实查很远..rn表B算同一个Name的条数,而表A是要算同一个Name的mCount的和...(Name有多个的)rn并且表A跟表B的条数是不一样的主键ID就肯定不一样,其实最终的效果就是要下面的输出,将同一个Name的成为一行rnSelect s.sName,count(s.ID),count(case when s.sRes=1 then s.ID end) From tableB as s group by s.sName rnSelect r.mName,sum(r.mCount),sum(case when r.mSMSstate='True' then r.mCount end)From tableA as r group by r.mName rn
它表某列数据更新到目标表sql写法
它表某列数据更新到目标表sql语句写法,其中目标表需包含该表的引用 UPDATE 它表表名, 目标表表名 SET 目标表字段 = 它表字段 WHERE 它表表名.id = 目标表表名.id AND 条件   UPDATE InventoryHdr, WmsSumLog SET WmsSumLog .billNo = InventoryHdr.inventorNo WHERE WmsSumL...
在两个表中查询数据
有两张表 A和B,我想在两张表中查询字段名为aaa='1000'的所有记录 ,不知如何写这SQL语句,谢谢rn
两个表中,删除一个表中记录的问题
有两个表TABLE_A和TABLE_Brn要删除表TABLE_A中的一条数据,条件有两个rn1、TABLE_B.C = 1rn2、TABLE_A.A = TABLE_B.A AND TABLE_A.B = TABLE_B.Brn请问各位大侠,应该如何实现?
两表相加(表中是联合主键)
我有两个表结构完全相同,一个是score,另一个是score1,我想把这两个表中的数据弄到一个表里!rnscore rnstudent_no km_name test_type xq_name xl1 xl2...xl20 score_flag protect_frn20060026 数学 1 06-07 8 5 ..... 1 1rn20060027 语文 1 06-07 9 6 ..... 1 1rnrnscore1rnstudent_no km_name test_type xq_name xl1 xl2...xl20 score_flag protect_frn20050036 英语 1 06-07 10 8 ..... 1 1rn20050038 地理 1 06-07 11 6 ..... 1 1rnrn其中student_no ,km_name ,test_type ,xq_name这四个字段是联合主键,请各们大侠帮忙!谢谢! rn
如何将access数据库中相关联的两个表放入一个表中
例如tbWorkerInf与tbAllow,都有name这个字段,如何获取这两个表的信息,将其信息对应的放入一个表中呢?
两个表中的数据显示在一个表中
我有一个问题,向大家请教。rn 就是怎么将数据库中两个表中的数据选择性的显示在界面的一个gridpanel中。rn谢谢。
关于一个表中的数据导入一个表
userinfoTable.FieldByName('username').AsString:=Adotable1.Fields[0].asstring;rn userinfoTable.FieldByName('address').AsString:=Edit2.Text+Adotable1.Fields[1].asstring;rn userinfoTable.FieldByName('certificate').AsString:=Adotable1.Fields[2].asstring;rn userinfoTable.FieldByName('tel1').AsString:=Adotable1.Fields[3].asstring;rnrn这样只是导了adotable1第一行的数据,怎么样做一个循环全部导完一个表中的内容,求教!
oracle中模糊查询数据库中存放表表名的表
例如我知道我想查找包含C字符的表名的表为什么用这句sql执行没反应?rnselect * from user_tables where table_name like '%c%'rn
将一个表中查询出的数据导入另一个表中
我先用select语句从一个表tb1中条件查询出数据如下:rn物品编号 物品名称 物品数量 rnrn现在我想将其直接导入另一个创建好的表tb2中,并且加上一列,如下:rn单据编号 物品编号 物品名称 物品数量rnrn其中单据编号是自己添加的,如10001,后三列是之前查询出的结果。rn请问各位大大,如何编写sql语句能实现?能不能把它写成一条语句?rn或者用VC++来实现?
如何查询一个表中的两个字段
现在要查询一个内容:ABC rn表名叫 wzxx 里面有两个字段 title 和 content 。rnrn我要查询 title 和 content 里包含ABC的条目。rnrn[color=#FF0000]sql="select * from wzxx where ABC like '%"&title&"%' order by id desc"[/color]rnrn我现在只有上面红色语句。
数据库的表中查询
在数据库中,从学生-课程表中去查找想要的东西。
表中COUNT(*) 查询
我有个库,库中有很多个用户自建的数据表。rn逐个查看大部分的表都是空表(无数据)。rnrn我通过何种方式能很快的找到一个有内容的表?rn或者能通过一种方式能排除所有空表,列出来有数据的表?rn是不是要用游标逐个的对表做查询才可以呀?
查询不存在表中的
A表结构: | id | namernrn我现在有一些id,想查出这些id哪些不在A表中;rnrn有没有sql可以实现?rn
怎样在表中查询
两个表 rnA: 姓名 出生年月 纪念日 日期rn 张三 1985.10 ----- rn 李斯 1982.11 结婚纪念日 1999.10.11rnrnrnB: 事项 姓名 日期rn 生日 张三 1985.10rn 生日 李斯 1982.11rn 结婚纪念日 李斯 1999.10.11rnrnrn同上 请问怎样实现上边把A表中的所有记录按照这样的方式把信息添加到B表中,rn rnrnrnrn
如何把一个表的数据更新到另一个表?
A表字段:rnID,XM,DJRQrnB表字段:rnID,XM,DJRQ,JWHrnrn两个表的ID是唯一对应的,如何把B表中JWH='xx村'的'DJRQ'数据更新到A表中?谢谢rn
无法访问目标表
我做一个数据复制,用到SqlBulkCopy。rn[code=C#]rnrn using (SqlBulkCopy bulkCopy = new SqlBulkCopy(SqlCons))rn rn bulkCopy.DestinationTableName = "[2e5eData].[dbo].[Clothing.NewsInfo]";rn bulkCopy.ColumnMappings.Add("TypeName", "TypeCard");rn bulkCopy.ColumnMappings.Add("Title", "Title");rn bulkCopy.ColumnMappings.Add("Content", "NewsContent");rn bulkCopy.ColumnMappings.Add("Source", "NewsSource");rn bulkCopy.ColumnMappings.Add("Times", "Time");rn bulkCopy.ColumnMappings.Add("KeyWord", "KeyWords");rn tryrn rn bulkCopy.WriteToServer(oleReader);rn rn catch (Exception e)rn rn return false;rn rn finallyrn rn oleReader.Close();rn rn return true;rn rn[/code]在bulkCopy.WriteToServer(oleReader);出错,“无法访问目标表”
mysql操作目标表
mysql中You can't specify target table for update in FROM clause错误的意思是说,不能先select出同一表中的某些值,再update这个表(在同一语句中)。 例如下面这个sql:update market_data.curves set id_calendar = 'Bond_CN' where id_curve in (SELEC
两个表的结果一摸一样。如何实现一个表中的内容copy到另外一个表中。。
如题:
相关热词 c# stream 复制 android c# c#监测窗口句柄 c# md5 引用 c# 判断tabtip 自己写个浏览器程序c# c# 字符串变成整数数组 c#语言编程写出一个方法 c# 转盘抽奖 c#选中treeview