水壶加入行 - 最接近的元素大于x

时间:2012-12-05 14:03:00

标签: pentaho

使用pentaho kettle(也称为pdi),我有一个“Join Rows(笛卡尔积)”步骤,它合并了两个数据流。

第一个和第二个流都附加了数值。例如,

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

我想加入两个流来获得以下输出:

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

我会描述正确的输出,因为第1流选择的最小值大于第1流的值。

在Join Rows步骤中,我可以指定值2大于stream 1值的流2。不幸的是,这会产生以下错误结果:

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

我应该使用不同的步骤而不是在水壶中使用“Join Rows”吗?或者我错过了连接行步骤的设置?

注意:我还查看了使用Stream Lookup步骤,但它仅适用于equals而不适用于我的逻辑。

感谢。

1 个答案:

答案 0 :(得分:1)

你已经到了一半了。

  • 您有两个输入:Stream1(1,3,5)和Stream2(2,4,6)
  • 您在值(stream2)>上加入行(确保在加入之前对它们进行排序)值(流1)
  • 您在{value(Stream1),value(Stream2)上对结果流进行排序 这给你
(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)
  • 设置过滤步骤并过滤“result = 1”。
  • 来自过滤器“true”分支的结果流是所需的结果。

我上传了“example.ktr”解决方案(我使用的是Kettle 4.3。版本):

example.ktr