2016-05-13 6 views
0

私はPDI 6とPDIを使用しています。私は、これら2つのテーブルを作成した:ステップ間のケトルetl変換ホップが機能しません

create table test11 (
    a int 
    ) 

    create table test12 (
    b int 
    ) 

Iは単純PDIで変換を作成し、わずか2ステップ

enter image description here

を最初のステップでは:

insert into test11 (a) 
    select 1 as c; 

第二のステップにおいて:

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

私は第2ステップがの後に最初のステップでの後に実行されることを望んでいたので、値9が挿入されます。しかし、私がそれを実行すると、何もtest12に挿入されませんでした。 2つのステップが並行して実行されるように見えます。これを証明するために、私は2番目のステップを削除し、このようなステップ1のSQLを入れて

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

それが働いた。なぜ?私は1つのステップが1つのステップだと思っていたので、次のステップは完了するまで待つが、そうではない?

答えて

1

PDI変換では、ステップの初期化と実行が並行して行われます。したがって、単一の変換で複数のステップがある場合、これらのステップは並行して実行され、データ移動はラウンドロビン方式で行われます。(デフォルト)。これは主に、2つのSQL実行ステップが動作しない理由です。これは、両方のステップが並行して実行されるためです。同じことはPDIジョブでは当てはまりません。ジョブはパラレルで実行するように構成されていない限り、順次処理されます。

  1. は、SQLステップを持つ2つの別々の変換を作成し、JOB内に配置:あなたの質問のために今

    、あなたは以下の手順のいずれかをしようとすることができます。ジョブを順番に実行します。

  2. Block this step until finishを使用して、特定のステップが実行されるまで待つことができます。これは、変換の並列処理を避けるための1つの方法です。変換の設計は以下のようになります。 データグリッドはダミー入力ステップです。データグリッドにデータを割り当てる必要はありません。

enter image description here

希望はこのことができます:)おかげで動作します

+0

を!しかし、私はこのケースで何がベストプラクティスであるか疑問に思っていますか?私はそれがオプション1だと思います。オプション2のために、私はSQLスクリプトを実行できません - >ステップが完了するまでこのステップをブロックします - > SQLスクリプト2を実行しますか? (試してもうまくいかない) – thotwielder

関連する問題