Java脚本处理数据
当你在查这个问题时,说明大家还都是了解java开发的。其实最初使用kettle时还没注意到可以直接使用java代码进行数据处理,因为涉及到筛选数据,然后就各种添加字段处理、过滤等转换,写了十几个,结果当发现可以用java处理时,直接先写好java方法,然后打包成jar后丢到kettle里面就可以直接使用了,顿时觉得太爽了!哈哈哈
这里我贴了一个我自己写的用来格式化日期的方法,供亲参考学习,详细代码可点击下载。
准备工作
- 先写好java方法(这里根据自己实际情况自己写方法就行,我这边只说明方法,供参考)
注:java文件要指定包名
- 测试java编译是否成功(需要先在java文件写好main方法)
E:\code\foresee\kt\java>java qiuqing.FormatUtils
- 将java方法编译后打包成jar文件
打开cmd,根据自己实际情况执行命令
E:\code\foresee\kt\java>javac qiuqing\FormatUtils.java
E:\code\foresee\kt\java>jar cvf qiuqing-format.jar qiuqing\FormatUtils.class
- 测试jar包是否打包成功
需要用压缩工具打开jar包,修改jar包里面(qiuqing-format.jar\META-INF\MANIFEST.MF)文件,添加Main-Class配置,然后覆盖保存,最后打开cmd,执行cmd运行测试。
Manifest-Version: 1.0
Created-By: 1.8.0_51 (Oracle Corporation)
Main-Class: qiuqing.FormatUtils
5.将打包好的jar包放到kettle目录下的lib文件夹内, 重新启动kettle
使用说明
转换中添加一个java脚本,双击打开
代码调用(以下代码仅供参考)
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import qiuqing.FormatUtils;
public boolean processRow(StepMetaInterface smi, StepDataInterface sdi) throws KettleException {
Object[] r = getRow();
if(r == null){
setOutputDone();
return false;
}
try{
String timeLocal = get(Fields.In,"time_local").getString(r);
String request = get(Fields.In,"request").getString(r);
String httpReferer = get(Fields.In,"http_referer").getString(r);
String serverName = get(Fields.In,"server_name").getString(r);
String httpUserAgent = get(Fields.In,"http_user_agent").getString(r);
get(Fields.Out,"time_local").setValue(r,FormatUtils.formatDateToString(timeLocal));
get(Fields.Out,"request").setValue(r,FormatUtils.formatUrlParam(serverName,request));
get(Fields.Out,"http_referer").setValue(r,FormatUtils.formatUrlParam(serverName,httpReferer));
get(Fields.Out,"http_user_agent").setValue(r,FormatUtils.formatHttpUserAgent(httpUserAgent));
putRow(data.outputRowMeta, r);
}catch(ParseException e){
}
return true;
}