详解kettle之User Defined Java Class步骤(一)
来源:互联网 发布:苏亚星多媒体教学软件 编辑:程序博客网 时间:2024/06/05 22:55
详解User Defined Java Class步骤(一)
kettle中的“user defined java class”步骤,也称UDJC步骤,从4.0版本就有,功能非常强大,无所不能;可以在其中写任意代码,却不影响效率。本文将详细介绍在不同场景中用示例展示如果使用该步骤,由于内容非常多,便于阅读方便,把内容分成三部分,请完整看完全部内容,示例代码在这里下载.
UDJC步骤工作机制
用户定义java类是从org.pentaho.di.trans.steps.userdefinedjavaclass.TransformClassBase继承的;我们可以下载源码,看看该类的方法与属性,对我理解有帮助。
转换运行时,UDJC步骤的代码继承TransformClassBase并编译,该类是
一个通用步骤插件类,有一些便利的公共方法。我们自定义的代码可以根据实际情况覆盖或继承父类的方法或属性,也可以声明额外的方法或属性,并且还可以在代码的开始部分导入类的声明,默认以下类自动导入:
import org.pentaho.di.trans.steps.userdefinedjavaclass.*;
importorg.pentaho.di.trans.step.*;
importorg.pentaho.di.core.row.*;
import org.pentaho.di.core.*;
importorg.pentaho.di.core.exception.*;
如果你已经比较熟悉kettle的内部机制,并想通过代码方便地访问一些对象,点击udjc步骤属性左侧的代码片段,可以帮助我们更快的学习。
下面的章节展示udjc步骤在不同场景中如果使用:
简单的字段转换
第一个示例实现非常简单的操作:把一个字符串类型的字段转成大写。目的是说明如何设置步骤并处理行,以及如何访问输入和输出字段。如果你已经在开发kettle插件,这些对你来说就非常熟悉。假设行数据流中包含一个字段“testfield”,udjc中定义一个字符类型的输出字段“uppercase”。下面的代码实现把testfield转成大写并写到输出字段作为结果。
代码如下:
public boolean processRow(StepMetaInterfacesmi, StepDataInterface sdi) throws KettleException
{
Object[] r = getRow();
if (r == null) {
setOutputDone();
return false;
}
if (first){
first = false;
}
r= createOutputRow(r, data.outputRowMeta.size());
// Get the value from an input field
String test_value = get(Fields.In, "testfield").getString(r);
// play around with it
String uppercase_value = test_value.toUpperCase();
// Set a value in a new output field
get(Fields.Out, "uppercase").setValue(r, uppercase_value);
// Send the row on to the next step.
putRow(data.outputRowMeta, r);
return true;
}
kettleudjc步骤调用processRow()方法去处理一个输入行,如果返回true,继续准备处理另一个输入行,如果没有数据处理,则返回false。
getRow()是阻塞调用的;它等待前一步骤提供一行数据,如有必要返回一个对象数组表示输入行,或null表明没再输入行需要处理。
接下来是简单的看似没有用的三行代码,涉及一个布尔类型的字段first(父类的字段),通过它可以方便的标识是否正在处理第一行数据,当有些工作仅仅需要执行一次,这比较有用。如果不使用,就可以忽略。
调用createOutputRow()确保行数组足够大,能够容纳增加的输出字段。
get()方法可以基于名称访问步骤的输入或输出字段,需要指明字段的类型(In、Out、Info)和字段的名称,返回o
rg.pentaho.di.trans.steps.userdefinedjavaclass.FieldHelper类的实例,该对象可以访问字段的数据。在父类的定义如下:public FieldHelper get(Fields type, String name) throwsKettleStepException;
输出字段在行设置后,调用putRow()传输改行到可能的下一步骤。
这个简短的示例通过快速定制计算输入字段的相关内容,示例的转换是附件中的uppercase.ktr文件。
示例代码在这里下载,更多内容请看第二部分及第三部分。
- 详解kettle之User Defined Java Class步骤(一)
- 详解kettle之User Defined Java Class步骤(二)
- 详解kettle之User Defined Java Class步骤(三)
- ketlle中调用User Defined Java Class插件链接数据库并操作
- 使用java调用kettle 总结(一)
- Java虚拟机(一)-Java的class文件详解
- Deep Copy in C# (Cloning for a user defined class)
- Java字节码(.class文件)格式详解(一)
- Java字节码(.class文件)格式详解(一)
- Java字节码(.class文件)格式详解(一)
- 示例学习kettle之Excel Writer步骤
- Kettle开发之常用步骤开发
- User.java与User.class的区别
- Kettle日志之Kettle step materic日志代码实现(一)
- Java类加载器(Class Loader)之详解
- kettle入门(三) 之kettle连接hadoop&hdfs图文详解
- Kettle插件开发(转换步骤)
- java class 文件解析 之 class 常量池 (一)
- javaMD5值加密代码!
- java异常处理之throw, throws,try和catch
- GreenDao 学习笔记 4
- Linux workqueue工作原理
- Mac显示/隐藏文件的终端命令
- 详解kettle之User Defined Java Class步骤(一)
- sql之left join、right join、inner join的区别
- IP地址:ABCDE
- 百度2013校园招聘笔试题
- hadoop配置文件详解、安装及相关操作
- leetcode题目思路以及部分解答(四)
- SVM——支持向量机详解
- 详解kettle之User Defined Java Class步骤(二)
- Mac OS X:在标题栏上显示目录完整路径