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