详解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 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









C++ のモード関数の詳細な説明 統計において、モードとは、一連のデータ内で最も頻繁に現れる値を指します。 C++ 言語では、モード関数を記述することによって、任意のデータセット内のモードを見つけることができます。モード関数はさまざまな方法で実装できます。一般的に使用される 2 つの方法を以下で詳しく紹介します。 1 つ目の方法は、ハッシュ テーブルを使用して各数値の出現回数をカウントすることです。まず、各数値をキー、出現回数を値とするハッシュ テーブルを定義する必要があります。次に、特定のデータセットに対して次を実行します。

Windows オペレーティング システムは世界で最も人気のあるオペレーティング システムの 1 つであり、その新バージョン Win11 が大きな注目を集めています。 Win11 システムでは、管理者権限の取得は重要な操作であり、管理者権限を取得すると、ユーザーはシステム上でより多くの操作や設定を実行できるようになります。この記事では、Win11システムで管理者権限を取得する方法と、権限を効果的に管理する方法を詳しく紹介します。 Win11 システムでは、管理者権限はローカル管理者とドメイン管理者の 2 種類に分かれています。ローカル管理者はローカル コンピュータに対する完全な管理権限を持っています

OracleSQL の除算演算の詳細な説明 OracleSQL では、除算演算は一般的かつ重要な数学演算であり、2 つの数値を除算した結果を計算するために使用されます。除算はデータベース問合せでよく使用されるため、OracleSQL での除算演算とその使用法を理解することは、データベース開発者にとって重要なスキルの 1 つです。この記事では、OracleSQL の除算演算に関する関連知識を詳細に説明し、読者の参考となる具体的なコード例を示します。 1. OracleSQL での除算演算

C++ の剰余関数の詳しい説明 C++ では、剰余演算子 (%) を使用して、2 つの数値を除算した余りを計算します。これは、オペランドが任意の整数型 (char、short、int、long など) または浮動小数点数型 (float、double など) になる二項演算子です。剰余演算子は、被除数と同じ符号の結果を返します。たとえば、整数の剰余演算の場合、次のコードを使用して実装できます。

Vue.nextTick 関数の使い方と非同期更新での応用について詳しく説明 Vue の開発では、DOM を変更した直後にデータを更新したり、関連する操作が必要になったりするなど、データを非同期で更新する必要がある状況によく遭遇します。データが更新された直後に実行されます。このような問題を解決するために登場したのが、Vue が提供する .nextTick 関数です。この記事では、Vue.nextTick 関数の使用法を詳しく紹介し、コード例と組み合わせて、非同期更新でのアプリケーションを説明します。 1.Vue.nex

PHP-FPM は、PHP のパフォーマンスと安定性を向上させるために一般的に使用される PHP プロセス マネージャーです。ただし、高負荷環境では、PHP-FPM のデフォルト設定ではニーズを満たせない場合があるため、チューニングが必要です。この記事では、PHP-FPM のチューニング方法を詳しく紹介し、いくつかのコード例を示します。 1. プロセスの数を増やす デフォルトでは、PHP-FPM はリクエストを処理するために少数のプロセスのみを開始します。高負荷環境では、プロセス数を増やすことで PHP-FPM の同時実行性を高めることができます。

PHP のモジュロ演算子 (%) は、2 つの数値を除算した余りを取得するために使用されます。この記事では、モジュロ演算子の役割と使用法について詳しく説明し、読者の理解を深めるために具体的なコード例を示します。 1. モジュロ演算子の役割 数学では、整数を別の整数で割ると、商と余りが得られます。たとえば、10 を 3 で割ると、商は 3 になり、余りは 1 になります。モジュロ演算子は、この剰余を取得するために使用されます。 2. モジュロ演算子の使用法 PHP では、% 記号を使用してモジュロを表します。

Linux システム コール system() 関数の詳細説明 システム コールは、Linux オペレーティング システムの非常に重要な部分であり、システム カーネルと対話する方法を提供します。その中でも、system()関数はよく使われるシステムコール関数の一つです。この記事では、system() 関数の使用法を詳しく紹介し、対応するコード例を示します。システム コールの基本概念 システム コールは、ユーザー プログラムがオペレーティング システム カーネルと対話する方法です。ユーザープログラムはシステムコール関数を呼び出してオペレーティングシステムを要求します。
