tlogcatcher似乎无法正常工作

时间:2018-01-19 07:02:53

标签: sql try-catch talend

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

enter image description here

以下是它的工作原理:

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

但是当SQL失败时(即删除不可能导致约束完整性),tLogCatcher组件不会捕获错误。

我怎么能这样做?

提前致谢。 的问候,

1 个答案:

答案 0 :(得分:1)

tLogCatcher不应该像你在工作中那样使用(使用OnComponentError / OnSubjobError触发器),它必须是独立子工作的第一个组件(未链接)通过触发器),每当出现错误/警告/ java异常时都会调用它,具体取决于您在tLogCatcher设置中检查的类型。
如果您想保留OnComponentError触发器,则可以完全省略tLogCatcher,只需在OnComponentError触发的子工单中进行错误处理。
此外,请确保在tMSSqlRow组件中选中“Die on error”选项,否则不会抛出任何错误,作业只会向控制台输出错误消息并继续执行,因此不会调用tLogCatcher

修改

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