如何使用 Talend 动态读取由路径列表定义的文件?
How to dynamically read files defines by a list of paths with Talend?
首先,我是 Talend 的新手。这是我为了培训目的而做的模拟项目。
这是上下文:我有一个 CSV 文件(简称为 "CSV_IN"),其中有一堆指向包含我需要检索的信息的不同文件的路径。我无法更改文件,也无法更改文件树,因此我必须使用 "CSV_IN".
中设置的路径检索文件
所以,在 Talend Open Studio 中,我做了这样的事情:
似乎为 CSV 的每一行调用了 "tJavaRows",给出了迭代类型的输出而不是流。但是,如果我尝试直接从此处使用触发器,它会等待所有行完成,然后只发送一个触发器。
问题是我需要在 CSV_Input 中读取的每个路径,一个子作业将打开路径指向的文件并做一些事情(这里我只是打印内容,现在...... )
所以在绿色部分,我迭代输出并为每个路径发送一个 "OnComponentOK"。 "tJava_1" 几乎什么都不做。
但是当我 运行 这份工作时,我得到了这个 :
Blue SubJob 运行 4 次,这是我在 CSV_IN 中的路径数。但是为什么内容为空?
如果我改为打印上下文变量,我就有了 4 条路径,就像我应该的那样。
我觉得整个工作太...MacGyver-ish ...
有更好的方法吗?
编辑: 如果我使用 "tJavaRow" 而不是 "tJava",我可以使用 "input_row" 来打印文件。但是我不能用 "tJavaRow" 做我想做的事...无论如何,那是另一个问题...
但问题仍然存在:这是 "Proper" 的做法吗?
您的思路是正确的。
首先,您需要从 CSV 文件中获取数据。
然后,遍历行并执行作业中需要完成的任何操作。
我认为可以通过另一种方式完成的是使用 tJava 组件和 onComponentOk 触发器。或者,我会这样做:
inputCSV_1 --- 遍历文件路径/名称 --> inputCSV_2 (使用来自第一个 inputCSV 的数据)-- 用于做你的事情的行 --> write or end
您可以从行变量(例如 row1.filename)中访问第一个 inputCSV 的文件名,并使用它打开第二个 inputCSV 中的所有内容。不需要 onComponentOk。
首先,我是 Talend 的新手。这是我为了培训目的而做的模拟项目。
这是上下文:我有一个 CSV 文件(简称为 "CSV_IN"),其中有一堆指向包含我需要检索的信息的不同文件的路径。我无法更改文件,也无法更改文件树,因此我必须使用 "CSV_IN".
中设置的路径检索文件所以,在 Talend Open Studio 中,我做了这样的事情:
似乎为 CSV 的每一行调用了 "tJavaRows",给出了迭代类型的输出而不是流。但是,如果我尝试直接从此处使用触发器,它会等待所有行完成,然后只发送一个触发器。
问题是我需要在 CSV_Input 中读取的每个路径,一个子作业将打开路径指向的文件并做一些事情(这里我只是打印内容,现在...... )
所以在绿色部分,我迭代输出并为每个路径发送一个 "OnComponentOK"。 "tJava_1" 几乎什么都不做。
但是当我 运行 这份工作时,我得到了这个 :
Blue SubJob 运行 4 次,这是我在 CSV_IN 中的路径数。但是为什么内容为空?
如果我改为打印上下文变量,我就有了 4 条路径,就像我应该的那样。
我觉得整个工作太...MacGyver-ish ... 有更好的方法吗?
编辑: 如果我使用 "tJavaRow" 而不是 "tJava",我可以使用 "input_row" 来打印文件。但是我不能用 "tJavaRow" 做我想做的事...无论如何,那是另一个问题...
但问题仍然存在:这是 "Proper" 的做法吗?
您的思路是正确的。
首先,您需要从 CSV 文件中获取数据。
然后,遍历行并执行作业中需要完成的任何操作。
我认为可以通过另一种方式完成的是使用 tJava 组件和 onComponentOk 触发器。或者,我会这样做:
inputCSV_1 --- 遍历文件路径/名称 --> inputCSV_2 (使用来自第一个 inputCSV 的数据)-- 用于做你的事情的行 --> write or end
您可以从行变量(例如 row1.filename)中访问第一个 inputCSV 的文件名,并使用它打开第二个 inputCSV 中的所有内容。不需要 onComponentOk。