kettle系列教程二



kettle系列教程二

1、Hello World
示例

通过这个例子,介绍kettle的一些基础知识及应用:

n 使用Spoon工具

n 转换的创建

n 步骤及连线

n 预定义变量

n 在Spoon中预览和执行

n 使用pan工具在终端窗口执行转换

概述

我们要实现的目标是:通过一个包含人名称的CSV文件,创建一个XML文件,内容是针对每个人添加上问候。

如果csv文件内容如下:

last_name, name

Suarez,Maria

Guimaraes,Joao

Rush,Jennifer

Ortiz,Camila

Rodriguez,Carmen

da Silva,Zoe

则输出的XML文件内容如下:

- <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文件。

转换是由步骤和连接组成,这些步骤和连接构成数据流,因此转换是基于数据流的。

环境准备

开始设计一个转换之前,我们先创建一个文件夹Tutorial,我们将保存所有的文件到该文件夹中,然后创建一个csv文件,内容就是前面人员信息,你可以复制到文本文件中,然后命名为list.csv

设计转换

有三个子任务组成:

ü 创建一个转换

ü 设计转换中的步骤和连接

ü 配置步骤和连接诶

创建转换

1)    点击文件菜单中新建,或者通过快捷键Ctrl+N,选择转换.

2)    在“主对象树”视图中点右击转换1,然后点击设置,或者在设计界面中右击,然后点击转换设置,或者使用Ctrl+T快捷方式。

3)    在设置窗口中可以设置转换的相关属性;我们这里写名称和描述,然后保存。

4)    保存该转换到Tutorial文件夹中,命名为hello,最终创建了hello.ktl文件。

设置转换中的步骤和连接

步骤是转换中的最小设计单元,spoon中有很多不同的步骤,放在不同的分组中,如输出、输入等。每个步骤被设计完成一个特定的功能,如读取参数或格式化一个数据集。

连接是两个步骤之间连接的图形展示,从源到目标。流经连接的数据构成源步骤的输出数据,目标步骤的输入数据。一般连接有一个源步骤和一个目标步骤,但是有时从一个源步骤出来多个连接,这时输出数据流可以是复制或分发给不同的目标步骤;同样多个连接到达一个目标步骤,则需要目标步骤能够合并来自不同源步骤的输入数据。

hello.ktl文件需要实现以下功能:读取csv文件、针对每个人员添加问候、保存问候信息到xml文件中;三个环节使用不同的步骤实现,如下图:

这个例子,步骤之间连接是一对一关系,比较简单,详细的设计流程如下:

1)    在核心对象输入类别中选择CSV文件输入,拖动到右边工作区中;

2)    在脚本类别,拖动javascript代码到右边工作区中;

3)    在输出类别,拖动xml文件输出到工作区;

现在把CSV文件输入javascript代码两个步骤连接起来

1)    选择第一个步骤;

2)    按住shift键并拖动第一个步骤的图标到目标步骤;

3)    按照同样的方式连接javascript代码xml文件输出两个步骤;

配置步骤行为

每个步骤都有一个配置窗口,不同类别下的不同步骤配置内容不同,但是步骤名称总是需要设置成有意义的名称,步骤描述是对步骤实现功能的描述。

配置CSV文件输入步骤

1)  双击CSV文件输入步骤

2)    弹出配置窗口界面,我们设置文件位置、格式、内容等;

3)    替换默认步骤名称,一般设置和业务相关的名称,这里我们使用name
list

4)    文件名称需要填写文件名称及位置

注:在文本框的右边有菱形变量图标,表示该文本框中可以使用变量;变量的格式为${name_of_variable},我们可以定位光标在文本框中,然后按快捷键(ctrl+Alt+Space),文本框的下拉框中会出现预定义的变量及用户定义变量,当然我们目前没有定义任何变量。我们写如下内容:

${Internal.Transformation.Filename.Directory}/list.csv

当程序运行时,变量会被替换成当前转换文件的路径,然后在该目录下搜索 list.csv文件;

 

5)    点击获取字段,增加输入文件的列名称到表格中,该操作默认假设CSV文件有行标题。

6)    表格中展现了列名称last_name和name,如下图:

7)    取消“简易转换”(懒转换)

8)    点击预览,确认文件正确加载,会弹出窗口显示数据。

9)    点击确定,完成CSV文件输入配置。

配置javascript代码步骤

1)    双击javascript代码步骤,弹出配置窗口

2)    与前面步骤不同,这里可以写javascript代码,输入“hello”,连接到每个名称前面。

3)    命名该步骤为Greetings.

4)    在配置窗口的主区域写代码,左边窗口,有一组变量及函数,可以在代码中使用;尤其是最后两个节点,输入字段和输出字段,可以在代码中使用;这个例子中有两个字段last_name和name,写入下面代码:

var msg = ‘Hello, ‘ + name.getString() + "!";

注:name.getString()可以手动写入,或在左边树双击自动录入。

5)    在最下面的表格里,可以写代码中创建的任何变量作为输出流中的字段;这里我们创建一个msg变量,因为我们需要把msg内容写到xml输出文件中。如下图所示。

注:不要混淆这里的代码变量和kettle内置变量,他们完全不同。

6)    点击确定完成JavaScript代码步骤配置。

7)    选择刚才配置的步骤(JavaScript代码),为了检查离开这步骤的输出新的字段,我们将查看输入及输出字段。输入字段就是到达该步骤的数据列;输出字段就是离开步骤的数据列;有些步骤简单传输输入数据,这时,输入数据和输出数据通常相同;有些步骤增加字段到输出流中,如:计算步骤;还有一些步骤过滤或合并数据,这样输出数据中字段减少相对输入数据字段,如:分组步骤。

8)    在该步骤上点击右键,弹出上下文菜单。

9)    选择显示输入字段,可以看到输入字段,last_name和name,来自csv文件输入步骤。

10) 选择显示输出字段,可以不仅有已经存在的字段,而且还增加了msg字段。

配置XML文件输出步骤

1)   双击XML输出步骤,弹出配置界面,这里可以设置输出文件的名称和位置,以及输出字段。可以设置全部或部分字段;

2)   设置步骤名称:File
With Greetings;

3)   在文件设置框中录入:${Internal.Transformation.Filename.Directory}/Hello.xml

4)   点击获取字段,用三个输入字段填充表格,输出文件中我们只想显示消息,所以删除name和last_name;

5)   再次保存该转换设计文件;

运行机制

当你执行一个转换,几乎所有步骤是同时执行的,因为转换时异步执行的;行数据流按照设计步骤流转,每个处理流执行到下一个步骤无需等待其他步骤。实际开发时,不了解这个特性,可能出现和设想不一样的结果。

至此,该示例基本配置完毕。该转换读取输入文件,然后通过javas代码步骤给每行添加问候,最后该内容被发送到输出文件中。因为例子中行数很少,很难看出了是异步执行。但是,切记,有可能在消息被写在输出文件的同时,有数据行刚离开第一步。

验证、预览和执行

1)    执行转换之前,检查每个属性配置实用验证按钮,spoon将验证语法是否正确,查找不可到达的步骤及不存在的连接。如何你一直跟着本教程的步骤练习,应该能验证通过,可以准备预览输出结果。

2)    选择JavaScript代码步骤,然后点击预览按钮,如下图:

3)    如你所见,spoon假设你预览你选择的步骤,点击快速启动,然后,弹出JavaScript代码步骤的数出数据,如何数据和你期望一致,我们准备执行转换。

4)    点击运行按钮在工具栏中。

5)    spoon将弹出一个窗口,这里可以设置一些信息,如执行参数和日志级别等,点击运行。

6)    在主窗口的日志窗口中可以看到当前执行的日志信息及每步执行情况。

Read:来自前一步的数据行数;

Written:离开这步到下一步骤时的数据行数;

Input:从一个文件或表中读取的数据行数;

Output:往表或文件中写的数据行数;

Errors:执行中的错误信息,如果有错误,整行都是红色;

日志窗口中,可以看到每步骤执行情况。最后一行是:

Spoon - The transformation has finished!!

如果没有错误,可以打开新生成的Hello.xml文件,检查是否正确。

pan命令

pan是在终端执行转换的工具。在window是pan.bat,其他平台是pan.sh,在安装目录可以找到。如果你直接运行pan,不加任何选项,可以看到pan打印所有的选项。

简单命令如下:

pan /file <Job_path>/Hello.ktl /norep

/norep选项是让spoon不要去连接资源库;

/file是转换文件的名称;

<job_path>是我们教程文件夹,如:c:/tutorial或
/home/tutorial

其他选项在运行时是缺省值;

你输入命令并确定后,转换同样被执行。这时,日志被打印到终端界面中,也可以设置日志打印到文件中。日志的格式有点变化,但内容和图形界面一致。

kettle系列教程二

时间: 2024-10-19 02:17:13

kettle系列教程二的相关文章

C#微信公众号开发系列教程二(新手接入指南)

http://www.cnblogs.com/zskbll/p/4093954.html 此系列前面已经更新了两篇博文了,都是微信开发的前期准备工作,现在切入正题,本篇讲解新手接入的步骤与方法,大神可直接跳过,也欢迎大神吐槽. 目录 C#微信公众号开发系列教程一(调试环境部署) C#微信公众号开发系列教程一(调试环境部署续:vs远程调试) C#微信公众号开发系列教程二(新手接入指南) 微信公众平台消息接口的工作原理大概可以这样理解:从用户端到公众号端一个流程是这样的,用户发送消息到微信服务器,微

CRL快速开发框架系列教程二(基于Lambda表达式查询)

本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框架系列教程四(删除数据) CRL快速开发框架系列教程五(使用缓存) CRL快速开发框架系列教程六(分布式缓存解决方案) CRL快速开发框架系列教程七(使用事务) CRL快速开发框架系列教程八(使用CRL.Package) CRL快速开发框架系列教程九(导入/导出数据) CRL快速开发框架系列教程十(

Shell脚本系列教程二: 开始Shell编程

Shell脚本系列教程二: 开始Shell编程 2.1 如何写shell script? (1) 最常用的是使用vi或者mcedit来编写shell脚本, 但是你也可以使用任何你喜欢的编辑器; (2) 脚本写好之后, 要给脚本设置可执行权限: 语法为: chmod  [option]  mode  script-name $ chmod +x script-name # 对所有用户(a, 默认) $ chmod 775 script-name 这里, 775这3个数字分别表示此文件对于用户(u)

ComicEnhancerPro 系列教程二十:用“文件比较”看有损、无损

作者:马健邮箱:[email protected] 主页:http://www.comicer.com/stronghorse/ 发布:2017.07.23 教程二十:用"文件比较"看有损.无损 在前两篇教程中,扯了一大堆JPG文件的有损压缩,平时在网上也经常看到一些人整天把有损.无损挂在嘴边,但具体是否真的无损?有损又损了多少.损在哪里?讲得清的人就真心不多了.CEP从v4.13开始提供"文件比较"功能,可用于定量比较有损.无损. 按照CEP的使用说明,"

Influx Sql系列教程二:retention policy 保存策略

retention policy这个东西相比较于传统的关系型数据库(比如mysql)而言,是一个比较新的东西,在将表之前,有必要来看一下保存策略有什么用,以及可以怎么用 I. 基本操作 1. 创建retention policy retention policy依托于database存在,也就是说保存策略创建时,需要指定具体的数据库,语法如下 CREATE RETENTION POLICY <retention_policy_name> ON <database_name> DUR

Cobaltstrike系列教程(二)-Listner与Payload生成 heatlevel

0x000-前文 Cobaltstrike系列教程(一)简介与安装 0x001-Listner(监听器)介绍 ①Cobaltstrike listner简介 可能有一些小白并不理解什么叫做listner,在此科普一下.Listner(监听器):专门用于对其他对象身上发生的事件或状态改变进行监听和相应处理的对象,当被监视的对象发生情况时,立即采取相应的行动.在许多的渗透测试工具中,例如empire,metasploit,cobaltstrike中都有listner的存在.大家可以简单地理解为lis

Laravel 5系列教程二:路由,视图,控制器工作流程

免费视频教程地址https://laravist.com/series/laravel-5-basic 上一篇教程我们走了那么长的路,终于把Laravel安装好了,这一篇教程我们就要进入Laravel的神奇世界了,主要是讲解Laravel的Router,Views,Controllers的工作流程,目的也就是让大家明白Laravel在处理一个get请求的时候是如何工作的. 在开始之前,我们首先得将我们的服务器启动起来,如果你使用Laravel的artisan,你可以直接: php artisan

vagrant系列教程(二):vagrant的配置文件vagrantfile详解(转)

原文:http://blog.csdn.net/hel12he/article/details/51089774 上一篇文章完整的讲叙了如何安装一个vagrant的环境.这里主要说一说vagrant的配置文件Vagrantfile.我在尝试各种技术的时候,常常苦恼于很多时候没有教程把相关的配置信息说明完整.所以在我的博客里,我一定会完整的把这块给补上. 一 配置详解 在我们的开发目录下有一个文件Vagrantfile,里面包含有大量的配置信息,主要包括三个方面的配置,虚拟机的配置.SSH配置.V

scrapy系列教程二——命令行工具(Command line tools)

1.命令行工具(Command line tools) Scrapy是通过Scrapy命令行工具进行控制的.这里我们称之为 “Scrapy tool” 以用来和子命令进行区分. 对于子命令,我们称为 “command” 或者 “Scrapy commands”.Scrapy tool 针对不同的目的提供了多个命令,每个命令支持不同的参数和选项. 2.常用命令 官方命令行说明文档 http://scrapy-chs.readthedocs.org/zh_CN/latest/topics/comma