Talend技术问询:如何获取tFlowToIterate与tFileInputRegex处理行数?
解决Talend中获取tFileInputRegex处理行数的问题
问题原因分析
tFlowToIterate组件不会生成_NB_LINE变量,因此globalMap.get("tFlowToIterate_2_NB_LINE")返回null是正常情况。tFileInputRegex的_NB_LINE变量仅在组件完全执行完毕后才会写入globalMap,如果tJava_2在tFileInputRegex未执行完成时就运行(比如处于并行分支),就会拿到null。另外注意,Talend中_NB_LINE的实际类型是Long,而非Integer,强转Integer可能触发类型转换异常。
可行解决方案
方案1:确保tJava_2在tFileInputRegex执行完成后运行
- 调整Job流程,将
tJava_2放在tFileInputRegex下游的末尾位置,确保整个数据流处理完成后再执行tJava。 - 使用匹配组件实例名的变量名,同时做类型安全处理,代码示例:
Long lineCount = (Long) globalMap.get("tFileInputRegex_1_NB_LINE"); System.out.println("total is " + (lineCount == null ? 0 : lineCount));
方案2:用tAggregateRow统计实际处理行数
如果中间流有过滤、转换等操作,想要获取经过处理后的最终行数,推荐使用此方法:
- 在
tFileInputRegex和tFlowToIterate之间添加tAggregateRow组件。 - 在
tAggregateRow中设置聚合函数为Count,分组项留空(统计所有行数),将结果输出到新字段(比如totalLines)。 - 添加
tSetGlobalVar组件,将totalLines的值存入全局变量,示例代码:GlobalMap.put("processedLines", row1.totalLines);。 - 在
tJava_2中读取该全局变量:
Long total = (Long) globalMap.get("processedLines"); System.out.println("total processed lines: " + total);
内容的提问来源于stack exchange,提问作者Panadol Chong
相关产品推荐
相关产品推荐

