从不同数据库中的2个表中删除重复行

时间:2017-09-13 20:24:15

标签: pentaho kettle pdi pentaho-data-integration

我在不同的数据库中有2个用户表,我希望从这些表中只获得唯一的行。

在以下示例中,我需要没有重复名称的电子邮件列表。

我正在使用Pentaho DI Kettle。

来自数据库1的表用户

ID  | Name        | Email
--- | ----------- | -------------
1   | Jonh Snow   | jonhs@got.com  
--- | ----------- | -------------
2   | Sansa Stark | sansas@got.com  
--- | ----------- | -------------
3   | Ayra Stark  | ayras@got.com  

来自数据库2的表用户

ID  | Name        | Email
--- | ----------- | -------------
1   | Jonh Stott  | jonhs@example.com  
--- | ----------- | -------------
2   | Jonh Jonh   | jonhj@example.com  
--- | ----------- | -------------
3   | Ayra Stark  | ayras@got.com  

期望的结果

ID  | Name        | Email
--- | ----------- | -------------
1   | Jonh Snow   | jonhs@got.com  
--- | ----------- | -------------
2   | Sansa Stark | sansas@got.com

2 个答案:

答案 0 :(得分:0)

据我了解你的问题,你需要只保留DB1 union DB2中不重复的电子邮件吗?

好吧,按照你的逻辑:获取数据(通过数据库连接使用一个Input table),计算每封电子邮件的记录数(Memory Group by)和Filter计数大于1。

使用不需要排序的Memory Group by。在Group field中输入密钥:email。在Aggregates中放置Number of rows(在“类型”下拉列表中)和First Value(或Last ValueName,否则此列将从流。

如果您需要在输出中创建ID,请Add a sequence

enter image description here

答案 1 :(得分:0)

  1. 执行UNION ALL(只需将两个文件连接到虚拟对象)
  2. 对电子邮件执行排序。
  3. 在名称上使用UNIQUE行。
  4. 在名称上使用流查找,其中一个输入为table1,第二个唯一行。
  5. 过滤ID< 3,id isnull。