Talend筛选过去1小时文件时tJavaRow报output_row解析错误求助
解决Talend tJavaRow组件"output_row无法解析"错误及1小时内文件筛选问题
问题描述
使用Talend的tFileList组件从远程虚拟机获取每日生成的文件,需求是仅筛选过去1小时内的文件进行后续处理。编写tJavaRow组件代码时遇到错误:"output_row cannot be resolved to a variable",尝试将output_row替换为tJavaRow_1或Output(依据tJavaRow_1的schema)后问题仍未解决。
附原tJavaRow_1代码:
((String)globalMap.get("tFileList_5_CURRENT_FILEPATH")) = input_row Date lastModifiedDate = TalendDate.parseDate("EEE MMM dd HH:mm:ss zzz yyyy", input_row.mtime_string); Date current_date = TalendDate.getCurrentDate(); if(TalendDate.diffDate(current_date, lastModifiedDate,"dd") <= 1) { output_row.abs_path = input_row.abs_path; }
错误排查及修复方案
1. 修正第一行语法错误
原代码第一行赋值方向完全错误,不能把input_row赋值给globalMap的取值结果,正确的赋值逻辑是将文件路径存入globalMap:
globalMap.put("tFileList_5_CURRENT_FILEPATH", input_row.abs_path);
这行语法错误会直接导致编译失败,进而引发后续output_row的识别问题。
2. 确保output_row与Schema正确关联
- 检查tJavaRow组件的输出Schema,确认已定义
abs_path字段,且数据类型与输入的abs_path一致(通常为String类型)。 - Talend中tJavaRow的输出对象默认就是
output_row,不要随意替换为其他名称,除非你手动修改了组件的输出别名。 - 如果Schema已正确配置仍报错,右键tJavaRow组件选择**"Generate Code"**,让Talend重新生成代码模板,强制关联output_row与Schema。
3. 修正时间筛选逻辑
原代码用"dd"(天)作为时间差单位,不符合"过去1小时"的需求,需改为"hh"(小时);同时需处理时区导致的时间差为负数的情况:
long hourDiff = TalendDate.diffDate(current_date, lastModifiedDate, "hh"); if(hourDiff >= 0 && hourDiff <= 1) { output_row.abs_path = input_row.abs_path; }
4. 完整修复后的代码
// 将当前文件路径存入globalMap(按需保留) globalMap.put("tFileList_5_CURRENT_FILEPATH", input_row.abs_path); Date lastModifiedDate = TalendDate.parseDate("EEE MMM dd HH:mm:ss zzz yyyy", input_row.mtime_string); Date current_date = TalendDate.getCurrentDate(); long hourDiff = TalendDate.diffDate(current_date, lastModifiedDate, "hh"); if(hourDiff >= 0 && hourDiff <= 1) { output_row.abs_path = input_row.abs_path; }
内容的提问来源于stack exchange,提问作者Ha Anh Nguyen
相关产品推荐
相关产品推荐

