我正在使用Kettle(PDI)开展项目。 我必须输入多个.csv或.xls文件并将其插入DB。
文件名是AAMMDDBBBB,其中AA是城市的代码,BBBB是商店的代码。 MMDD是日期格式,如MM-DD。例如LA0326F5CA.csv。
我在输入文件步骤中使用的Regexp看起来像LA.\*\\.csv
或DT.*\\.xls
,它返回所有文件以将其插入到数据库中。
您能指出我如何选择昨天的文件(基于文件名的MMDD)。
答案 0 :(得分:0)
因为你需要一些"复杂的"在您选择的逻辑中,您不能仅基于正则表达式进行过滤。我建议您先读取所有文件名,然后根据" age"过滤文件名,然后根据所选文件名读取文件。
详细说明:
将Get File Names
步骤与当前使用的相同正则表达式LA.*\.csv
或DT.*\.xls
)一起使用。使用像LA \ d \ d \ d \ d ...... csv这样的Regexp,你可能会在那个阶段更加严格,以确保MM和DD是数字,而DDDD恰好是4个字符。
根据日期过滤。您可以使用Java Filter
执行此操作,但使用Javascript Script
计算" age"会更容易一个数量级。你的文件,然后使用Filter rows
只保留昨天的文件。
要计算文件的年龄,请提取MM和DD,您可以使用(其他方法可用):
var regexp = filename.match(/..(\d\d)(\d\d).*/);
if(regexp){
var age = new Date() - new Date(2018, regexp[1], regexp[2]);
age = age /1000 /60 /60 /24;
};

如果您不熟悉Javascript regexp:匹配将进行测试 针对正则表达式的文件名并保留括号的值 在数组中。如果测试成功(必须明确检查) 避免运行时失败),使用匹配的值来计算 相应的日期,并减去今天的日期以获得年龄。 此年龄以毫秒为单位,以天为单位进行转换。
Text File Input
和Excel Input
与Accept file from previous step
选项一起使用。请注意,CSV Input
没有此选项,但功能更强大的Text File Input
有。答案 1 :(得分:0)
我改进了Java Filter with Modified Java Script Value,现在工作正常。 另一个问题是,如何提高当前转换的性能和速度(现在我有2个城市的2个转换)?我的插入更新使我的变形变慢,需要差不多1小时和30分钟来处理500k行数据,有很多字段(300mb)和我的数据不仅如此,如果它工作得更快,我的公司喜欢用它,我要去用10TB的数据/年和它的大量的trans和行来做。我需要消化它