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