一 ,普通 java 脚本 :

1 ,输入,输出,连线 :

  1. 新建 - 转换
  2. 连线 : csv 输入 – java 代码 – excel 输出

2 ,java 脚本 :

  1. 目的 : 输入 2 个列,输出 1 个列
  2. 双击 java 脚本
  3. 在下面对列进行设置 : result ( 代表新增一个列 ),类型 string
  4. 双击这个类 :
    在这里插入图片描述
  5. 效果 : 弹出了 java 代码编辑器
  6. 我们的代码从这里开始 :
//	TODO: Your code here. (See Sample)
  1. 双击 csv ,选择输入路径
  2. 双击 excel ,选择输出路径
  3. 双击 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;
}
  1. 确定

3 ,测试 :

  1. 运行 - 启动
  2. 结果 : 在 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 目录下 :

  1. 目录 : D:\77kettle\data-integration\lib
  2. 文件名 : kettleTransS3-1.0-SNAPSHOT.jar
  3. 重启 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 ,测试 :

  1. 运行 - 启动
  2. 在输出文件出,看到输出内容
Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐