【问题标题】:How to dynamically read files defines by a list of paths with Talend?如何使用 Talend 动态读取由路径列表定义的文件?
【发布时间】:2017-11-03 06:09:28
【问题描述】:

首先,我是 Talend 的新手。这是我为培训目的而做的一个模拟项目。

这里是上下文:我有一个 CSV 文件(简称为“CSV_IN”),其中有一堆不同文件的路径,其中包含我需要检索的信息。我无法更改文件,也无法更改文件树,因此我必须使用“CSV_IN”中设置的路径检索文件。

所以,在 Talend Open Studio 中,我做了这样的事情:

似乎为 CSV 的每一行调用了“tJavaRows”,从而提供了一种迭代类型的输出而不是流。但是,如果我尝试直接从这里使用触发器,它会等待所有行完成,然后才发送一个触发器。

问题是我需要在 CSV_Input 中读取 FOR EACH 路径,子作业将打开路径指向的文件并做一些事情(这里我只是打印内容,现在...)

所以在绿色部分,我迭代输出并为每个路径发送一个“OnComponentOK”。 “tJava_1”实际上什么都不做。

但是当我运行作业时,我得到了这个:

Blue SubJob 运行 4 次,这是我在 CSV_IN 中的路径数。但是为什么内容为空?

如果我打印上下文变量,我应该有 4 条路径。

我觉得整个工作太……MacGyver-ish…… 有没有更好的方法来做到这一点?

编辑:如果我使用“tJavaRow”而不是“tJava”,我可以使用“input_row”来打印文件。但我不能用“tJavaRow”做我想做的事......无论如何,这是另一个问题......

但问题仍然存在:这是“正确”的做法吗?

【问题讨论】:

    标签: talend


    【解决方案1】:

    你的思路是正确的。

    首先,您需要从 CSV 文件中取出数据。

    然后,遍历行并执行作业中需要完成的任何事情。

    我认为可以通过另一种方式完成的是使用 tJava 组件和 onComponentOk 触发器。或者,我会这样做:

    inputCSV_1 --- 遍历文件路径/名称 --> inputCSV_2(使用来自第一个 inputCSV 的数据) -- 用于处理您的工作的行 --> 写入或结束

    您可以从行变量(例如 row1.filename)中访问第一个 inputCSV 的文件名,并使用它打开第二个 inputCSV 中的所有内容。不需要 onComponentOk。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多