Pentaho Data Integration如何在Filter Rows步骤使用自定义日期变量
解决方案
方案1(推荐,无需写脚本)
- 第一步:调整生成sixMoDate变量的转换
- 完成Calculator步骤得到Date类型的sixMoDate后,添加Select Values步骤,切换到「元数据」标签
- 选择sixMoDate字段,将类型修改为
String,格式指定为yyyy-MM-dd HH:mm:ss(可根据你的需求调整,只要固定统一即可) - 再执行Set Variable步骤,此时变量存储的是标准格式的日期字符串
- 第二步:调整业务转换的变量处理
- Get Variable步骤获取sixMoDate时,类型选择
String,不要直接选Date - 新增Select Values步骤,切换到「元数据」标签,选择sixMoDate字段,类型修改为
Date,格式填入上一步指定的yyyy-MM-dd HH:mm:ss - 后续Filter Rows步骤直接用Date类型的sixMoDate和CSV的日期字段比较即可
- Get Variable步骤获取sixMoDate时,类型选择
方案2(Modified JavaScript Value 脚本方案)
如果你要沿用当前直接存Date生成的变量格式,从错误日志可以看到你拿到的字符串格式是EEE MMM dd HH:mm:ss z yyyy(如Thu Dec 17 00:00:00 MST 2020),且星期、月份为英文缩写,需要指定对应格式和英文区域,脚本改为:
var output = str2date(SixMonthDate, "EEE MMM dd HH:mm:ss z yyyy", java.util.Locale.US);
设置output字段的类型为Date即可使用。
错误原因说明
- Pentaho中的所有变量本质都是字符串类型,你将Date类型字段存入变量时,Pentaho会自动调用JDK默认的
toString()方法将日期转为EEE MMM dd HH:mm:ss z yyyy格式的字符串,而非你预期的自定义格式 - 你直接在Get Variable步骤选Date类型时,Pentaho默认用
yyyy/MM/dd HH:mm:ss.SSS格式解析字符串,格式不匹配因此报错 - 之前JS转换失败是因为你指定的
MM/dd/yyyy格式和实际字符串格式完全不匹配,且没有指定英文区域无法解析英文的星期、月份缩写
内容的提问来源于stack exchange,提问作者Jote Muti
相关产品推荐
相关产品推荐

