在使用Kettle时,如果给定的组件中不能满足我们的需求,可以使用“JavaScript脚本”组件来使用我们自定义的功能。
Kettle版本:8.0
背景:要将传入的时间字符串转换为时间戳(试了“字段选择”组件来修改元数据类型,但是达不到想要的效果)
如:传入“2019-09-05 10:14:16” ,得到结果“1567649656000”
这里我们可以通过编写Java代码实现这个转换功能:
package dateTrans;
import java.text.ParseException;
import java.text.SimpleDateFormat;
public class date2timestamp {
public static Long getTimestamp(String str){
Long timestamp = null;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
timestamp = sdf.parse(str).getTime();
} catch (
ParseException e) {
e.printStackTrace();
}
return timestamp;
}
}
然后将这个代码打成jar包,放在kettle安装目录的lib目录下,然后重启Spoon(一定要重启)
我们在“脚本”类别中选择“JavaScript脚本”组件,打开:
这里如何引入我们自定义的包?
要通过new一个对象来实现,这里的Packages为固定写法,dateTrans为包名,date2timestamp为类名
然后就可以通过这个对象来调用date2timestamp的静态方法getTimestamp了,将上一个步骤中的字段date作为参数(这里需要注意一下,这个步骤会对上一步骤中传入的每一行执行一次我们编写的转换)
然后定义一个变量timestamp来接收结果,并作为字段传入下一步骤。(在下一步骤中通过timestamp字段就可以获取转换后的每一个时间戳)
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICM38FdsYkRGZkRG9lcvx2bjxiNx8VZ6l2cs0TPB1kMnRUT1UkeNBDOsJGcohVYsR2MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL0UTNxIjMzATM1ATOwkTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)