ETL以及Kettle介绍
ETL即数据抽取(Extract)、转换(Transform)、装载(Load)的过程。是构建数据仓库的重要环节。而数据仓库中可能存在着大量的噪声数据,引起的原因主要有:滥用缩写词、惯用语、数据输入错误、重复记录、丢失值等。如果其中存在大量的噪声数据,该数据就没有任何意义了。ETL也是BI/DW(商业智能/数据仓库)的核心和灵魂,是负责完成数据从数据源到目标数据仓库转换的过程,也是实施数据仓库的步骤。
ETL主要包含以下三个方面:
抽取:将数据从各种业务系统中读取出来。
转换:按预先设计好的规则将抽取的数据进行转换,使得本来异构的数据格式统一起来。
装载:将转换完的数据按计划增量或全部导入数据仓库中。
因为目前运行的应用系统是用户花费了很大的精力和财力构建的、不可替代的系统,尤其系统中的数据是非常宝贵的。但是由于不同原始数据库中的数据的来源、格式不一样,导致了系统实施、数据整合出现问题。ETL就是用来解决这一问题的。
在ETL开源项目中,Kettle当属翘首,是一款国外开源的ETL工具,纯java编写,可以在Window、Linux、Unix上运行,数据抽取高效稳定。项目的名字的意思是水壶,根据该项目的作者matt的说法:把各种数据放在一个壶里,然后以一种你希望的格式输出。
Kettle 也叫 PDI,在 2006 年 kettle 加入了开源的 BI 组织 Pantaho,正式命名为PDI(PantahoData Integeration),而 kettle 是“ Kettle E.T.T.L.Envirnoment”的缩写。kettle 是一款国外开源的 ETL(ExtractTransform Load)工具,纯 java 编写,可以在 Window、Linux、 Unix 上运行,绿色无需安装, 被设计用来抽取、转换、装入和加载数据, 可以形象的理解为将各种数据放入到一个壶里面然后以一种指定的格式流出来。
Kettle家族目前包括4个产品:Spoon、Pan、CHEF、Kitchen:
SPOON :允许你通过图形界面来设计ETL转换过程(Transformation)。(执行transformation页面)
PAN :允许你批量运行由Spoon设计的ETL转换 (例如使用一个时间调度器)。Pan是一个后台执行的程序,没有图形界面。(执行job,台执行)
CHEF: 允许你创建任务(Job)。任务通过允许每个转换,任务,脚本等等,更有利于自动化更新数据仓库的复杂工作。任务通过允许每个转换,任务,脚本等等。任务将会被检查,看看是否正确地运行了。(执行job,GUI)
KITCHEN :允许你批量使用由Chef设计的任务 (例如使用一个时间调度器)。(执行transformation,后台)
转换:指定更细的转换任务,通过Spoon生成。通过Field来输入参数;
SQL:sql语句执行;
FTP:下载ftp文件;
邮件:发送邮件;
检查表是否存在;
检查文件是否存在;
执行shell脚本:如dos命令。
批处理:(注意:windows批处理不能有输出到控制台)。
Job包:作为嵌套作业使用。
JavaScript执行:这个比较有意思,我看了一下源码,如果你有自已的Script引擎,可以很方便的替换成自定义Script,来扩充其功能;
SFTP:安全的Ftp协议传输;
HTTP方式的上/下传。
工作流是作业项的连接方式。分为三种:无条件,成功,失败,为了方便工作流使用,KETTLE提供了几个辅助结点单元(也可将其作为简单的作业项):
Start单元:任务必须由此开始。设计作业时,以此为起点。
OK单元:可以编制做为中间任务单元,且进行脚本编制,用来控制流程。
ERROR单元:用途同上。
DUMMY单元:什么都不做,主要是用来支持多分支的情况。
支持XML存储,或存储到指定数据库中。一些默认的配置(如数据库存储位置……),在系统的用户目录下,单独建立了一个.Kettle目录,用来保存用户的这些设置。
input-Steps:输入步骤
1. Text file input:文本文件输入,可以支持多文件合并,有不少参数,基本一看参数名就能明白其意图。
2. Table input:数据表输入,实际上是视图方式输入,因为输入的是sql语句。当然,需要指定数据源(数据源的定制方式在后面讲一下)
3. Get system info:取系统信息就是取一些固定的系统环境值,如本月最后一天的时间,本机的IP地址之类。
4. Generate Rows:生成多行。这个需要匹配使用,主要用于生成多行的数据输入,比如配合Add sequence可以生成一个指定序号的数据列。
5. XBase Input
6. Excel Input
7. XML Input
output-Steps: 输出步聚
1. Text file output:文本文件输出。这个用来作测试蛮好,呵呵。很方便的看到转换的输出。
2. Table output:输出到目的表。
3. Insert/Update:目的表和输入数据行进行比较,然后有选择的执行增加,更新操作。
4. Update:同上,只是不支持增加操作。
5. XML Output:
look-up:查找操作
1. Data Base
2. Stream
3. Procedure
4. Database join
transformation:转换
1. Select values: 对输入的行记录数据的字段进行更改 (更改数据类型,更改字段名或删除) 数据类型变更时,数据的转换有固定规则,可简单定制参数。可用来进行数据表的改装。
2. Filter rows: 对输入的行记录进行指定复杂条件的过滤。用途可扩充sql语句现有的过滤功能。但现有提供逻辑功能超出标准sql的不多。
3. Sort rows: 对指定的列以升序或降序排序,当排序的行数超过5000时需要临时表。
4. Add sequence: 为数据流增加一个序列,这个配合其它Step(Generate rows, rows join),可以生成序列表,如日期维度表(年、月、日)。
5. Dummy: 不做任何处理,主要用来作为分支节点。
6. Join Rows: 对所有输入流做笛卡儿乘积。
7. Aggregate:聚合,分组处理
8. Group by:分组,用途可扩充sql语句现有的分组,聚合函数。但我想可能会有其它方式的sql语句能实现。
9. Java Script value:使用mozilla的rhino作为脚本语言,并提供了很多函数,用户可以在脚本中使用这些函数。
10. Row Normaliser:该步骤可以从透视表中还原数据到事实表,通过指定维度字段及其分类值,度量字段,最终还原出事实表数据。
11. Unique rows:去掉输入流中的重复行,在使用该节点前要先排序,否则只能删除连续的重复行。
12. Calculator:提供了一组函数对列值进行运算,用该方式比用户自定义JAVA SCRIPT脚本速度更快。
13. Merge Rows:用于比较两组输入数据,一般用于更新后的数据重新导入到数据仓库中。
14. Add constants:增加常量值。
15. Row denormaliser:同Normaliser过程相反。
16. Row flattener:表扁平化处理,指定需处理的字段和扃平化后的新字段,将其它字段做为组合Key进行扃平化处理。