2012-12-05 34 views
1

使用pentaho水壺(也稱爲pdi),我有一個「連接行(笛卡爾乘積)」步驟,合併兩個數據流。水壺加入行 - 最接近的元素大於x

第一個和第二個流都附加了數字值。例如,

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

我想加入兩個流得到以下的輸出:

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

我會形容正確的輸出具有流1選擇哪個是大於該值的最小值從流1.

在Join Rows步驟中,我可以指定流2的值大於流1的值。不幸的是,這將產生以下結果不正確:

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

有,我應該使用,而不是在釜「加入行」不同的動作呢?或者我錯過了連接行步驟的設置?

注:我也看過使用流查找步驟,但它只適用於等於而不適用於我的邏輯。

謝謝。

回答

1

你已經走了一半。

  • 你有兩個輸入:流1(1,3,5)和流(2,4,6)
  • 您加入行(確保你在加入之前對它們進行排序)的值(流2)>值(流1)
  • 您排序上{值產生的流(流1),價值(流2) 這給你
(1, 2) 
(1, 4) 
(1, 6) 
(3, 4) 
(3, 6) 
(5, 6) 
  • 放入「添加值字段更改序列」步驟,並將「Init 序列如果以下字段的值更改爲」值(Stream1)。 所得物流是:
(Stream1, Stream2, result) 
(1, 2, 1) 
(1, 4, 2) 
(1, 6, 3) 
(3, 4, 1) 
(3, 6, 2) 
(5, 6, 1) 
  • 將一個過濾步驟和過濾器上的 「結果= 1」。
  • 來自過濾器「真」分支的結果流是取消結果。

我上傳 「example.ktr」 與溶液(I用於水壺4.3版本):

example.ktr