我已经构建了一个从文件中读取数据的作业,并根据特定列的唯一数据将数据集拆分为多个文件。
我能够通过以下工作实现这一要求:
现在从这个将输出分成多个文件的工作,我想要的是添加一个子作业,它会给我两列。
在第一列中,我想要在我的主作业和第二列中创建的文件的名称,我想要计算每个创建的输出文件所具有的行数。
为了达到这个目的,我使用了tflowmeter并捕获了计数结果我使用了tFlowmeterCatcher,它给出了对应的输出文件的每行计数的正确结果,但是给出了所有文件中的最后一个文件名我为计数而生成的。
如何获取正确的文件名和相应的行数。
答案 0 :(得分:1)
如果您使用以下说明,您的工作最终会有其他组件,如下所示:
在main上的 tFileOutputDelimited 后直接使用 tJavaFlex 。它应该是这样的:
Start Code: int countRows = 0;
Main Code: countRows = countRows + 1;
End Code: globalMap.put("rowCount", countRows);
将此组件 OnComponentOk 与新子工作的第一个组件相关联。此子作品包含 tFixedFlowInput , tJavaRow 和 tBufferOutput 。
tFixedFlowInput 就在这里,以便可以连接 OnComponentOk ,不需要改变任何内容。在 tJavaRow 中,您输入以下内容:
output_row.filename = (String)globalMap.get("row7.newColumn");
//or whatever is your row variable where the filename is located
output_row.rowCount = (Integer)globalMap.get("rowCount");
在架构中,添加以下元素:
现在只需在第一个子作品的末尾添加 tBufferOutput 。
现在,使用 tBufferInput 组件以及处理和存储数据所需的任何组件创建另一个新的子工作站。使用 tBufferInput 组件将 OnSubjobOk 连接到作业的第一个组件。我使用 tLogRow 来显示结果(使用我随机创建的假数据):
.---------------+--------.
| LogFileData |
|=--------------+-------=|
|filename |rowCount|
|=--------------+-------=|
|fileblerb1.txt |27 |
|fileblerb29.txt|14 |
|fileblerb44.txt|20 |
'---------------+--------'
注意:请注意,如果您向文件添加标头({strong> tFileOutputDelimited 中已检查Include Header
),则可能需要更改作业(只需设置int countRows = 1;
或您需要的任何内容。我没有测试这个案例。
答案 1 :(得分:0)
您可以使用tFileproperties组件存储在第一个子作业之后在中间Excel中生成的文件名,并在第二个子作业中使用此Excel。
谢谢!