现在很清楚,转换中的所有步骤都是并行执行的,而且Pentaho无法改变这种行为。
鉴于此,我们有一个具有切换任务的场景,该任务检查特定字段(从文件名读取)并决定哪个任务(映射 - 子转换)将处理该文件。这是通用逻辑的一部分,在每个映射任务之前和之后,执行一些样板任务,如更新DB记录,发送电子邮件等。
问题是:如果我们没有" ACCC014"文件,这个转换无法执行。我理解它是不可能的,因为所有任务都是并行执行的,所以第二个问题出现了:在SOME映射中,创建了XML文件。即使Pentaho使用空数据执行此任务,我们也无法找到避免XML输出文件创建的方法。
我们考虑过将这个开关逻辑移动到工作中,就像在理论上它是连续的一样,但是没有找到可以做这种区分的条件步骤。
我们也关注Meta Data Injection任务,但我们并不相信它的发展方向。每个子转换都会完成不同的工作。其中一些表更新了一些表,另一些表写入文件,其他表在不同数据库之间移动数据。所有这些都接收一些文件作为输入并返回send_email标志和消息字符串。没别了。
有没有办法做我们愿意做的事情?或者没有办法根据默认输入/输出重用部分逻辑?
编辑:添加ACCC014转换。是的,"不要在开始时创建文件"选项已选中。
答案 0 :(得分:4)
您可以使用Transformation Executor
步骤(http://wiki.pentaho.com/display/EAI/Transformation+Executor)来有条件地执行转换。虽然我还没有真正使用过这个步骤,所以我不能说它的稳定性或性能。
主要转型:
设置您的父转换,如下所示:
关于Injector步骤:在5.2版本中,我无法在子变换中创建字段,即使它们是在“结果行”选项卡上定义的,因此我必须在Injector步骤中定义所有这些字段。
不确定,如果在当前版本中仍然有必要。
Transformation Executor的可能调整:
您可能希望更改The number of rows to send to the
transformation
标签上的Row grouping
值:将其设置为0以便
一次发送所有行而不是重新执行转换
每N行。
<强>副变换:强>
您在此处可能需要的唯一更改是按Get rows from result
和Copy rows to result
替换您的映射输入和输出:
5.2中的已知问题: 似乎作业执行程序不是从“将行复制到结果”步骤,而是从最近创建的步骤中读取子转换的输出。因此,如果您已经为子转换添加了一些步骤,请记住重新创建您希望从中读取输出的步骤:只需选择“将行复制到结果”,将其剪切,粘贴回来并重新创造跳。