kettle中调用java类
kettle中调用java类 有时需要在kettle调用java类,如:验证、查询或自定义加密等。有时甚至连基本的数据访问都不那么简单,如获取一个存储文件或使用一个数据库连接,某些数据源可能封装在应用程序中,手工使用自定义的java客户端访问是唯一的方法。本文介绍
kettle中调用java类
有时需要在kettle调用java类,如:验证、查询或自定义加密等。有时甚至连基本的数据访问都不那么简单,如获取一个存储文件或使用一个数据库连接,某些数据源可能封装在应用程序中,手工使用自定义的java客户端访问是唯一的方法。本文介绍如何在kettle中调用java类。示例代码在这里下载。
注:如果你使用kettle4.0及以上版本,也你也可以使用user defined java class 步骤实现。
Modified Java ScriptValue 步骤
关键要在kettle中使用ModifiedJava Script Value 步骤。从名称上看是仅仅执行javascript来实现该步骤,其实也可以执行java代码。为了理解,我们需要知道该步骤使用Rhino javaScript 引擎来实现,使其可以在jvm中实现javascript,也使其成为可能,让脚本去访问java类。为了说明其如何实现,让我们来看一个简单的转换示例,使用java去计算某个字段的md5码。如下图所示:
javascript步骤实现md5计算,包含如下代码:
// simulate java imports
varMessageDigest =java.security.MessageDigest;
varString =java.lang.String;
varStringBuffer =java.lang.StringBuffer;
varInteger =java.lang.Integer;
// get the md5 digest algorithm
varalgorithm =MessageDigest.getInstance("MD5");
// get the input as bytes
varbytes = newString(test_value).getBytes("UTF-8");
// calculate the digest
algorithm.reset();
algorithm.update(bytes);
varmd5Digest =algorithm.digest();
// turn the digest into a hex-stringrepresentation
varhexString = newStringBuffer();
for(vari =0; i
varhex= Integer.toHexString(0xFF & md5Digest[i]);
if(hex.length()== 1){
hexString.append('0');
}
hexString.append(hex);
}
// write output value
varmd5_hash =hexString.toString().toUpperCase();
让我们详细解释以上代码。
第一部分是就如java 导入包环节,事实上和java中import实现同样目的。声明变量指向java类,是为了避免我们后面引用每个java类使用完整java长类名带来不便。当使用自己定义的类是,要注意不小心覆盖了javascript类。javascript也有其自己的Date类实例,稍不在意,使用这种方式很容易覆盖。
接着是调用简单的java API生成md5值,需要指出的是,输入字段作为javascript对象,“test_value”字段是javascript String对象,有多种方法将其转换成java String对象,这里使用简单的构造函数实现;java String的getBytes()方法返回字节数组;
md5摘要值计算好后,接着通过一小段循环代码生成表现该值的字符串,最后作为一个新字段写到输出行。
使用外部jar包中的类
执行太多的脚步可能影响性能,所以总是把复杂的业务让编译好的java代码来做,通常是一些整洁的实现我们业务的java类库,有时我们可能自己去创建。kettle现有的功能当然不能满足我们的所有需求,调用几个外部类库可以避免写一个完整kettle插件。kettle启动时加载libext目录及子目录下所有jar文件,如果你需要访问自定义jar包的类,需要放在libext文件中。我们示例是关于MD5,从kettle3.2已经有了相应的jar包(apache commons codec项目)。codec项目有很好的方法计算输入字符串的MD5十六进制字符串,正好是我们需要的;我们仅仅使用DigestUtil类的方法即可。
//get a nice md5 hash
varmd5_hash = org.apache.commons.codec.digest.DigestUtils.md5Hex(test_value);
在我笔记本上运行新转换大概10500行/秒,第一版本的仅仅大概2900行/秒.
两者的处理速度差别很大,所以用封装好的功能似乎真的飞快,当然有可能apache项目采用完全不同的MD5算法实现。无论怎样,后者的实现既简单又快。
结论
Modified Java Script Value 步骤允许访问任何jvm中java类。如果你ETL项目有特定的需求,你已经使用java实现过的需求,这时你可以考虑使用这种方法试试。当使用脚步代码总是需要监视性能问题。如果你使用了大量的外部库,就需要有正确的版本依赖管理,否则在测试环境或部署环境中会产生问题。

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds



Guide de la racine carrée en Java. Nous discutons ici du fonctionnement de Square Root en Java avec un exemple et son implémentation de code respectivement.

Guide du nombre parfait en Java. Nous discutons ici de la définition, comment vérifier le nombre parfait en Java ?, des exemples d'implémentation de code.

Guide du générateur de nombres aléatoires en Java. Nous discutons ici des fonctions en Java avec des exemples et de deux générateurs différents avec d'autres exemples.

Guide du numéro Armstrong en Java. Nous discutons ici d'une introduction au numéro d'Armstrong en Java ainsi que d'une partie du code.

Guide de Weka en Java. Nous discutons ici de l'introduction, de la façon d'utiliser Weka Java, du type de plate-forme et des avantages avec des exemples.

Guide du nombre de Smith en Java. Nous discutons ici de la définition, comment vérifier le numéro Smith en Java ? exemple avec implémentation de code.

Dans cet article, nous avons conservé les questions d'entretien Java Spring les plus posées avec leurs réponses détaillées. Pour que vous puissiez réussir l'interview.

Java 8 présente l'API Stream, fournissant un moyen puissant et expressif de traiter les collections de données. Cependant, une question courante lors de l'utilisation du flux est: comment se casser ou revenir d'une opération FOREAK? Les boucles traditionnelles permettent une interruption ou un retour précoce, mais la méthode Foreach de Stream ne prend pas directement en charge cette méthode. Cet article expliquera les raisons et explorera des méthodes alternatives pour la mise en œuvre de terminaison prématurée dans les systèmes de traitement de flux. Lire plus approfondie: Améliorations de l'API Java Stream Comprendre le flux Forach La méthode foreach est une opération terminale qui effectue une opération sur chaque élément du flux. Son intention de conception est
