1.ETL简介
ETL(Extract-Transform-Load的缩写,即数据抽取、转换、装载的过程),对于企业或行业应用来说,经常会遇到各种数据的处理,转换,迁移,所以了解并掌握一种etl工具的使用,必不可少,这里我们要学习的ETL工具是Kettle!
2.kettle简介
Kettle是一款国外开源的ETL工具,纯java编写,可以在Window、Linux、Unix上运行,绿色无需安装,数据抽取高效稳定。
Kettle 中文名称叫水壶,该项目的主程序员MATT 希望把各种数据放到一个壶里,然后以一种指定的格式流出。
Kettle这个ETL工具集,它允许你管理来自不同数据库的数据,通过提供一个图形化的用户环境来描述你想做什么,而不是你想怎么做。
Kettle(现在已经更名为PDI,Pentaho Data Integration-Pentaho数据集成)。
3.kettle的结构
Spoon是构建ETL Jobs和Transformations的工具。Spoon以拖拽的方式图形化设计,能够通过spoon调用专用的数据集成引擎或者集群。
Kettle中有两种脚本文件,transformation(.ktr)和job(.kjb),transformation完成针对数据的基础转换,job则完成整个工作流的控制。
Kettle:四大家族(核心组件)
Chef(中文:厨师)、Kitchen(中文:厨房)、Spoon(中文:勺子)、Pan(中文:平底锅)
Chef—工作(job)设计工具 (GUI方式)。
Kitchen—工作(job)执行器 (命令行方式)。
Spoon—转换(transform)设计工具 (GUI方式)。
pan—转换(transform)执行器 (命令行方式)。
Job和Transformation的差别:Transformation专注于数据的ETL,而Job的范围比较广,可以是Transformation,也可以是Mail、SQL、Shell、FTP等,甚至可以是另外一个Job。
Data Integration Server是一个专用的ETL Server,它的主要功能有:
4. kettle模型概念
Kettle的执行分为两个层次:Job(作业)和Transformation(转换)。
Kettle的执行分为两个层次:Job和Transformation。这两个层次的最主要的在于数据的传递和运行方式
1.Transformation:定义对数据操作的容器,数据操作就是数据从输入到输出的一个过程,可以理解为比Job粒度更小一级的容器,我们将任务分解成Job,然后需要将Job分解成一个或多个Transformation,每个Transformation只完成一部分工作。
(定义对数据操作的容器,数据操作就是数据从输入到输出的一个过程,可以理解为比作业粒度更小一级的容器,我们将任务分解成作业,然后需要将作业分解成一个或多个转换,每个转换只完成一部分工作。)
2.Step:是Transformation内部的最小单元,每一个Step完成一个特定的功能。
3.Job:负责将Transformation组织在一起进而完成某一工作,通常我们需要把一个大的任务分解成几个逻辑上隔离的Job,当这几个Job都完成了,也就说明这项任务完成了。
(负责将[转换]组织在一起进而完成某一块工作,通常我们需要把一个大的任务分解成几个逻辑上隔离的作业,当这几个作业都完成了,也就说明这项任务完成了。
)
4.Job Entry:Job Entry是Job内部的执行单元,每一个Job Entry用于实现特定的功能,如:验证表是否存在,发送邮件等。可以通过Job来执行另一个Job或者Transformation,也就是说Transformation和Job都可以作为Job Entry。
5.Hop:用于在Transformation中连接Step,或者在Job中连接Job Entry,是一个数据流的图形化表示。
在Kettle中Job中的JobEntry是串行执行的,故Job中必须有一个Start的JobEntry;Transformation中的Step是并行执行的。
5. kettle目录介绍
6. kettle核心
Kettle可以被归类为可视化编程语言(Visula Programming Languages,VPL),因为Kettle可以使用图形化的方式定义复杂的ETL程序和工作流。
Kettle里的图就是转换和作业。
可视化编程一直是Kettle里的核心概念,它可以让你快速构建复杂的ETL作业和减低维护工作量。它通过隐藏很多技术细节,使IT领域更贴近于商务领域。
1. 转换
转换(transaformation)是ETL解决方案中最主要的部分,它处理抽取、转换、加载各种对数据行的操作。
转换包含一个或多个步骤(step),如读取文件、过滤数据行、数据清洗或将数据加载到数据库。
转换里的步骤通过跳(hop)来连接,跳定义一个单向通道,允许数据从一个步骤向另一个步骤流动。
在Kettle里,数据的单位是行,数据流就是数据行从一个步骤到另一个步骤的移动。
数据流有的时候也被称之为记录流。
2. 作业
1. 简介
大多数ETL项目都需要完成各种各样的维护工作。
例如,如何传送文件;验证数据库表的存在,等等。而这些操作都是按照一定顺序完成的。因为转换以并行方式执行,就需要一个可以串行执行的作业来处理这些操作。
一个作业包含一个或者多个作业项,这些作业项以某种顺序来执行。作业执行顺序由作业项之间的跳(JOB HOP)和每个作业执行结果来决定。
2.作业项
作业项是作业的基本构成部分,如同转换的步骤,作业项也可以通过图标的方式图形化展示。
但是,如果你仔细观察,还是会发现作业项有一些地方不同于步骤;
在作业项之间可以传递一个结果对象。这个结果对象里面包含了数据行,他们不是以数据流的方式来传递到,二十等待一个作业执行完毕后再传递给下一个作业。
3.作业跳
作业的跳是作业项之间的连接线。他定义了作业的执行路径。作业里每个作业项的不同运行结果决定了作业的不同执行路径。
① 无条件执行:不论上个作业项执行成功或者失败,下一个作业项都会执行。这是一种蓝色的连接线,上面有一个锁的标。
② 当运行结果为真时执行:当上一个作业项执行结果为真时,执行下一个作业项。通常在需要无错误执行的情况下使用。这是一条绿色的连接线,上面有对勾号的图标。
③ 当运行结果为假时执行:当上一个作业项执行结果为假或者没有执行成功,执行一按一个作业项,这是一条红色的连接线,上面有红色停止的图标。
4.参数
对于ETL参数传递是一个非常重要的环节,因为参出的传递会涉及到业务参数是如何抽取的。
参数分为两种:全局参数和局部参数
全局参数:定义在当前用户下.kettle文件夹下的kettle.properties文件来定义。
定义方式是采用键=值的方式来定义 如:start_date=120;
注意:配置前变量后需要重启Kettle
局部参数:是通过”Set Variables” 于”Get Variables” 方式来设置
注意:在”Set Variables”时在当前转换不能马上使用,需要在作业的下一个步骤执行。
参数的使用:Kettle参数的使用:(1)%%变量名%%(2)${变量名}
注意:在SQL中使用变量时需要吧“是否替换参数”勾选上,否则变量无法生效。
3. 步骤
步骤(控件)是转换里的基本的组成部分。
一个步骤有如下几个关键特性:
①步骤需要有一个名字,这个名字在转换范围内唯一。
②每个步骤都会读、写数据行(唯一例外是“生成记录”步骤,该步骤只写数据)。
③步骤将数据写到与之相连的一个或多个输出跳,再传送到跳的另一端的步骤。
④大多数的步骤都可以有多个输出跳。一个步骤的数据发送可以被被设置为分发和复制,分发是目标步骤轮流接收记录,复制是所有的记录被同时发送到所有的目标步骤。
4. 跳(复制和分发)
跳就是步骤之间带箭头的连线,跳定义了步骤之间的数据通路。
跳实际上是两个步骤之间的被称之为行集的数据行缓存(行集的大小可以在转换的设置里定义)。
当行集满了,向行集写数据的步骤将停止写入,直到行集里又有了空间。
当行集空了,从行集读取数据的步骤停止读取,直到行集里又有可读的数据行。
5.数据行-数据类型:
数据以数据行的形式沿着步骤移动,一个数据行是零到多个字段的集合,字段包含以下几种类型。
·String :字符类型数据
·Number:双精度浮点数
·Integer:带符号的长整型(64位)
·BigNumber:任意精度数据
·Date:带毫秒精度的日期时间值
·Boolean:取值为true和false的布尔值
·Binary:二进制字段可以包含图片,声音,视频及其他类型的二进制数据
6.数据行-元数据:
每个步骤对在输出数据行时都有对字段的描述,这种描述就是数据行的元数据。
包含以下一些信息。
·名称:行里的字段名应该是唯一的
·数据类型:字段的数据类型
·格式:数据显示的方式,如Integer的#,0.00。
·长度:字符串的长度或者是BigNumber的长度
·精度:BigNumber类型的十进制精度
·货币符号:¥
·小数点符号:十进制数据的小数点格式。不同文化背景下小数点符号是不同的,一般是(.)或者是(,)。
·分组符号:数值类型数据的分组符号,不同文化背景下分组符号是不同的,一般是点(.),逗号(,),单引号(‘)。
7.并行:
跳的这种基于行集缓存的规则允许每一个步骤都是有一个独立的线程运行,这样并发程度最高。这一规则也允许数据以最小的消耗内存的数据流的方式处理。在数据厂库中我们经常处理大量数据,所以这样并发低消耗内存的方式也是ETL工具的的核心需求。
对于Kettle的转换,不可能定义一个执行顺序,因为所有步骤都以并发方式执行:当转换启动后,所有步骤都同时启动。从它们的输入跳中读取数据,并发处理过的数据写到输入跳中,知道输入跳中不再有数据,就中止步骤的运行,当所有步骤都中止了,整个转换也就中止了(执行顺序要与数据流向分开,因为它们都是并行的操作)。