title: kettle笔记-java脚本的使用
tags: 新建,模板,小书匠
renderNumberedHeading: true
grammar_cjkRuby: true
java脚本
使用kettle进行ETL过程中不能避免一些复杂类型数据的处理,如json解析,数据转换...,这些kettle中也存在一些相应的组件可以使用,但是作为开发人员,最相信的还是自己编写的代码。所以这里简单的使用java脚本进行简单的处理一些数据,给读者提供一个思路。有什么建议和问题欢迎留言。
例子
-
创建一个转换
-
使用java脚本创建一个json格式的数据
-
要点
- 开发过程中技巧:将逻辑代码放在自己的IDE中开发完成后复制到脚本组件中
- Main 主程序下面是去除多余注释的代码片段
public boolean processRow(StepMetaInterface smi, StepDataInterface sdi) throws KettleException { if (first) { first = false; } //获取行数据 Object[] r = getRow(); if (r == null) { setOutputDone(); return false; } r = createOutputRow(r, data.outputRowMeta.size()); //将处理后的数据重新放回行数据中 putRow(data.outputRowMeta, r); return true; }
- 脚本右侧的类与代码片段
- 类就是正在编写的脚本
- 代码片段Common use(常用)
- Main主程序
- getVariable 获取线程中变量
- Step logging 打印日志
- 不同的日志级别
- input field 输入字段
- out field 输出字段
-
实例:
-
生成json
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; public boolean processRow(StepMetaInterface smi, StepDataInterface sdi) throws KettleException { if (first) { first = false; } Object[] r = getRow(); if (r == null) { setOutputDone(); return false; } String sex = getVariable("sex",""); logBasic(sex); String json = "{\"name\":\"kettle\", \"age\":16}"; JSONObject jsonObject = JSON.parseObject(json); jsonObject.put("sex",sex); logBasic(jsonObject.getString("sex")); r = createOutputRow(r, data.outputRowMeta.size()); logBasic(jsonObject.toJSONString()); get(Fields.Out, "json").setValue(r, jsonObject.toJSONString()); putRow(data.outputRowMeta, r); return true; }
-
打印json
public boolean processRow(StepMetaInterface smi, StepDataInterface sdi) throws KettleException { if (first) { first = false; } Object[] r = getRow(); if (r == null) { logBasic("_____________"); setOutputDone(); return false; } r = createOutputRow(r, data.outputRowMeta.size()); String json = get(Fields.In, "js").getString(r); logBasic("_____________"+json); putRow(data.outputRowMeta, r); return true; }
-
日志
2021/02/03 21:08:34 - Spoon - Running transformation using the Kettle execution engine
2021/02/03 21:08:34 - Spoon - 转换已经打开.
2021/02/03 21:08:34 - Spoon - 正在打开转换 [java-dome]...
2021/02/03 21:08:34 - Spoon - 开始执行转换.
2021/02/03 21:08:34 - java-dome - 为了转换解除补丁开始 [java-dome]
2021/02/03 21:08:34 - 设置变量.0 - We didn't receive a row while setting the default values.
2021/02/03 21:08:34 - 设置变量.0 - Set variable sex to value [男]
2021/02/03 21:08:34 - 设置变量.0 - Finished after 0 rows.
2021/02/03 21:08:34 - Excel输入.0 - 完成处理 (I=1, O=0, R=0, W=1, U=0, E=0)
2021/02/03 21:08:34 - 生成json.0 - 男
2021/02/03 21:08:34 - 生成json.0 - 男
2021/02/03 21:08:34 - 生成json.0 - {"sex":"男","name":"kettle","age":16}
2021/02/03 21:08:34 - 打印json.0 - _____________{"sex":"男","name":"kettle","age":16}
2021/02/03 21:08:34 - 生成json.0 - 完成处理 (I=0, O=0, R=1, W=1, U=0, E=0)
2021/02/03 21:08:34 - 字段选择.0 - 完成处理 (I=0, O=0, R=1, W=1, U=0, E=0)
2021/02/03 21:08:34 - 打印json.0 - _____________
2021/02/03 21:08:34 - 打印json.0 - 完成处理 (I=0, O=0, R=1, W=1, U=0, E=0)
2021/02/03 21:08:34 - 空操作 (什么也不做).0 - 完成处理 (I=0, O=0, R=1, W=1, U=0, E=0)
2021/02/03 21:08:34 - Spoon - 转换完成!!