技术开发 频道

开源ETL工具kettle系列之建立缓慢增长维


【IT168技术文档】
摘要:本文主要介绍使用kettle 来建立一个Type 2的Slowly Changing Dimension 以及其中一些细节问题

1. Kettle 简介
Kettle 是一个强大的,元数据驱动的ETL工具被设计用来填补商业和IT之前的差距,将你公司的数据变成可增长的利润.

我们先来看看Kettle能做什么:
1. Data warehouse population with built-in support for slowly changing dimensions, junk dimensions and much, much more.
2. Export of database(s) to text-file(s) or other databases
3. Import of data into databases, ranging from text-files to excel sheets
4. Data migration between database applications
5. Exploration of data in existing databases. (tables, views, synonyms, )
6. Information enrichment by looking up data in various information stores (databases, text-files, excel sheets, )
7. Data cleaning by applying complex conditions in data transformations
8. Application integration

本系列文章主要介绍如下几点:
1. 数据仓库内建支持缓慢增长维SCD ,
2. 在数据转换中使用复杂条件判断来清理数据
3. 如何使用kettle 来处理增量更形
4. 将Kettle 集成到你的应用程序里
5. 使用kettle中应该注意的一些地方
2. Kettle 文档
最好的kettle教程就在你身边,我们下载的kettle-version. zip 文件里其实已经包括了非常多的示例和文档,在你的kettle文件夹下,docs 文件夹下包含了所有的文档,samples文件夹下包含了一些示例,后面的介绍中一部分示例都来自kettle自带的这个示例文件夹下。docs里面最主要的是Spoon-version-User-Guide. zip ,里面记录了kettle 的技术性文档,包括支持的操作系统,数据库平台,文本格式,图形化的界面,其中最重要的是所有的转换对象(Transformation Core Objects) 和Job对象(Job Core Objects) 的解释,包括截图和每一个参数的解释。

3. Kettle与Slowly Changing Dimension
  我们使用kettle自带的samples文件下的示例,来看kettle如何支持SCD的。
打开samples / jobs / Slowly Changing Dimension 文件夹,发现里面有三个文件,
create - populate - update slowly changing dimension.kjb
DimensionLookup - update dimension table 2.ktr
DimensionLookup - update dimension table.ktr
其中后缀以 .kjb 结尾的是kettle 的job 文件导出的格式,而以ktr 结尾的是kettle 的transformation 导出的格式,打开其中的DimensionLookup - update dimension table.ktr , 出现如下所示 :
 
    图1
1. 最左边的是产生测试数据,如果是实际环境的话应该是连接真实的数据库,产生的真实数据格式打开如下:

    图2
2 第二个步骤Dummy 就是把前面的数据合并起来,Dummy 步骤本身不做任何事情,不过由于前面有四个输入指向它,所以它在第二步的作用等同于数据合并。
3 第三个步骤是取得系统参数(get system date) , 它取得当前系统时间的日期,并且格式是当天的 00:00:00 , 如图所示


    4. 最后一步是真正的重点,执行Dimension Lookup / Update 步骤来更新和插入数据,以此来实现Type 1 ,2 ,3 的不同Slowly Changing Dimension 
   
       图4

                                                                  图5
   在开始介绍Dimension Lookup / Update 之前,先看看在执行这个步骤之前的输入和输入:
   输入: 

字段名
数据类型
说明
id
int
前面步骤的输入
name
Varchar(50)
前面步骤的输入
firstname
Varchar(50)
前面步骤的输入
updated
time
从第三步来的时间参数

输出:
字段名
数据类型
说明
id
INT
来自输入
name     
varchar(50)
来自输入
firstname
varchar(50)
来自输入
customer_tk
BIGINT
代理主键
version
INT
版本变更号
Date_from
datetime
有效期起始日期
Date_to
Datetime
有效期失效日期
   注意: 上图中所使用的是mysql 5 数据库做测试,所以数据类型一栏都是mysql 的数据类型,如果你使用其他数据库,可能数据类型会有所不同,其中的datetime 的格式 yyyy/mon/day hh:mm:ss:sss

 

我们再来看看当我们第一次运行以后出现的数据输出:
 
图6

注意图6中所有的 version 值都是 1 
Date_from 都是 1900/01/01 00:00:00.000
Date_to   都是 2199/12/31 23:59:59.000      这两列都是根据图4下面部分定义的
Id , name , firstname 都是测试数据,从前面步骤来的.

然后我们修改图1中generate row 的部分数据(一共两条),并且只有测试数据变了的情况下,我们再次运行转换,查看数据输出:
 
                                                                          图7


注意到其中customer_tk 并没有什么变化,仍然在产生类似序列的输出
Version 的值中出现了 2 , 并且只有在我们改变的数据中
在出现了改变的行中的date_from 变成了2007/11/28/ 00:00:00.000
在出现了改变的行中原来数据的date_to 变成了 2007-11-28 00:00:00.000
Id 列没有变化,(变化了也没用,图5中的中间部分 Field 选项卡没有选id)
Name , firstname 有两个值变了(我们手工改变的)

0
相关文章