详解kettle之UserDefinedJavaClass步骤(一)
详解User Defined Java Class步骤(一) kettle中的user defined java class步骤,也称UDJC步骤,从4.0版本就有,功能非常强大,无所不能;可以在其中写任意代码,却不影响效率。本文将详细介绍在不同场景中用示例展示如果使用该步骤,由于内容非常多,便于
详解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)和字段的名称,返回org.pentaho.di.trans.steps.userdefinedjavaclass.FieldHelper类的实例,该对象可以访问字段的数据。在父类的定义如下:public FieldHelper get(Fields type, String name) throwsKettleStepException;
输出字段在行设置后,调用putRow()传输改行到可能的下一步骤。
这个简短的示例通过快速定制计算输入字段的相关内容,示例的转换是附件中的uppercase.ktr文件。
示例代码在这里下载,更多内容请看第二部分及第三部分。

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

Windows操作系统是全球最流行的操作系统之一,其新版本Win11备受瞩目。在Win11系统中,管理员权限的获取是一个重要的操作,管理员权限可以让用户对系统进行更多的操作和设置。本文将详细介绍在Win11系统中如何获取管理员权限,以及如何有效地管理权限。在Win11系统中,管理员权限分为本地管理员和域管理员两种。本地管理员是指具有对本地计算机的完全管理权限

C++中的众数函数详解在统计学中,众数指的是一组数据中出现次数最多的数值。在C++语言中,我们可以通过编写一个众数函数来找到任意一组数据中的众数。众数函数的实现可以采用多种不同的方法,下面将详细介绍其中两种常用的方法。第一种方法是使用哈希表来统计每个数字出现的次数。首先,我们需要定义一个哈希表,将每个数字作为键,出现次数作为值。然后,对于给定的数据集,我们遍

OracleSQL中的除法运算详解在OracleSQL中,除法运算是一种常见且重要的数学运算操作,用于计算两个数相除的结果。除法在数据库查询中经常用到,因此了解OracleSQL中的除法运算及其用法是数据库开发人员必备的技能之一。本文将详细讨论OracleSQL中除法运算的相关知识,并提供具体的代码示例供读者参考。一、OracleSQL中的除法运算

C++中的取余函数详解在C++中,取余运算符(%)用于计算两个数相除的余数。它是一种二元运算符,其操作数可以是任何整数类型(包括char、short、int、long等),也可以是浮点数类型(如float、double)。取余运算符返回的结果与被除数的符号相同。例如,对于整数的取余运算,我们可以使用以下代码来实现:inta=10;intb=3;

Vue.nextTick函数用法详解及在异步更新中的应用在Vue开发中,经常会遇到需要进行异步更新数据的情况,比如在修改DOM后需要立即更新数据或者在数据更新后需要立即进行相关操作。而Vue提供的.nextTick函数就是为了解决这类问题而出现的。本文就会详细介绍Vue.nextTick函数的用法,并结合代码示例来说明它在异步更新中的应用。一、Vue.nex

PHP-FPM是一种常用的PHP进程管理器,用于提供更好的PHP性能和稳定性。然而,在高负载环境下,PHP-FPM的默认配置可能无法满足需求,因此我们需要对其进行调优。本文将详细介绍PHP-FPM的调优方法,并给出一些代码示例。一、增加进程数默认情况下,PHP-FPM只启动少量的进程来处理请求。在高负载环境下,我们可以通过增加进程数来提高PHP-FPM的并发

PHP中的模运算符(%)是用来获取两个数值相除的余数的。在本文中,我们将详细讨论模运算符的作用及用法,并提供具体的代码示例来帮助读者更好地理解。1.模运算符的作用在数学中,当我们将一个整数除以另一个整数时,会得到一个商和一个余数。例如,当我们将10除以3时,商为3,余数为1。模运算符就是用来获取这个余数的。2.模运算符的用法在PHP中,使用%符号来表示模

Linux系统调用system()函数详解系统调用是Linux操作系统中非常重要的一部分,它提供了一种与系统内核进行交互的方式。其中,system()函数是一个常用的系统调用函数之一。本文将详细介绍system()函数的使用方法,并提供相应的代码示例。系统调用的基本概念系统调用是用户程序与操作系统内核交互的一种方式。用户程序通过调用系统调用函数来请求操作系统
