tlogcatcher组件未捕获tMSSqlRow读取错误的错误

问题描述 投票:1回答:1

我使用Talend开发了一些作业,并使用Tlogcatcher在数据库上记录错误。似乎适用于除一项以外的所有工作。

enter image description here

这是它的工作方式:

第一个SQL连接从数据库表中读取SQL语句,并且对于每个表,tMSSqlRow读取并执行它。

但是,如果SQL失败(即,不可能删除约束完整性的原因),则tLogCatcher组件不会捕获该错误。

我该怎么做?

sql try-catch talend
1个回答
1
投票

tLogCatcher不应像您在工作中那样使用(OnComponentError / OnSubjobError触发器),它必须是独立子任务(未通过触发器链接)的第一个组件,该子任务被称为每当出现错误/警告/ java异常时,取决于您在tLogCatcher设置中检查的类型。如果要保留OnComponentError触发器,则可以完全省略tLogCatcher,而仅在由OnComponentError触发的子作业中执行错误处理。另外,请确保选中tMSSqlRow组件中的“ Die on error”选项,否则不会引发任何错误,并且该作业仅将错误消息打印到控制台并继续执行,因此不会调用tLogCatcher

编辑:

根据您的要求(继续执行错误操作),一种解决方案是封装从tMSSqlRow开始的处理(以及我上面建议的错误处理技术)在子作业中。该子作业需要定义一个上下文参数(例如QUERY),并对该单个查询进行处理。父作业使用Iterate触发器调用此子作业,然后通过QUERY上下文参数将要处理的每个查询传递给该子作业(tFlowToIterate中的全局变量传递到QUERY中的tRunJob上下文参数]参数标签)。这样,如果您在子作业中的查询处理导致错误,则它由tLogCatcher在子作业内部处理,并且父作业不知道此错误,因此它将继续下一个查询。 >

© www.soinside.com 2019 - 2024. All rights reserved.