03 ,kettle 使用 java 代码 ,运行 jar 包
一 ,普通 java 脚本 :1 ,输入,输出,连线 :新建 - 转换连线 : csv 输入 – java 代码 – excel 输出2 ,java 脚本 :目的 : 输入 2 个列,输出 1 个列双击 java 脚本在下面对列进行设置 : result ( 代表新增一个列 ),类型 string双击这个类 :效果 : 弹出了 java 代码编辑器我们的代码从这里开始 ...
·
一 ,普通 java 脚本 :
1 ,输入,输出,连线 :
- 新建 - 转换
- 连线 : csv 输入 – java 代码 – excel 输出
2 ,java 脚本 :
- 目的 : 输入 2 个列,输出 1 个列
- 双击 java 脚本
- 在下面对列进行设置 : result ( 代表新增一个列 ),类型 string
- 双击这个类 :
- 效果 : 弹出了 java 代码编辑器
- 我们的代码从这里开始 :
// TODO: Your code here. (See Sample)
- 双击 csv ,选择输入路径
- 双击 excel ,选择输出路径
- 双击 java ,编写 java 代码
public boolean processRow(StepMetaInterface smi, StepDataInterface sdi) throws KettleException {
if (first) {
first = false;
/* TODO: Your code here. (Using info fields)
FieldHelper infoField = get(Fields.Info, "info_field_name");
RowSet infoStream = findInfoRowSet("info_stream_tag");
Object[] infoRow = null;
int infoRowCount = 0;
// Read all rows from info step before calling getRow() method, which returns first row from any
// input rowset. As rowMeta for info and input steps varies getRow() can lead to errors.
while((infoRow = getRowFrom(infoStream)) != null){
// do something with info data
infoRowCount++;
}
*/
}
Object[] r = getRow();
if (r == null) {
setOutputDone();
return false;
}
// It is always safest to call createOutputRow() to ensure that your output row's Object[] is large
// enough to handle any new fields you are creating in this step.
r = createOutputRow(r, data.outputRowMeta.size());
/* TODO: Your code here. (See Sample)
// Get the value from an input field
String foobar = get(Fields.In, "a_fieldname").getString(r);
foobar += "bar";
// Set a value in a new output field
get(Fields.Out, "output_fieldname").setValue(r, foobar);
*/
// Send the row on to the next step.
// r : 代表一行,这个方法,每次读取一行的数据,如果哦们写代码,也是每次都处理一行数据
// 获取一个输入字段 :
String brand = get(Fields.In,"brand").getString(r);
// 创建输出字段
get(Fields.Out, "result").setValue(r, brand);
// 输出
putRow(data.outputRowMeta, r);
return true;
}
- 确定
3 ,测试 :
- 运行 - 启动
- 结果 : 在 excel 输出路径看到文件,只有一个列
二 ,运行我们写的 jar 包 :
1 ,创建连接线,java 一个输出字段 :
如上
2 ,编写 java 代码 :
package com.lifecycle.test;
import com.amazonaws.services.s3.AmazonS3;
import com.lifecycle.Commons.S3Util;
import java.io.IOException;
// 看看 KETTLE 代码是否可以跑的通
public class TestKettle {
public String hello() throws IOException {
final AmazonS3 s3 = S3Util.getS3();
return s3.toString();
}
}
3 ,打 jar 包 : 连同引用一起打进来
得到 : kettleTransS3-1.0-SNAPSHOT.jar
4 ,将 jar 复制到 kettle 的 lib 目录下 :
- 目录 : D:\77kettle\data-integration\lib
- 文件名 : kettleTransS3-1.0-SNAPSHOT.jar
- 重启 kettle
5 ,kettle 中的 java 代码编写 : ( 先引用,再编写 )
import com.lifecycle.test.TestKettle;
public boolean processRow(StepMetaInterface smi, StepDataInterface sdi) throws Exception {
if(first) {
first = false;
}
Object[] r = getRow();
if (r == null) {
setOutputDone();
return false;
}
// 执行我们的代码 :
TestKettle tk = new TestKettle();
String tk_v = tk.hello();
// Send the row on to the next step.
// r : 代表一行,这个方法,每次读取一行的数据,如果哦们写代码,也是每次都处理一行数据
// 获取一个输入字段 :
String brand = get(Fields.In,"brand").getString(r);
// 创建输出字段
get(Fields.Out, "result").setValue(r, tk_v);
// 输出
putRow(data.outputRowMeta, r);
return true;
}
6 ,测试 :
- 运行 - 启动
- 在输出文件出,看到输出内容
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
已为社区贡献4条内容
所有评论(0)