首先,我是Talend的新人。这是我为培训目的而做的模拟项目。
这里是上下文:我有一个CSV文件(简称为#34; CSV_IN")我有一堆路径指向包含我需要检索的信息的不同文件。我无法更改文件,也无法更改文件树,因此我必须使用" CSV_IN"中设置的路径检索文件。
所以,在Talend Open Studio中,我做了类似的事情:
似乎" tJavaRows"为CSV的每一行调用,给出Iteration类型的输出而不是Flow。但是如果我尝试直接从这里使用触发器,它会等待所有行完成,然后再发送一个触发器。
问题是我需要在CSV_Input中读取FOR FORACH路径,subJob将打开路径指向的文件并执行一些操作(此处我只是打印内容,暂时...)
所以在绿色部分,我迭代输出并发送一个" OnComponentOK"对于每条路径。 " tJava_1"确实没有别的。
但是当我运行Job时,我明白了:
Blue SubJob运行4次,这是我在CSV_IN中拥有的路径数。但为什么内容为空?
如果我打印上下文变量,我有4条路径,就像我应该的那样。
我觉得整个工作也是...... MacGyver-ish ...... 有更好的方法吗?
编辑:如果我使用" tJavaRow"而不是" tJava",我可以使用" input_row"打印文件。但是,我不能用" tJavaRow"做我想做的事。 ......无论如何,这又是另一个问题......
但问题仍然存在:这是"正确的"这样做的方式?
答案 0 :(得分:0)
你在这里思路正确。
首先,您需要从CSV文件中获取数据。
然后,迭代行并完成工作中需要完成的任何事情。
我认为可以用另一种方式完成的是使用tJava组件和onComponentOk触发器。或者,我会这样做:
inputCSV_1 ---遍历文件路径/名称 - > inputCSV_2(包含来自第一个inputCSV的数据) - 用于执行操作的行 - >写或结束
您可以从行变量(例如row1.filename)中的第一个inputCSV访问文件名,并使用它来打开第二个inputCSV中的所有内容。不需要onComponentOk。