示例实现一个功能,将原文本转换为目标文本,格式如下:
源文本
last_name,name
Suarez,Maria
Guimaraes,Joao
Rush,Jennifer
Ortiz,Camila
Rodriguez,Carmen
da Silva,Zoe
目标文本
<Rows>
<row>
<msg>Hello, Maria!</msg>
</row>
<row>
<msg>Hello, Joao!</msg>
</row>
<row>
<msg>Hello, Jennifer!</msg>
</row>
<row>
<msg>Hello, Camila!</msg>
</row>
<row>
<msg>Hello, Carmen!</msg>
</row>
<row>
<msg>Hello, Zoe!</msg>
</row>
</Rows>
通过对源文本与目标文本的观察,容易看出源文本是CSV格式的名单列表,目标文本是XML格式的问候语,此例要做的事,就是读取以名单列表,生成问候语并转存为XML。
A Transformation is made of Steps, linked by Hops. These Steps and Hops form paths through which data flows.
准备实验环境
新建名为Tutorial的目录,用于存放实验所需文件。新建名为list.csv的文件保存源文本。
转换预排
实验将完成以下三个子任务:
- 新建转换器
- 通过增加步与跳(steps and hops)设计基本的转换流
- 为数据集与期望行为配置步骤
新建转换器
- 点击 new file 然后选择 转换。
- 点击 以不同名称保存转换,将转换保存在Tutorial目录并命名为hello. 转换被会被保存为hello.ktr文件。
通过增加步骤与跳线(steps and hops)设计基本的转换流
步骤是转换中的最小单元。Kettle中有非常多的步骤,它们被分类组织在一起。每一个步骤都被设计成用于完成一个特定的功能,例如产生随机数或在数据库中插入行。
跳线是以图形表示的源与目的步之间的数据流。沿跳线流动的数据构成了源步骤的输出数据与目的步骤的输入数据。一个跳线仅能有一个源与一个目的,但一个步骤可以连接多个跳线。
实验中的转换将完成如下步骤:
- 读CSV文件
- 构造问候语
- 在XML文件中保存问候语
通过拖拽完成如下形式
为数据集与期望行为配置步骤
每一个步骤都有一个配置窗口,依照步骤的功能其配置窗的样式也各不相同。
配置 CSV file input 步骤
- 改变步骤名称,键入 读入名称列表
- 点击 Browse 选择 list.csv
- 点击 Get Fields,名单的第一行被当作列名添加在网格中
- Switch lazy conversion off
- 点击 OK
配置 Modified JavaScript Value Step
- 代码区键入
var msg = 'Hello, ' + name + "!";
- 点击 Get variables
- 点击 OK
配置 XML Output Step
- 点击 Browser,指定一个你喜欢的名字
- 点击 Fields 页标签
- 点击 Get Fields
- 删除 last_name, name
- 点击 Content type 选择 Element
- OK
- CTRL-S
怎样工作?
当转换执行时,所有的步骤同时异步执行。
现在,Hello World差不多已经完成了配置工作。转换读取输入文件,通过JavaScript代码为每一行创建一条信息,然后将信息发送到输出文件。这是一个数据量很少的小示例,所有很难注意到其是异步执行的。但要记住,有可能在某刻一个名字已经写入了输出文件,而其它的还留在转换的第一步。