如何在Pentaho Kettle(PDI)的一个会话中运行2个不同的“执行sql”步骤

时间:2014-10-10 09:00:26

标签: sql oracle session pentaho kettle

我的问题是,如何运行2个不同的"执行SQL脚本"步骤,以便它们在同一个会话中运行,而不是在2个不同的会话中运行?
在我的转换中,我需要在转换过程的最初阶段运行一个sql脚本,以允许在表上进行修改。然后,我从一个数据库中提取数据,操纵它们,并根据结果我需要调用一些过程(使用另一个sql脚本)来更新转换状态。如果第一个sql不是,我就无法更新状态已执行,未获得许可。

搜索只给出了2个结果:

  1. 选择"独特的连接"在转换设置中。这不适用,因为它仅适用于旧版本的水壶。
  2. 选择"使转换数据库成为事务性的#34; - 实际上与第一个相同(新水壶中旧属性的新名称)。似乎这实际上并不是我想要的,因为它没有像我期望的那样工作。
  3. 我正在使用Oracle数据库和水壶5.1.0。

    更新:

    enter image description here

    在这张图片中,我有2"执行SQL脚本"按顺序执行步骤,通过适当的步骤阻止。看起来这个脚本在2个不同的数据库连接(会话)中执行,所以第二个脚本没有看到第一个脚本的效果。

2 个答案:

答案 0 :(得分:2)

主要观点是"执行每一行?"选项"执行SQL语句"步。此选项稍微改变了步骤的行为。此步骤的Pentaho wiki说"选择此选项可为每个传入行执行SQL。在这种情况下,可以使用参数。 取消选中此选项时,将在步骤初始化阶段执行SQL语句。"。正是我需要的。但我想知道为什么开发人员将两种不同的功能放在一个选项中?

答案 1 :(得分:1)

我前段时间已经完成了相同的发现过程。 事实证明,您需要的是定义运行两个转换的作业。 在转换中,您无法保证顺序执行。下游步骤可能在其上游"上游步骤之前开始运行。完成。如果您的转换依赖于外部效果(例如对外部SQL数据库的修改),那么您将无法在一次转换中实现所需。 作业允许您完全控制它们触发的转换顺序。

这些是您需要采取的步骤:

  1. 创建新职位
  2. 添加"开始" (三角形)步骤
  3. 添加"转换"步。将其指向转换,其唯一任务是在数据库表中启用写访问权
  4. 添加第二个转换步骤,将其指向操纵数据的转换,最后上传它。
  5. 使用箭头开始连接到第1个,然后是第1个到第2个变换。
  6. 经营工作:)