繁体   English   中英

Pentaho将uniqe记录导入数据库

[英]Pentaho Import uniqe records into database

我对Pentaho Spoon还是很陌生,我想将一个csv文件的记录导入数据库表。 但是,仅唯一记录应导入数据库表中。 这就是为什么我需要将EACH记录与数据库表的所有记录进行比较,以确定是否应该导入记录。

到目前为止,我尝试了建议的CRUD模式,如下所示: 在此处输入图片说明

如您在图片中看到的,我合并了excel输入和表输入(忽略转换步骤。我需要转换一个值,因为它们在float格式方面有所不同:数据库格式为#.000000,而float的csv格式是#.0)

合并联接后,我比较标志(由合并行(diff)给出),如果比较的记录是新记录,则将它们导入数据库表,如果它们被更改,我将更新记录并删除它们或相同,我只是什么都不做,到目前为止,很好。

但这是问题所在:如果我重新整理csv-input-file的记录并重新运行转换,则所有记录都将重新导入,因此,数据库表中有重复的记录(我想避免)。 再次强调:解决此问题的正确方法是将csv-input-file的每一行与数据库表中的ALL条目进行比较。

我怎么能意识到这一点? 有什么建议么? 提前非常感谢您!!

Merge Rows (diff)期望对输入进行排序。 通常,会通过弹出窗口警告您。

在到达“ Merge Rows (diff)之前,在“ Excel输入”的输出流上放置一个“ Sort rows步骤。

您应该在Table InputMerge Rows (diff)之间执行相同的操作。 当然,您可能会认为您可以在Table Input的sql语句中完成此操作。

但是,这里有一个初学者陷阱。 您还有其他3个步骤,在同一表上执行Output RowsUpdateDelete 这些步骤可能会锁定表格。 就像在Kettle中一样,所有步骤都同时运行,因此您不知道首先执行哪些步骤,并且该表可能被锁定,甚至无法读取第一条记录。 用专业术语将其称为自动锁定 ,解决方法是将“ Sort Row步骤作为缓冲区

您可以使用“维度查找/更新”控件,该控件提供您尝试实现的相同功能。

谢谢,尼罗什

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM