我使用Talend开发了一些作业,并使用Tlogcatcher在数据库上记录错误。似乎适用于除一项以外的所有工作。
这是它的工作方式:
第一个SQL连接从数据库表中读取SQL语句,并且对于每个表,tMSSqlRow读取并执行它。
但是,如果SQL失败(即,不可能删除约束完整性的原因),则tLogCatcher组件不会捕获该错误。
我该怎么做?
tLogCatcher
不应像您在工作中那样使用(OnComponentError
/ OnSubjobError
触发器),它必须是独立子任务(未通过触发器链接)的第一个组件,该子任务被称为每当出现错误/警告/ java异常时,取决于您在tLogCatcher
设置中检查的类型。如果要保留OnComponentError
触发器,则可以完全省略tLogCatcher
,而仅在由OnComponentError
触发的子作业中执行错误处理。另外,请确保选中tMSSqlRow组件中的“ Die on error”选项,否则不会引发任何错误,并且该作业仅将错误消息打印到控制台并继续执行,因此不会调用tLogCatcher
。
编辑:
根据您的要求(继续执行错误操作),一种解决方案是封装从tMSSqlRow
开始的处理(以及我上面建议的错误处理技术)在子作业中。该子作业需要定义一个上下文参数(例如QUERY),并对该单个查询进行处理。父作业使用Iterate
触发器调用此子作业,然后通过QUERY上下文参数将要处理的每个查询传递给该子作业(tFlowToIterate
中的全局变量传递到QUERY
中的tRunJob
上下文参数]参数标签)。这样,如果您在子作业中的查询处理导致错误,则它由tLogCatcher
在子作业内部处理,并且父作业不知道此错误,因此它将继续下一个查询。 >