Java 代码
组件介绍
Java代码组件可以运行用户自定的Java类。
- 输入:包含待使用字段的数据流
- 输出:操作完毕的数据流
页面介绍
运行Java代码组件得到下图所示的界面:
用户定义的Java类转换允许您输入用户定义的Java类来驱动完整转换的功能。本质上,这个转换允许您在转换中编写自己的插件。此转换的目标是不允许用户在转换中进行全面的Java开发。显然,我们有一个完整的插件系统可以帮助这部分。目标是允许用户用尽可能少的代码定义方法和逻辑,并尽可能快地执行。为此,我们使用Janino项目库在运行时以类的形式编译Java代码。
Java代码组件页面包含如下选项:
字段表
组件底部表格为字 段表,右击选择“获取变量(&G)”,组件可根据当前指定设置从源文件获取相应内容填充字段表。该表包含以下列:
选项 | 说明 | 样例值 |
---|---|---|
字段名 | 自命名新的字段名称。 | |
类型 | 指定输出字段的数据类型。 | |
长度 | 该字段中数据的长度。 | |
精度 | 该字段中数据的精度。 |
参数表
组件底部表格为参数表,可以使用参数表来避免使用硬编码字符串值,例如字段名称。该表包含以下列:
选项 | 说明 | 样例值 |
---|---|---|
标签 | 指定的参数标签。 | |
值 | 指定的参数值。 | |
描述 | 有关该参数的描述。 |
消息Transform表
组件底部表格为消息Transform表,表示要从其中读取数据的附加转换。该表包含以下列:
选项 | 说明 | 样例值 |
---|---|---|
标签 | 指定的Transform标签。 | |
Trans | 指定从哪个Transform开始。 | |
描述 | 有关该的描述。 |
目标Transform表
组件底部表格为目标Transform表,表示要从其中输出数据的附加转换。该表包含以下列:。该表包含以下列:
选项 | 说明 | 样例值 |
---|---|---|
标签 | 指定的参数标签。 | |
Trans | 指定从哪个Transform结束。 | |
描述 | 有关该参数的描述。 |
使用案例
案例通过自定义常量数据组件生成姓名的姓和名,再通过JAVA代码拼接姓名。
使用自定义常量数据组件生成的数据如下:
使用JAVA代码组件拼接生成的字符串,首先需要定义代码处理的逻辑,该代码首先定义读取的字段,并从参数读取字段名,并将输入字段里的first_name和last_name拼接起来输出到name_field字段中。
java代码步骤里的代码如下:
String firstnameField;
String lastnameField;
String nameField;
public boolean processRow() throws HopException
{
// 为了节省性能,只加载一次参数.
//
if (first) {
firstnameField = getParameter("FIRSTNAME_FIELD");
lastnameField = getParameter("LASTNAME_FIELD");
nameField = getParameter("NAME_FIELD");
first=false;
}
// 首先获取输入数据
//
Object[] r = getRow();
// 如果r为空,则结束处理.
//
if (r == null) {
setOutputDone();
return false;
}
// 调用createOutputRow()总是最安全的,以确保输出行的Object[]足够大,可以处理在此转换中创建的任何新字段。
//
Object[] outputRow = createOutputRow(r, data.outputRowMeta.size());
String firstname = get(Fields.In, firstnameField).getString(r);
String lastname = get(Fields.In, lastnameField).getString(r);
// 拼接姓名,并输出字段
//
String name = firstname+lastname;
get(Fields.Out, nameField).setValue(outputRow, name);
// putRow将把该行发送到默认的输出组件.
//
putRow(data.outputRowMeta, outputRow);
return true;
}
而后,需要定义读取的参数,参数定义如下。
右键点击【预览】,可得下图: