kettle应用实践(转)

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

kettle应用实践(转)

今天早上在网上看到了kettle发布了最新的版本,忽然想起最近其实做了不少工作应该是ETL工具的拿手好戏,赶紧下载下来看看,看是否能够在实际的工作中应用起来。

顺便讲一下,为啥看到kettle会两眼发光。

最近写了好几个小程序,用于从一个ftp去获取数据,然后转发至另一个ftp去,或者是从一个数据库获取数据然后保存至本地的数据库中,使用的是jdk中的Timer实现的定时调度,本来也没什么问题,连续运行几个月都不会出错。

可是最近网络不是太好,周期性抽风,ping包时,每5分钟大概

会丢7-8个包,从而导致程序也会假死,过一段时间后就不正常干活了,估计是因为用了数据库连接池的问题,要是每次发起数据库连接可能就不会有问题了,偷懒也不想改了,因为网络最终肯定是会修好的 :-) 但是想试试ETL工具,因为后面还有一些类似的东西要处理,不想写代码了,用别人的轮子感觉比较好,呵呵

首先下载了kettle的最新版,kettle3.1,解压后即可运行,一般的开发人员稍微摸索一下,看看例子简单的转换还是会做的,今天小试了一把,有几个注意点记下来。

1.使用资源库(repository)登录时,默认的用户名和密码是admin/admin

2.当job是存放在资源库(一般资源库都使用数据库)中时,使用

Kitchen.bat执行job时,需使用如下的命令行:

Kitchen.bat /rep kettle /user admin /pass admin /job job名

3.当job没有存放在资源库而存放在文件系统时,使用Kitchen.bat执行

job时,需使用如下的命令行:

Kitchen.bat /norep /file user-transfer-job.kjb

4.可以使用命令行执行job后,就可以使用windows或linux的任务调度来

定时执行任务了

在一开始使用命令行方式执行job时,总是报如下的错误,琢磨了好长时间总算整明白正确的方式了。

Unexpected error during transformation metadata load

No repository defined!

下一步准备按照实际情况定制Job,做好了再写小结。

问答:Unexpected error during transformation metadata load

No repository defined!

这个问题你最后怎么解决的?

@吴悔

一开始我是将Job和Transfomation都是存放在资源库中的,然后使用Kitchen.bar执行时会报上述错误,后来登录kettle时,选择“不使用资源库”,直接将Job和Transfomation保存在本地文件中,再使用Kitchen.bat执行就没有问题了。

Kettle的第一个实践--从FTP上取文件,再放至另一个FTP上

这个实践其实不难,主要是有一个地方要注意,就是文件名通配符的写法,如果文件名格式为“TRANS_yyyymmdd.txt”,如TRANS_20081101.txt。如果想匹配所有以TRANS开头的文本文件,在kettle中要写成这样:

TRANS_.*[0-9].txt。

最后在windows操作系统中配置定时任务就可以定期执行该Job了。

Job的图:

FTP配置信息:

Kettle的第二个实践--数据获取并转换

需求:

kettletest1数据库中有table_source数据表,结构如下:

1.Id 主键

2.t_id 数据时间

3.part_id 实例ID

4.yg 数据字段1

5.wg 数据字段2

该表中的数据对于不同的实例ID,一分钟一条数据,t_id字段表示数据的时间,精确到分钟。

kettletest2数据库中有table_target数据表,结构如下:

1.Id 主键

2.marketdate 数据日期,格式为 yyyy-MM-dd

3.pointtime 时间,格式为 HH:mm

4.pointnumber 时间的数字表示,00:01表示为1,00:00表示为1440

5.plantcode 实例Code

6.yg 数据字段1

7.wg 数据字段2

需定期将table_source表中的数据获取至table_target表中,并进行如下处理:

1、将t_id数据时间字段拆分为三个字段,分别为marketdate、pointtime、pointnumber。

a、marketdate取t_id的日期部分。

b、pointtime取t_id的时间部分。

c、pointnumber为时间的数字表示,等于hour*60+minute。

d、但当t_id的时间为某日的00:00时,需将其转化为24:00,并且marketdate需取日期的前一天。如t_id为2008-12-04 00:00,则marketdate 为2008-12-03,pointtime为24:00,pointnumber为1440。

2、将part_id字段映射为plantcode字段,并根据如下规则进行转换:

part_id plantcode

3206 P01

3207 P02

3208 P03

测试中使用的数据库均为mysql数据库。

实战:

整个转换工作共分为三个步骤,如下图:

1、定义需获取的数据的日期

相关文档
最新文档