在Pentaho数据集成Kettle中,如何在不同的数据上重复使用转换。

4
我正在使用Pentaho Kettle (PDI)处理数据流,需要创建一些转换来修改csv文件中的字段。每个转换只能作用于一个csv文件的字段。因此,第一个转换应该仅修改文件的第一列中的值,第二个转换应该在另一列上工作,以此类推。由于我花费了很多时间创建单个转换,因此希望将它们重复使用于同类数值的其他任务/转换中。如果您需要一个例子,我已经创建了一个转换,可以改进电话号码(以及其他内容)的质量。
以下是主要任务的“概括”想法:
我的问题在于如何通过转换传递数据。为了做到这一点,每次我都会使用“从结果复制行”步骤将数据放入结果表中。在完成所有修改后,我使用“将行放入结果”步骤将数据放入结果表中。
这里是一个示例(当然,真正的转换比这个更复杂)。
您可能知道,我们必须在“从结果复制行”中指定传入的字段,因此如果我必须在与不同文件一起工作的另一个任务/转换中使用此转换,则必须更改“从结果复制行”的模式。
也许有一种不同的方法来移动数据流,这可能比这种方式更容易。我还考虑过使用参数,但我不知道是否可以使用来自结果表的字段传递它们。这里还有另一个问题:“结果表是从转换中返回值的唯一方法吗?”
我还考虑在转换内并行执行所有转换,仅传递感兴趣的值和键,然后用“合并连接步骤”融合所有单个字段。这也存在同步问题。
因此,有人知道解决这个问题的好方法吗? 我认为存在一种标准方法来解决所有这些问题。

你考虑过使用“转换执行器”组件吗? - Marcus Rickert
这会解决我的问题吗?我的意思是,这不就像作业中的转换执行一样吗? - giogix
我认为优点在于处理与您的转换流字段相关的输入和输出参数方面。也许这样,您可以避免使用“从结果获取行”和“将行复制到结果”组件。 - Marcus Rickert
1个回答

4
我的问题的解决方案基于使用“映射(子转换)”步骤。 我们可以在另一个转换中调用所有的转换,而不是单独进行处理,并使用“映射(子转换)”步骤调用这些转换。以下是示例:
在这种情况下,每个步骤都必须指定要修改的输入字段。我们只需传递这些内容。以下是此类步骤的“输入”选项卡示例:
如您所见,我们必须指定主要转换中所称之为的字段,并且我们可以更改它以使其适应子转换(在本例中,“phone”字段变为“PHONE”)。“输出”标签上也必须指定输出字段,方式与输入相同。
子转换如下所示:
要获取传入字段,必须使用“映射输入规范”步骤,并且要将修改后的字段放在输出中,必须使用“映射输出规范”。在“映射输入规范”中,必须指定传入字段,该字段将始终与从现在开始使用此转换的任何时间相同。对这些字段的调整应在外部完成,在主要转换中,以便您可以重复使用子转换而不更改任何内容。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接