‘Pentaho’ 分类的存档
| 热度: |
开源ETL项目介绍 之一 Kettle简介
因为项目的需要,需要了解一些开源的ETL工具,选中的ETL工具包括Kettle,CloverETL等。
本文和接下来的几篇文章要介绍一下这些工具的使用和其代码结构。
Kettle简介 Kettle : 该项目(http://www.kettle.be/index.htm)翻译成中文名称应该叫水壶,名字的起源正如该项目的主程序员MATT 在一个论坛里说的哪样:希望把各种数据放到一个壶里然后以一种指定的格式流出。项目遵守LGPL协议,下面主要包括四部分,分别为Chef,Spoon,Kitchen,Pan听起来名字都比较怪,都是和厨房相关的东西,从照片看MATT和他老婆都有些胖,可能是喜欢厨房吧 。
Kettle可以从其网站下载,使用ANT直接编译,在distrib目录下有可以运行的脚本。
下面先介绍Chef和Spoon Chef: 是一个图形用户界面,使用SWT开发,用来设计一个作业。创建的作业可以由Kettle的另一个工具Kitchen来执行。 Kitchen是一个作业执行引擎,用来进行转换,校验,FTP上传。 Chef中的作业项主要有转换,SQL,FTP,邮件,检查表存在,检查文件存在,执行SHELL脚本或WINDOWS批处理(注: WINDOWS批处理不能有输出信息到控制台),作业之间可以有箭头连接,箭头方向代表了执行顺序,连接分为三种:无条件,成功后,失败后代表执行条件。
用户定义的作业可以保存在XML中或某一个特定的数据库中,KETTLE会在系统的用户目录下(如Windows系统中的C:\Documents and Settings\Administrator)建立一个.KETTLE目录,用来保存用户的这些设置。…
| 热度: |
ETL中增量更新是一个比较依赖与工具和设计方法的过程,Kettle中主要提供Insert / Update 步骤,Delete 步骤和Database Lookup 步骤来支持增量更新,增量更新的设计方法也是根据应用场景来选取的,虽然本文讨论的是Kettle的实现方式,但也许对其他工具也有一些帮助。本文不可能涵盖所有的情况,欢迎讨论。
应用场景
增量更新按照数据种类的不同大概可以分成: 1. 只增加,不更新, 2. 只更新,不增加 3. 即增加也更新 4. 有删除,有增加,有更新其中1 ,2, 3种大概都是相同的思路,使用的步骤可能略有不同,通用的方法是在原数据库增加一个时间戳,然后在转换之后的对应表保留这个时间戳,然后每次抽取数据的时候,先读取这个目标数据库表的时间戳的最大值,把这个值当作参数传给原数据库的相应表,根据这个时间戳来做限定条件来抽取数据,抽取之后同样要保留这个时间戳,并且原数据库的时间戳一定是指定默认值为sysdate当前时间(以原数据库的时间为标准),抽取之后的目标数据库的时间戳要保留原来的时间戳,而不是抽取时候的时间。对于第一种情况,可以使用Kettle的Insert / Update 步骤,只是可以勾选Don’t perform any update选项,这个选项可以告诉Kettle你只会执行Insert 步骤。对于第二种情况可能比较用在数据出现错误然后原数据库有一些更新,相应的目标数据库也要更新,这时可能不是更新所有的数据,而是有一些限定条件的数据,你可以使用Kettle的Update 步骤来只执行更新。关于如何动态的执行限定条件,可以参考前一篇文章。第三种情况是最为常见的一种情况,使用的同样是 Kettle的Insert / Update 步骤,只是不要勾选Don’t perform any update 选项。第四种情况有些复杂,后面专门讨论。对于第1,2,3种情况,可以参考下面的例子。这个例子假设原数据库表为customers , 含有一个id , firstname …
