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

jfn*_*eis 2 pentaho kettle pdi pentaho-spoon pentaho-data-integration

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

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

切换任务 问题是:如果我们没有“ACCC014”文件,则无法执行此转换。我知道这是不可能的,因为所有任务都是并行执行的,所以出现了第二个问题:在一些映射中,创建了 XML 文件。甚至当 Pentaho 使用空数据执行此任务时,我们也无法找到避免创建 XML 输出文件的方法。

我们考虑将这个 switch 逻辑移到工作中,因为理论上它是串行的,但发现没有条件步骤可以进行这种区分。

我们还研究了元数据注入任务,但我们不认为这是可行的方法。每个子转换执行真正不同的工作。其中一些更新一些表,一些写入文件,另一些在不同的数据库之间移动数据。它们都接收一些文件作为输入并返回一个 send_email 标志和一个消息字符串。没有其他的。

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

编辑:添加 ACCC014 转换。是的,选中了“开始时不创建文件”选项。

在此处输入图片说明

And*_*sha 5

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

主要改造:

像这样设置你的父转换:
主要转换设置示例 关于注入器步骤:在 5.2 版本中,即使在“结果行”选项卡上定义了字段,我也无法获取在子转换中创建的字段,因此我不得不在注入器步骤中定义所有这些字段。不确定,在当前版本中是否仍然需要。

Transformation Executor 的可能调整:

  1. 可能您想更改选项卡上的The number of rows to send to the transformationRow grouping:将其设置为 0 以便一次发送所有行,而不是每 N 行重新执行一次转换。

  2. 如果要读取子转换的输出,请在创建跳转到后续步骤时选择“此输出将包含执行后的结果行”选项: 选择输出类型

子变换:

您在这里可能需要的唯一更改是将您的映射输入和输出替换为Get rows from resultand Copy rows to result

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