Talend 中的条件映射
Posted
技术标签:
【中文标题】Talend 中的条件映射【英文标题】:Conditional Mapping in Talend 【发布时间】:2015-05-11 11:02:43 【问题描述】:我在 Talend 中创建了一个简单的作业,它将在 2 个 excel 表之间的数据中执行内部连接,然后将结果转储到输出 excel 表中。下图可以最好地说明这一点:-
tMap中使用的映射是:-
但是,我现在面临的额外挑战是,只有当该行中的列值不为 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、空、X、4 3、空、C、4 2,null,X,null
那么输出应该是:- v1,v2,v3 1,A,O,3 2,B,X,4 2,B,X,4
【问题讨论】:
您使用了正确的设置,内部连接模型将为您提供非空值,如果您得到其他内容,请将当前输出样本和所需输出添加到您的问题中。 为什么不过滤在 v2 列中有 null 的输入行?因此 tmap 将接收主输入的所有行,并且只接收查找的第一行,并为您提供所需的输出。 @5413d -> 是的,尝试过这种方式,但它变得太乏味了.. 没有更优雅的方法吗? 我不明白为什么最后一行会出现,请你解释一下输出的最后两行。 【参考方案1】:在加入您的输入流之前,您必须拒绝具有空值的行,我已经根据给定的简单数据创建了一个映射。
【讨论】:
@5413d -> 好主意!但我希望在多个列上检查这一点。如何将这样的过滤器应用于每个映射并使其独立于其他列的映射? @Sparky 在底部的过滤框里写row2.v1!=null and row2.v1!= "" and row2.v2!=null and row2.v1!=""
,你可以写任何逻辑表达式来过滤你的数据
@5413d -> 我厌倦了将条件放在下面,但它没有给我正确的输出。但最后我找到了解决方案,我对输入表执行了自连接,并将输入表与我的 tmap 表连接起来。然后对于每个加入条件,我将条件设置为:row.col1.equals("NULL")?out2.col1:row.col1.. 现在工作得很好......
@Sparky 我很高兴 :)【参考方案2】:
尝试映射row1中的最大值,即使用左外连接的put row2。
如果你想要只在 row1 和 row2 中的值,你可以在 row2 中添加一个过滤器(但我猜这不是你想要的)
【讨论】:
谢谢,但是是的,我的要求不同..在问题中突出显示了一个示例案例..【参考方案3】:Talend 确实有一个更优雅的选项,可以过滤多列上的数据。使用 tSchemaComplianceCheck 组件过滤空值和空值就像单击几个复选框一样简单。这允许您使用自己的模式来检查空值和空值并将它们过滤掉。错误行转到您可以选择处理的拒绝流。如果您不想捕获和处理拒绝,您可以简单地忽略它们。您的主要流程将仅包含通过合规性检查的记录。以下是使用它的一些提示:
在 tSchemaComplianceCheck 组件 -->Basic Settings Screen 点击Custom Defined,它将显示每一列。确保未选中 Nullable,否则它将允许空值通过。
在“高级设置”选项卡中选中将所有空字符串视为 NUll。这将与前面的步骤一起过滤掉空值和空值。
在您的 Excel 组件中,单击“高级设置”选项卡,然后选中遇到空行时停止阅读。
以下是显示基本流程和设置的屏幕截图。您将链接到 tMap 而不是 tLogRow。如果我正确理解了您的问题,我想您会发现这是 Talend 中的理想解决方案。
【讨论】:
@E LaRoche -> 谢谢这确实是一个很棒的过滤组件。但我真正想要的是一种实现条件映射的方法。就像查找文件中的特定字段为 NULL 一样,则不应动态考虑映射!您提到的组件将以类似于我当前使用 tFilterRow 实现的方式帮助我。但是如何在运行时根据当前行的查找文件值动态更改我的映射?以上是关于Talend 中的条件映射的主要内容,如果未能解决你的问题,请参考以下文章
java.lang.IllegalArgumentException:java.net.URISyntaxException:绝对 URI 中的相对路径:用于 Talend 中的 Hbase
如何使用 talend 中的 tmysql 行将唯一行从数据库加载到数据仓库中
Talend Data Integration 中的选角日期
如何将Boondmanager ERP的PHP中的SOAP API与Talend连接起来