Pentaho ETL表输入迭代

时间:2015-12-09 12:13:38

标签: loops iteration pentaho etl

上下文

我有一张包含客户信息的表格。我想根据以下信息找出表中的重复客户:

  • 将First_Name
  • 姓氏
  • DOB
  • Doc_Num
  • FF_Num
  • 等。

现在将一个客户与同一表中的其他记录进行比较,我需要:

  • 一次阅读一条记录
  • 并将此记录与其余记录进行比较,如果列不匹配
  • 然后我需要比较记录的其他列

问题

  • 有没有办法让Table_Input步骤一次读取或输出一条记录,但它应该在完成上一条记录的处理后自动读取下一条记录?此过程应继续,直到检查/处理表中的所有记录。

  • 另外,想知道我们是否可以迭代相同的过程而不是一次从Table_Input读取一条记录?

2 个答案:

答案 0 :(得分:2)

为了让你的表输入逐行读写,并不是最好的解决方案,我认为它不会达到你想要的效果(例如保持一个跟踪以前的记录)。

您可以尝试使用Unique rows步骤,该步骤可以将重复的行(使用您想要的密钥)重定向到另一个流程,在该流程中,它将被区别对待(或者如果您不想要它,则将其删除)。从我可以看到,您希望有多个唯一行来检查每一列。

enter image description here

答案 1 :(得分:1)

  

有没有办法让Table_Input步骤一次读取或输出一条记录,但它应该在完成上一条记录的处理后自动读取下一条记录?

是的,可以在两个步骤之间更改缓冲区行。您可以将行集中的Nr更改为1.但是不推荐更改此属性,除非您的内存不足。这可能会使工具表现异常。

enter image description here

现在根据共享的评论,我看到有两个问题:

<强> 1。您需要检查重复条目的数量:

您可以使用“分组依据”步骤或使用astro11回答的“唯一”步骤来实现此结果。您可以轻松获取名称的数量,如果计数大于1,您可以将其视为重复。

<强> 2。检查两个数据行:

您要验证两个名称(例如),例如“John S”和“John Smith”。理想情况下,这两个名称应被视为单个名称,因此重复。

首先,这是数据质量问题,没有工具会将这些行视为相同。你可以做的是使用一个名为“Fuzzy match”的步骤。基于您选择的算法的此步骤将尝试为您提供最接近的名称匹配度量。但是为了达到这个目的,你需要有一个单独的MASTER表,其中包含所有可能的名称。您可以使用“Jaro Winkler”算法来获得最接近的匹配。

希望这会有所帮助:)