PDI / Kettle:避免文件创建或映射(子转换)执行

时间:2016-10-27 13:40:41

标签: pentaho kettle pdi pentaho-spoon pentaho-data-integration

现在很清楚,转换中的所有步骤都是并行执行的,而且Pentaho无法改变这种行为。

鉴于此,我们有一个具有切换任务的场景,该任务检查特定字段(从文件名读取)并决定哪个任务(映射 - 子转换)将处理该文件。这是通用逻辑的一部分,在每个映射任务之前和之后,执行一些样板任务,如更新DB记录,发送电子邮件等。

switch task 问题是:如果我们没有" ACCC014"文件,这个转换无法执行。我理解它是不可能的,因为所有任务都是并行执行的,所以第二个问题出现了:在SOME映射中,创建了XML文件。即使Pentaho使用空数据执行此任务,我们也无法找到避免XML输出文件创建的方法。

我们考虑过将这个开关逻辑移动到工作中,就像在理论上它是连续的一样,但是没有找到可以做这种区分的条件步骤。

我们也关注Meta Data Injection任务,但我们并不相信它的发展方向。每个子转换都会完成不同的工作。其中一些表更新了一些表,另一些表写入文件,其他表在不同数据库之间移动数据。所有这些都接收一些文件作为输入并返回send_email标志和消息字符串。没别了。

有没有办法做我们愿意做的事情?或者没有办法根据默认输入/输出重用部分逻辑?

编辑:添加ACCC014转换。是的,"不要在开始时创建文件"选项已选中。

enter image description here

1 个答案:

答案 0 :(得分:4)

您可以使用Transformation Executor步骤(http://wiki.pentaho.com/display/EAI/Transformation+Executor)来有条件地执行转换。虽然我还没有真正使用过这个步骤,所以我不能说它的稳定性或性能。

主要转型:

设置您的父转换,如下所示:
Main transformation set-up example 关于Injector步骤:在5.2版本中,我无法在子变换中创建字段,即使它们是在“结果行”选项卡上定义的,因此我必须在Injector步骤中定义所有这些字段。 不确定,如果在当前版本中仍然有必要。

Transformation Executor的可能调整:

  1. 您可能希望更改The number of rows to send to the transformation标签上的Row grouping值:将其设置为0以便 一次发送所有行而不是重新执行转换 每N行。

  2. 如果要读取子转换的输出,请选择“此 输出将包含执行后的结果行“选项时 创建到后续步骤的跃点: Selecting output type

  3. <强>副变换:

    您在此处可能需要的唯一更改是按Get rows from resultCopy rows to result替换您的映射输入和输出:

    5.2中的已知问题: 似乎作业执行程序不是从“将行复制到结果”步骤,而是从最近创建的步骤中读取子转换的输出。因此,如果您已经为子转换添加了一些步骤,请记住重新创建您希望从中读取输出的步骤:只需选择“将行复制到结果”,将其剪切,粘贴回来并重新创造跳。