如何根据条件过滤行,如果不满足条件,在 Talend 中抓取另一行?
How to filter rows based on a condition and if the condition isn't met, grab another row in Talend?
很难想出这个问题的标题,所以希望它确实有意义。
我会进一步解释。我有一个来自 Excel 文件的数据流,每一行都有最后一列中的两个词之一。它将包含“Open”或“Current”。
假设我有一个如下所示的输入:
NAME | SSN | TYPE
John | 12345| Current
Katy | 99999| Current
Sam | 33333| Current
John | 12345| Open
Cody | 55555| Open
而且目标是只抓一个人一次。每个人都有自己的唯一 ID 作为他们的 SSN。如果那个人 Open
和 Current
都存在,我想抓取 Open
行。如果只有 Current
存在,那就抓住它。
所以最终输出应该是这样的:
NAME | SSN | TYPE
Katy | 99999| Current
Sam | 33333| Current
John | 12345| Open
Cody | 55555| Open
注意:如您所见,John
的第一个条目已被删除,因为他有 Open
行。
我已经尝试过了,但是很草率,我认为一定有更好的方法。这是我所做的图像:
Talend flow
以下是您的操作方法:
首先将数据按Name、Type降序排序(这很重要,这样对于每个人来说,Open记录在最上面);然后在 tMap 中像这样过滤它:
Numeric.sequence(row2.name, 1, 1) == 1
如果这是我们第一次看到这个名字,就让记录通过。
很难想出这个问题的标题,所以希望它确实有意义。
我会进一步解释。我有一个来自 Excel 文件的数据流,每一行都有最后一列中的两个词之一。它将包含“Open”或“Current”。
假设我有一个如下所示的输入:
NAME | SSN | TYPE
John | 12345| Current
Katy | 99999| Current
Sam | 33333| Current
John | 12345| Open
Cody | 55555| Open
而且目标是只抓一个人一次。每个人都有自己的唯一 ID 作为他们的 SSN。如果那个人 Open
和 Current
都存在,我想抓取 Open
行。如果只有 Current
存在,那就抓住它。
所以最终输出应该是这样的:
NAME | SSN | TYPE
Katy | 99999| Current
Sam | 33333| Current
John | 12345| Open
Cody | 55555| Open
注意:如您所见,John
的第一个条目已被删除,因为他有 Open
行。
我已经尝试过了,但是很草率,我认为一定有更好的方法。这是我所做的图像: Talend flow
以下是您的操作方法:
首先将数据按Name、Type降序排序(这很重要,这样对于每个人来说,Open记录在最上面);然后在 tMap 中像这样过滤它:
Numeric.sequence(row2.name, 1, 1) == 1
如果这是我们第一次看到这个名字,就让记录通过。