2

変換のすべてのステップが並行して実行され、Pentaho でこの動作を変更する方法がないことは明らかです。

そのため、特定のフィールド (ファイル名から読み取る) をチェックし、そのファイルを処理するタスク (マッピング - サブ変換) を決定するスイッチ タスクのシナリオがあります。これは、各マッピング タスクの前後に、DB レコードの更新、電子メールの送信などのボイラープレート タスクを実行する一般的なロジックの一部です。

タスクを切り替える 問題は、「ACCC014」ファイルがない場合、この変換を実行できないことです。すべてのタスクが並行して実行されるため、それが不可能であることは理解しています。そのため、2 つ目の問題が発生します。いくつかのマッピング内で、XML ファイルが作成されます。また、Pentaho が空のデータでこのタスクを実行している場合でも、XML 出力ファイルの作成を回避する方法が見つかりません。

理論的にはシリアルなので、この切り替えロジックをジョブに移動することを考えましたが、この種の区別を行う条件付きステップは見つかりませんでした。

また、メタ データ インジェクション タスクも検討しましたが、それが進むべき道だとは考えていません。各サブトランスフォーメーションは、実際には異なる仕事をします。いくつかのテーブルを更新するものもあれば、ファイルを書き込むものもあれば、異なるデータベース間でデータを移動するものもあります。それらはすべて入力として何らかのファイルを受け取り、send_email フラグとメッセージ文字列を返します。他には何もありません。

私たちが望んでいることを行う方法はありますか?または、デフォルトの入力/出力に基づいてロジックの一部を再利用する方法はありませんか?

編集:ACCC014変換を追加。はい、「開始時にファイルを作成しない」オプションがチェックされています。

ここに画像の説明を入力

4

1 に答える 1

5

Transformation Executorステップ ( http://wiki.pentaho.com/display/EAI/Transformation+Executor )を使用して、条件付きで変換を実行できます。私はこのステップを実際に使用したことがないので、安定性やパフォーマンスについては何も言えません。

主な変換:

親変換を次のように設定します。
主な変形設定例 インジェクター ステップについて: バージョン 5.2 では、「結果行」タブで定義されていたにもかかわらず、サブ変換で作成されたフィールドを取得できなかったため、これらすべてを定義する必要がありました。代わりに Injector ステップのフィールド。現在のバージョンでまだ必要かどうかはわかりません。

Transformation Executor の可能な調整:

  1. The number of rows to send to the transformationおそらく、タブの値を変更する必要がありますRow grouping。N 行ごとに変換を再実行するのではなく、すべての行を一度に送信するには、値を 0 に設定します。

  2. サブトランスフォーメーションの出力を読み取る場合は、次のステップへのホップを作成する際に、[この出力には実行後の結果行が含まれます] オプションを選択します。 出力タイプの選択

サブトランスフォーメーション:

ここでおそらく必要になる唯一の変更は、マッピングの入力と出力をGet rows from resultandに置き換えることCopy rows to resultです。

5.2 の既知の問題: ジョブ エグゼキュータは、「行を結果にコピー」ステップからではなく、最後に作成されたステップからサブ変換の出力を読み取るようです。そのため、サブトランスフォーメーションにいくつかのステップを追加した場合は、出力を読み取ることが期待されるステップを再作成することを忘れないでください。「行を結果にコピー」を選択し、それを切り取り、貼り付けて、再度貼り付けます。ホップを作成します。

于 2016-11-01T17:26:02.370 に答える