2017-02-27 18 views
0

次のようにTalend ETLジョブを開発しています。Numeric.Sequenceルーチンの戻り値をコンテキスト変数に格納する方法

私は毎日のデータを抽出している場所からソースデータベースを持っています。私のターゲットテーブルは、2つの列id、nameを含んでいます。 idカラムの場合、私はNumeric.Sequence( "s1"、1,1)ルーチンから値を生成しています。しかし、私の問題は、私が開始値から値を生成している、つまりNumeric.Sequenceルーチンで提供されているジョブを実行しているときです。しかし、私は最後に生成された値を開始値として取得したい。

解決策:テーブルから最大IDを抽出することで実現できますが、テーブルを使用したくありません。 Numeric.Sequenceルーチンで生成されたmax id値をコンテキスト変数に格納し、ジョブを実行するときにその値を開始値として使用したいとします。私はしようとしましたが、それは新鮮な価値だけで生成しています。

私はTalendの利用可能なオプションをすべてお知らせください。

+1

才能は、オブジェクト指向のツールです。次のジョブ実行のシーケンス開始値はこの実行では設定できません。 globalMapにオブジェクトを作成して次のジョブのシーケンス開始値を格納すると、次のジョブ実行中にそのglobalMapが再初期化されます。あなたができることは、次のジョブ実行の開始値をテキストファイルに保存し、次のジョブ実行時にそのファイルを読み込むことです。 – Viki888

答えて

0

ジョブを実行するたびにジョブコンテキストがリセットされます。 Javaプログラムを実行していることを覚えておいてください。変数は、プログラムが生存しているときだけ保持されます。

ソリューションは、データベース配列(postgreSQLの持つ例)を使用することです:

  • がでyoutは、ターゲットテーブルのidカラム
  • 使用 "のnextval( '' :: regclassデータ)" にシーケンスを追加するには、出力コンポーネント(下図参照)

nextval_example

関連する問題