我正在与Pentaho Kettle(PDI)合作,我试图管理一个流程,其中有一些转换应该像函数那样工作。我会更具体。我已经创建了一些转换,可以对某些csv文件的几个字段进行修改。每个转换仅作用于csv文件的一个字段。因此,第一个转换应该修改值,例如,仅从文件的第一列,第二个转换应该在另一个列上工作,依此类推。由于花费了一些时间来创建每一个转换,我希望将其重用于其他工作/转换使用相同类型的值。如果你想要一个例子我已经创建了一个转换,可以改善电话号码(和许多其他人)的质量。 这是"将军"主要工作的想法:
我的问题是关于通过转换传递数据。要做到这一点,每次,我都将数据放在结果表中,使用"复制结果行"步。完成所有修改后,我使用"将行放到结果表中将数据放入结果表中#34;步。 这里只是一个样本(当然真正的转换比这个更复杂)。
正如您可能知道的那样,我们必须在"从结果"中复制行中指定即将到来的字段,所以如果我必须在另一个使用不同文件的作业/转换中使用此转换,我必须更改"从结果"复制行的模式步骤
可能存在移动数据流的不同方式,这可能比这更容易。我也考虑过使用参数,但我不知道是否可以使用来自结果表的字段来传递它们。而另一个问题是:"结果表是从转换中返回值的唯一方法吗?"
我还考虑在转换中并行执行所有转换,只传递感兴趣的值和键,然后使用"合并连接步骤融合所有单个字段&# 34 ;.这一个也是一个同步问题。 所以有谁知道解决这个问题的好方法? ......我认为它存在一种标准方法来完成所有这些......
答案 0 :(得分:4)
我的问题的解决方案是基于使用“映射(子转换)”步骤。 在工作中工作,我们可以调用另一个转换中的所有转换,并使用“映射(子转换)”步骤调用它们。这是一个示例:
在这种类型的每一步中,我们必须指定我们想要修改的输入字段。我们可以通过那些。以下是此类步骤的“输入”标签的示例:
正如您所看到的,我们必须指定在主变换中调用的字段,并且我们可以更改它以在子变换中调整它(在这种情况下,字段“phone”变为“PHONE”)。 我们还必须在“输出”选项卡中指定输出字段,就像我们为输入完成的那样。
子转换如下所示:
要获取传入字段,必须使用“映射输入规范”步骤,并将修改后的字段放在输出中,您必须使用“映射输出规范”。在“映射输入规范”中,您必须指定哪些是传入字段,从现在开始使用此转换时,这些字段将始终相同。对这些字段的调整应该在主变换之外进行,这样你就可以重用子变换而不改变任何东西。