回滚后继续Pentaho改造
Continue Pentaho transform after rollback
使用 Kettle-Spoon 5.1,我有一个转换:
- 从数据库 (oracle) 中提取一行
- 将行发送到 REST api(通过 REST
客户端)
- 使用 Switch/Case 查看结果的步骤。如果结果好,我从数据库中删除记录(执行SQL),否则,我回滚事务
请注意,回滚取决于结果,不一定是 error/exception。 如果某个特定的事务被回滚,我仍然想继续处理其他行(不希望转换停止)。
两个问题:
- 是否有一种干净的方法来强制回滚? (目前我有 javascript 步骤 "throw"
- 回滚后如何强制事务继续?
在一个转换中,Pentaho 在同一个事务中同时处理流中的行。要回滚单行,您需要为每一行单独的事务,Pentaho 不支持。
我建议使用另一种方法来达到同样的效果。两种可能性:
- 在收到 REST 结果之前不要更改数据库。这样,就没有什么可以回滚的了。当然,您可以在内存中(在流字段中)或临时数据库表中暂存更改,这样您就可以确切地知道它们是什么。
- 以某种方式跟踪您所做的数据库更改,以便您可以在 REST 结果指示您应该这样做时撤消它们。根据您的工作方式,您可以在流字段或临时数据库表中跟踪这些更改。
使用 Kettle-Spoon 5.1,我有一个转换:
- 从数据库 (oracle) 中提取一行
- 将行发送到 REST api(通过 REST 客户端)
- 使用 Switch/Case 查看结果的步骤。如果结果好,我从数据库中删除记录(执行SQL),否则,我回滚事务
请注意,回滚取决于结果,不一定是 error/exception。 如果某个特定的事务被回滚,我仍然想继续处理其他行(不希望转换停止)。
两个问题:
- 是否有一种干净的方法来强制回滚? (目前我有 javascript 步骤 "throw"
- 回滚后如何强制事务继续?
在一个转换中,Pentaho 在同一个事务中同时处理流中的行。要回滚单行,您需要为每一行单独的事务,Pentaho 不支持。
我建议使用另一种方法来达到同样的效果。两种可能性:
- 在收到 REST 结果之前不要更改数据库。这样,就没有什么可以回滚的了。当然,您可以在内存中(在流字段中)或临时数据库表中暂存更改,这样您就可以确切地知道它们是什么。
- 以某种方式跟踪您所做的数据库更改,以便您可以在 REST 结果指示您应该这样做时撤消它们。根据您的工作方式,您可以在流字段或临时数据库表中跟踪这些更改。