如何在从 tMySqlOutput 捕获被拒绝的行时加快数据传输?
How to speed up data transfer while capturing rejected rows from tMySqlOutput?
我正在将数据从一个架构中的 table 传输到另一个架构中的 table。我还需要记录在此过程中被拒绝的行,原因有很多,例如,NOT NULL 约束失败。
当我将拒绝 link 附加到输出组件时,传输速度急剧下降到每秒 2-3 行。另一方面,在没有拒绝 link 的情况下,我可以使用 "Extend Insert" 选项,速度增加到每秒 400 行。
如何在不影响性能的情况下捕获被拒绝的行?
在我看来,没有完美的选择:在你的情况下,我认为最好的办法是在插入之前尝试捕获空字段,在 tDBOutput 之前放置一个 tMap:在那里你可以对你的输出进行过滤( "row.field1 is not null") ,第二个输出专用于输出拒绝。这样您可以获得被拒绝的数据,并且仍然使用扩展插入以获得更好的性能。
我同意 @Corentin 上面建议的方法。我使用相同的想法为我的问题想出了一个有效的解决方案。我没有让 DB return 在破坏约束的情况下对每一行都显示错误,而是使用组件 tSchemaComplianceCheck 检查 Talend 中的拒绝情况,它完全包含模式与目的地相同 table & 正在从该组件执行拒绝 link。
我正在将数据从一个架构中的 table 传输到另一个架构中的 table。我还需要记录在此过程中被拒绝的行,原因有很多,例如,NOT NULL 约束失败。
当我将拒绝 link 附加到输出组件时,传输速度急剧下降到每秒 2-3 行。另一方面,在没有拒绝 link 的情况下,我可以使用 "Extend Insert" 选项,速度增加到每秒 400 行。
如何在不影响性能的情况下捕获被拒绝的行?
在我看来,没有完美的选择:在你的情况下,我认为最好的办法是在插入之前尝试捕获空字段,在 tDBOutput 之前放置一个 tMap:在那里你可以对你的输出进行过滤( "row.field1 is not null") ,第二个输出专用于输出拒绝。这样您可以获得被拒绝的数据,并且仍然使用扩展插入以获得更好的性能。
我同意 @Corentin 上面建议的方法。我使用相同的想法为我的问题想出了一个有效的解决方案。我没有让 DB return 在破坏约束的情况下对每一行都显示错误,而是使用组件 tSchemaComplianceCheck 检查 Talend 中的拒绝情况,它完全包含模式与目的地相同 table & 正在从该组件执行拒绝 link。