You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PDI(Kettle)基于文件名日期筛选昨日批量文件的实现方法

解决Kettle(PDI)筛选昨日日期文件的方案

这问题我之前帮不少人解决过,核心是要动态生成昨日的MMDD格式字符串,然后把它融入到Kettle的文件匹配规则里,而不是用固定的正则硬匹配。下面给你具体的实现步骤:

1. 生成昨日的MMDD格式变量

首先你需要在Kettle中生成一个存储昨日日期(MMDD格式)的变量,这里推荐两种常用方法:

方法一:使用JavaScript步骤(灵活可控)

在转换中添加一个JavaScript步骤,写入以下代码来计算昨日的两位月日并设置变量:

// 自定义补零函数(兼容Kettle老版本的JS引擎)
function padZero(num) {
    return num < 10 ? '0' + num : '' + num;
}

// 计算昨日日期
var yesterday = new Date();
yesterday.setDate(yesterday.getDate() - 1);

// 提取两位月份和日期
var mm = padZero(yesterday.getMonth() + 1); // 月份从0开始,所以加1
var dd = padZero(yesterday.getDate());
var mmdd = mm + dd;

// 将结果存入作业变量(如果是转换内使用,可换用setVariable("YESTERDAY_MMDD", mmdd);)
parent_job.setVariable("YESTERDAY_MMDD", mmdd);

方法二:使用“获取系统信息”步骤(更简洁)

如果是在作业中操作,可以添加获取系统信息步骤,选择“昨天的日期”,然后设置输出格式为MMdd,并将结果存入变量YESTERDAY_MMDD。

2. 在文件输入步骤中使用变量筛选文件

有了昨日的MMDD变量后,就可以在文件输入步骤的“文件名”匹配规则里动态引用它,精准筛选符合要求的文件:

宽松匹配(兼容所有城市和门店编码)

如果你想匹配所有城市、所有门店且日期为昨日的csv/xls文件,可以用:

  • 对于csv文件:*${YESTERDAY_MMDD}*.csv
  • 对于xls文件:*${YESTERDAY_MMDD}*.xls

严格匹配(完全符合你的命名规则AAMMDDBBBB)

如果要严格匹配AA(城市编码)MMDD(日期)BBBB(门店编码).格式的命名规则,用正则表达式结合变量:

^[A-Z]{2}${YESTERDAY_MMDD}[A-Z0-9]{4}\.(csv|xls)$

这个正则会确保:

  • 前两位是大写字母(城市编码)
  • 中间四位是昨日的MMDD日期
  • 后四位是字母数字组合(门店编码)
  • 后缀只能是csv或xls

注意事项

  • 确保变量的作用域正确:如果是作业级变量,转换中需要勾选“共享变量”才能访问;如果是转换内变量,直接在当前转换内使用即可。
  • 测试时可以先把变量值固定成某个已知日期(比如0326),验证匹配规则是否生效,再切换成动态计算的昨日日期。

内容的提问来源于stack exchange,提问作者user9668308

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:57:30