如果某行失败,如何停止Pentaho ETL进程?

如果某行失败,如何停止Pentaho ETL进程?,pentaho,kettle,Pentaho,Kettle,我有一个具有以下流的转换: 错误处理行设置为max error=0。因此,当它检测到一个错误时,它就会停止 问题是,如果第一行是正确的,ETL会将该行插入到最终表中,然后停止该过程 是否可以在继续执行该过程之前检查所有行?这样,如果某行失败,则不会删除最终表中的数据(启用中的truncate选项)。在此转换中使用临时/暂存表 如果您的存储空间允许,暂存表将为您的最终表提供最可靠的解决方案,并将停机时间降至最低 暂存表的结构应与最终表相同。然后,您可以在作业内部运行转换,并且只有在SQL作业步骤

我有一个具有以下流的转换:

错误处理行设置为max error=0。因此,当它检测到一个错误时,它就会停止

问题是,如果第一行是正确的,ETL会将该行插入到最终表中,然后停止该过程

是否可以在继续执行该过程之前检查所有行?这样,如果某行失败,则不会删除最终表中的数据(启用中的truncate选项)。

在此转换中使用临时/暂存表 如果您的存储空间允许,暂存表将为您的最终表提供最可靠的解决方案,并将停机时间降至最低

暂存表的结构应与最终表相同。然后,您可以在作业内部运行转换,并且只有在SQL作业步骤成功后,作业才能继续进行,该步骤将final重命名为old,staging重命名为final,然后old重命名为staging


这样,在重命名操作过程中,您的最终表永远不会为空,并且只有几分之一秒不可用。

您可以通过以下方式实现此目的。

好的,这是一个解决方案,但是在没有足够空间的环境中会发生什么?也许一个解决方案是创建一个包含100个字段(字符串数据类型)的临时表,然后将该表转换为最终的表数据类型。如果没有临时表,是否无法加载此数据?一旦完成并重命名表,就可以截断旧版本,因此只需要为最大版本的副本留出空间。如果需要,还可以在ETL期间创建和删除临时表。