1

pentaho ケトル (pdi とも呼ばれます) を使用して、2 つのデータ ストリームをマージする「行の結合 (デカルト積)」ステップを実行します。

1 番目と 2 番目のストリームの両方に数値が付加されています。例えば、

Stream 1 - Values 1, 3, 5
Stream 2 - Values 2, 4, 6

2 つのストリームを結合して、次の出力を取得したいと考えています。

(1, 2)
(3, 4)
(5, 6)

正しい出力とは、ストリーム 1 がストリーム 1 の値よりも大きい最小値を選択することです。

Join Rows ステップ内で、ストリーム 1 の値より大きい値を持つストリーム 2 を指定できます。残念ながら、これは次の誤った結果をもたらします。

(1, 2)
(1, 4)
(1, 6)
(3, 4)
(3, 6)
(5, 6)

Kettle の「Join Rows」の代わりに使用する必要がある別のステップはありますか? または、行の結合ステップの設定がありませんか?

注: Stream Lookup ステップの使用も検討しましたが、これは equals に対してのみ機能し、私のロジックでは機能しません。

ありがとう。

4

1 に答える 1

1

あなたはすでに道半ばです。

  • Stream1 (1, 3, 5) と Stream2(2, 4, 6) の 2 つの入力があります。
  • value(stream2) > value(stream1) で行を結合します (結合する前に必ず並べ替えてください)。
  • 結果のストリームを {value(Stream1), value(Stream2) でソートすると、
(1, 2)
(1, 4)
(1, 6)
(3, 4)
(3, 6)
(5, 6)
  • 「シーケンスを変更する値フィールドの追加」ステップを配置し、「次のフィールドの値が変更された場合にシーケンスを開始」を値 (Stream1) に設定します。結果のストリームは次のとおりです。
(Stream1, Stream2, result)
(1, 2, 1)
(1, 4, 2)
(1, 6, 3)
(3, 4, 1)
(3, 6, 2)
(5, 6, 1)
  • フィルター ステップを配置し、"result=1" でフィルター処理します。
  • フィルターの「true」ブランチからの結果ストリームは、望ましい結果です。

ソリューションとともに「example.ktr」をアップロードしました(Kettle 4.3.バージョンを使用しました):

たとえば .ktr

于 2012-12-07T12:17:41.140 に答える