【问题标题】:Talend: Triggering subjobs in an iterateTalend:在迭代中触发子作业
【发布时间】:2014-08-22 01:25:41
【问题描述】:

我有一个 Talend 工作,我正在尝试重构它以迭代运行。原始作业会将一个值放入 prejob->tJava 中的全局映射中,然后 fileInput 使用该值打开一个文件 (tFileInputDelimited) 并在子作业中执行 rowMain。 fileInput 还有一个 OnSubjobOk 触发另一个 fileInput,它有一系列 rowMain 进程。

我现在正在尝试重构作业,以便 tJava 预作业设置一个列表并将其添加到 globalMap。然后我使用迭代器迭代到 tJavaFlex,然后迭代到触发第一个子作业的 fileInput。但是,我无法从第一个子作业触发第二个子作业,并且想知道如何从 1 个迭代器迭代整个系列的子作业。

我如何设计这样的工作?

这是原始作业的示例。它需要一个上下文参数来指定一个文件名,然后由“读取演示”使用。我想遍历每个文件的所有子作业。该作业需要完成第一个子作业,然后完成第二个、第三个和第四个子作业,然后再使用下一个文件名进行下一次迭代。如果未提供文件名,则 prejob 只是在文件名上设置默认值,并且没有必要。

我尝试了一种方法来使用 tIterate through 进入“读取演示”组件,但无法使其按需要工作。

【问题讨论】:

  • 你能张贴你的工作截图吗?它使提供帮助变得相当容易。您可能还想重新考虑如何使用 prejob 组件。
  • 复制您的工作,将该 globalvar 设为上下文变量,然后您可以使用 tLoop 等通过更改上下文变量多次调用您的工作。
  • @ydaetskcoR - 添加了屏幕截图。
  • 代替 OnSubJobOK 只需使用 tFlowToIterate -> Iterate 链接来触发读取价格 CSV。但是请记住,在作业中无法轻松更改读取价格 CSV 文件名。您最好将它和以下部分移动到单独的作业中。并使用 Iterate 链接调用该作业。
  • 啊完美@balazs。那讲得通。您想将其发布为答案以便我接受吗?

标签: talend


【解决方案1】:

代替 OnSubJobOK 只需使用 tFlowToIterate -> Iterate 链接来触发读取价格 CSV。

请注意,读取价格 CSV 文件名无法在作业中轻松更改。添加迭代链接时,整个 readCSV 将成为子作业的一部分,动态更改它很痛苦。你仍然有几个选择:

  • 将读取的 CSV 部分移至接受文件名的单独子作业。
  • 使用fileInputStream来读取文件,这个fileInputStream可以动态改变。
  • 在 Tjava 上迭代并使用 On*OK 组件触发当前读取的 CSV。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多