Talend中的条件映射

时间:2015-05-11 11:02:43

标签: etl talend

我在Talend中创建了一个简单的工作,它将在2个Excel工作表之间的数据中执行内部连接,然后将结果转储到输出Excel工作表中。这可以通过下图最好地说明: -

enter image description here

tMap中使用的映射是: -

enter image description here

然而,现在我面临的另一个挑战是,只有当该行中的列值不为NULL时,我才必须执行此映射。例如,有一个映射row1.RECID = row2.RECID,但是如果row2.RECID不是NULL,这应该是合法的。 我如何在Talend中实现这一目标?我用tMap表达式进行了很多实验但是无法正确实现..
这是一个小样本输入,它是相应的预期输出。 假设我的输入有值: - v1,v2,v3,v4
1,A,O,3
2,B,X,4
3,C,X,4

并且查找具有值

v1,v2,v3
1,A,O,3
2,null,X,4
3,null,C,4
2,空,X,空

然后输出应该是: -
V1,V2,V3
1,A,O,3
2,B,X,4
2,B,X,4

3 个答案:

答案 0 :(得分:0)

尝试映射row1中的最大值,put row2与左外连接。

我想要只在row1和row2中的值,你可以在row2中添加一个过滤器(但我想这不是你想要的)

答案 1 :(得分:0)

在加入输入流之前,你必须拒绝具有空值的行,我已经根据给定的简单数据创建了一个映射。

enter image description here

答案 2 :(得分:0)

Talend确实有一个更优雅的选项,可以在多个列上过滤您的数据。使用 tSchemaComplianceCheck 组件过滤掉空值并清空就像点击几个复选框一样简单。这允许您使用自己的模式来检查空值和空值并将其过滤掉。错误行将转到拒绝流程,您可以选择处理该流程。如果您不想捕获和处理拒绝,您可以忽略它们。您的主流只会包含通过合规性检查的记录。以下是使用它的一些提示:

  • 在tSchemaComplianceCheck组件 - >基本设置屏幕中,单击自定义,它将显示每列。确保取消选中 Nullable ,否则它将允许空值通过。

  • 在“高级设置”标签中,选中将所有空字符串视为NUll 。这将与前一步骤一起过滤掉null和empty。

  • 在Excel组件中,单击“进度设置”选项卡,然后选中停止阅读遇到空行

下面的

是显示基本流程和设置的屏幕截图。您将链接到tMap而不是tLogRow。如果我已正确理解您的问题,我想您会发现这是Talend的理想解决方案。

enter image description here