步骤之间的水壶 etl 转换跳跃不起作用

kettle etl transformation hop between steps doesn't work

我正在使用 PDI 6 并且是 PDI 的新手。我创建了这两个 tables:

    create table test11 (
     a int
    )

    create table test12 (
     b int
    )

我在PDI中创建了一个转换,简单,只需两步

第一步:

    insert into test11 (a)
    select 1 as c;

第二步:

    insert into test12 (b)
    select 9 where 1 in (select a from test11);

我希望第二步执行 AFTER 第一步,因此将插入值 9。但是当我 运行 它时,没有任何东西被插入 table test12。在我看来,这两个步骤是并行执行的。为了证明这一点,我删除了第二步并将 sql 放在步骤 1 中,如下所示

    insert into test11 (a)
    select 1 as c;
    insert into test12 (b)
    select 9 where 1 in (select a from test11);

它奏效了。所以为什么?我在想一步就是一步,所以下一步会等到它完成,但事实并非如此?

在 PDI 转换中,步骤初始化和执行是并行发生的。因此,如果您在单个转换中有多个步骤,这些步骤将并行执行,并且数据移动以循环方式发生 (默认情况下)。这就是为什么您的两个 execute SQL 步骤不起作用的主要原因,因为这两个步骤是并行执行的。 PDI 工作的情况并非如此。作业以顺序方式工作,除非它配置为 运行 并行。

现在对于您的问题,您可以尝试执行以下任一步骤:

  1. 使用 SQL 步骤创建两个单独的转换并将其放入 JOB 中。按顺序执行作业。
  2. 您可以尝试在转换中使用 Block this step until finish,这将等待特定步骤的执行。这是避免转换中的并行性的一种方法。您的转换设计将类似于以下内容: 数据网格是一个虚拟输入步骤。无需向数据网格分配任何数据。

希望这对您有所帮助:)