如何动态读取文件由Talend的路径列表定义?

时间:2017-11-02 12:46:23

标签: talend

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

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

所以,在Talend Open Studio中,我做了类似的事情:

enter image description here

似乎" tJavaRows"为CSV的每一行调用,给出Iteration类型的输出而不是Flow。但是如果我尝试直接从这里使用触发器,它会等待所有行完成,然后再发送一个触发器。

问题是我需要在CSV_Input中读取FOR FORACH路径,subJob将打开路径指向的文件并执行一些操作(此处我只是打印内容,暂时...)

所以在绿色部分,我迭代输出并发送一个" OnComponentOK"对于每条路径。 " tJava_1"确实没有别的。

但是当我运行Job时,我明白了:

enter image description here

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

如果我打印上下文变量,我有4条路径,就像我应该的那样。

我觉得整个工作也是...... MacGyver-ish ...... 有更好的方法吗?

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

但问题仍然存在:这是"正确的"这样做的方式?

1 个答案:

答案 0 :(得分:0)

你在这里思路正确。

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

然后,迭代行并完成工作中需要完成的任何事情。

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

inputCSV_1 ---遍历文件路径/名称 - > inputCSV_2(包含来自第一个inputCSV的数据) - 用于执行操作的行 - >写或结束

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