一直以来,我在项目中数据抽取一般都是自己写定时任务,通过quartz或者其他任务调度框架来定时从数据源中抽取数据,所有有关数据的抽取、校验、转换等过程都是在代码中手工编写,针对不同的数据源都是需要手动来编写代码,然后重新发布数据抽取程序。一直以来就想尝试一下Kettle等ETL工具,近期便开始着手学习使用。关于Kettle简介详见:Kettle介绍
下面是Kettle一个最初级的练习例子。

测试环境

  • Kettle版本:pdi-ce-6.1.0.1-196
  • jdk1.7.0_79 x64
  • Windows7 x64

题目要求

生成 100 个随机数, 随机数取值于[0, 100)之间,计算小于等于 50 的随机数个数和 大于50 的随机数个数。并把这两个统计数字放在数据库表的一行的两列中,即输出的结果有一行,一行包括两列,每列是一个统计值。

kettle作业总体预览

kettle1

1. 生成随机数

kettle1-1
这里生成的随机数为0-1范围内的。

2. 增加常量

kettle1-2
增加一个值为100的常量

3. 生成的随机数和增加的常量进行乘法运算,并且将结果设置为2位数

kettle1-3

4. 根据数值范围对字段B进行赋值,如果小于等于50,则赋值为0,大于50赋值为1,这是为后面分组统计做基础

kettle1-4

5. 排序记录,为后面分组做基础

kettle1-5

6. 分组

kettle1-6
到这里就分别得到小于等于50和大于50的数,即=0的数和=1的数,但是是以列存储

7. 列转行

kettle1-7
这一步是为了将列转成行存储。

结果展示

kettle1-result

下载测试

下载测试

总结

其实要想完成这个题目有很多种做法,作为一个菜鸟和逻辑思维不怎么强的我,折腾一个小时才想出这个一个解决方案。其中,生成[0,100)就用了三步。此外,数值范围、排序、列转行其实可以合并为一步。实际项目中应该根据情况选择最优性能的方案来进行开发。

Kettle学习(一)
Tagged on:

4 thoughts on “Kettle学习(一)

    • 2016年6月30日 at 下午10:11
      Permalink

      对啊,我是苦逼码农……

      Reply
  • 2016年8月21日 at 下午9:18
    Permalink

    这个貌似matlab也能做吧

    Reply
    • 2016年8月22日 at 下午4:55
      Permalink

      是的!这只是一个小练习

      Reply

发表评论

电子邮件地址不会被公开。 必填项已用*标注