kettle培训技术文档Word文档下载推荐.docx
《kettle培训技术文档Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《kettle培训技术文档Word文档下载推荐.docx(50页珍藏版)》请在冰豆网上搜索。
创建transformation,job
点击页面左上角的创建一个新的transformation,点击保留到本地路
径,例如保留到D:
/etltest下,保留文件名为EtltestTrans,kettle默许transformation
文件保留后后缀名为ktr
点击页面左上角的创建一个新的job,点击保留到本地途径,例如保
存到D:
/etltest下,保留文件名为EtltestJob,kettle默许job文件保留后后缀名为kjb
创建数据库连接
在transformation页面下,点击左侧的【MainTree】,双击【DB连接】,进行
数据库连接配置。
connectionname自命名连接名称
Connectiontype选择需要连接的数据库
Methodofaccess选择连接类型
Serverhostname写入数据库效劳器的ip地址
Databasename写入数据库名
Portnumber写入端口号
Username写入用户名
Password写入密码
例如如下配置:
点击【test】,若是显现如下提示那么说明配置成功
点击关闭,再点击确信保留数据库连接。
一个简单的ktr例子
目的:
将一个数据库导入到另一个数据库中。
操作步骤:
创建一个transformation,命名为,创建数据库连接
ods,点击【Input】,选中【表输入】,拖到主窗口,释放鼠标,双击打
开
如以下图
点击【Transform】,选中【字段选择】,拖到主窗口,释放鼠标
点击【Output】,选中【表输出】,拖到主窗口,释放鼠标
成立【文本文件输入】和【字段选择】与【字段选择】和【表输出】的连接
双击【表输出】,目标表中写入ZT_TEST_KETTLE,,确信保留
双击【字段选择】,点击获取选择的字段,再点击EdltMapping,点击OK
确信,编辑所有字段对应关系,点确信。
点击
运行那个转换。
,那么将上一个ktr中生成的文本,导入到数据库当中。
一个简单的kjb例子
将上一个transformation在一个job里面挪用执行。
在etlTestJob页面,点击【CoreObjects】,点击【Jobentries】,选中【START】
拖动到主窗口释放鼠标,再选中【Transformation】,拖动到主窗口释放鼠标,
成立【START】和【Transformation】之间的连接。
双击【Transformation】,在Transformationfilename中写入
E:
\kettleWorkspace\,确信保留。
保留创建好的job。
待所有任务都显示成功,那么为job挪用transformation运行成功。
一个增量的例子
增量更新依照数据种类的不同可能能够分成:
1.
只增加,不更新,
2.
只更新,不增加
3.
即增加也更新
4.
有删除,有增加,有更新
下面针对前三种做一个增量的ETL抽取。
进程如下:
依照前面讲解的例子一样,第一成立源表(fina_test1)和目标表(fina_test2),整个设计流程如下:
其中第一个步骤(输入-目标表)的sql可能如下模式:
selectifnull(max(date_seal),'
1900-01-0100:
00:
00'
)fromfina_test2
你会注意到第二个步骤和第一个步骤的连接是黄色的线,这是因为第二个tableinput(输入-源表)步骤把前面一个步骤的输出看成一个参数来用,所有Kettle用黄色的线来表示,第二个tableinput(输入-源表)的sql模式可能如下:
SELECT*FROMfina_test1wheredate_seal>
?
后面的一个问号确实是表示它需要同意一个参数,你在那个tableinput(输入-源表)下面需要指定replacevariableinscript选项和执行每一行为选中状态,如此,Kettle就会循环执行那个sql,执行的次数为前面参数步骤传入的数据集的大小。
关于第三个步骤执行插入/更新步骤需要专门说明一下,
Kettle执行那个步骤是需要两个数据流对照,其中一个是目标数据库,你在目标表里面指定的,它放在用来查询的关键字左侧的表字段里面的,另外一个数据流确实是你在前一个步骤传进来的,它放在用来查询的关键字的右边,Kettle第一用你传进来的key在数据库中查询这些记录,若是没有找到,它就插入一条记录,所有的值都跟你原先的值相同,若是依照那个key找到了这条记录,kettle会比较这两条记录,依照你指定updatefield来比较,若是数据完全一样,kettle就什么都不做,若是记录不完全一样,kettle就执行一个update步骤。
备注:
主键被修改得数据以为是新记录
删除的数据由在仓库中需要保留无需考虑
然后点击新建-job,然后job的核心对象
jobentries拉出组建,进行执行抽取。
创建kettle资料库
资源库是用来保留转换任务的,用户通过图形界面创建的的转换任务能够保留在资源库中。
资源库能够是各类常见的数据库,用户通过用户名/密码来访问资源库中的资源,默许的用户名/密码是admin/admin
资源库并非是必需的,若是没有资源库,用户还能够把转换任务保留在xml文件中。
若是用户需要创建一个资源库,在资源库的登录窗口(PDI启动时的第一个窗口)
中有【新建】按钮,点击该按钮弹出新建资源库窗口,
在该窗口当选择一个数据库连接,若是没有事前概念的数据库连接,那么还要点击【新建】按钮,来创建一个数据库连接。
选择数据库连接后,要为该资源库命名,作为那个资源库的唯一标志,
最后选择【创建或更新】按钮来创建那个资源库。
资源库能够使多用户共享转换任务,转换任务在资源库中是以文件夹形式分组治理的,用户能够自概念文件夹名称。
如何利用kettle读取包括多行表的Excel文件
若是Excel工作表的表头只有一行,利用Kettle读取如此的文件是很容易的.
如果Excel工作表的表头是多行的,或者是分级的就需要在内容标签下正确设置列名所占行数才可以读取.
考虑如此的一个工作表
若是想把里面的12列数据都读出来,就要考虑如何处置多级表头.
步骤设置的详细描述:
步骤一选择文件名,此刻文件或目录里
到所要添加的excel文档,然后点击,确信后,点击
,
步骤二选择要读取的工作表名称和要读取的内容在工作内外的起始位置,也确实是表头开始的行号和列号(那个地址行号和列号是以0开始的)
步骤三设置要读取的内容的一些属性,那个地址要设置表头的所占行数是4行.
步骤四错误处置,选择若是有错误终止仍是继续,错误信息保留的文件等.
(图略)
步骤五选择字段,若是前面的三个步骤(不包括错误处置步骤)都设置正确,在那个页面选择"
获取字段"
字段按钮,就会取得所有的列名称和数据类型.
这里我们可以看到:
多级表头中各级表头的名称被叠加起来,形成了唯一的列名.
点击[预览]按钮能够预览到数据
关于表头跨持续的多行,但不分级的情形也能够利用上述方式处置.
kettle注释:
1、kettle的操纵流能够设置一些简单的时刻,而且能够实现隔间天、周、月(三个只能选一个,不能选那个月的那周那日),可是kettle工具不能关,若是关了,必需从头启动。
2、kettle里面缺少一个编辑的字段的插件,致使字段编辑很麻烦,这只能先sql中进行手写,那个对写sql的要求很高。
一个kettle字段转换(截取)的例子
大致的流程是:
表输入仍是正常的sql查询,没有添加参数。
字段转换(截取)是在
进行修改。
具体样式如下:
具体的用法:
transformFunctions里面包括了字符、数字的一些函数方式,这些函数方式能够解决一些字段需要转化的问题。
Inputfields和Outputfields里面包括了从表输入
进来的字段(数据)。
字段要紧转化的操作界面:
注意下:
substr(xxx,1,2)中的1代表是第一名开始,2代表是取2位,在那个地址面还能够添加if等语句,进行编写。
在字段选择
那里面要配置从js过来的字段,点击列映射
(前提是已经和表输出连接上),那个字段对应要依照你实际从js倒过来的字段和目标表相对应的字段一一对应。
开源ETL工具kettle系列之常见问题
摘要:
本文要紧介绍利用kettle设计一些ETL任务时一些常见问题,这些问题大部份都不在官方FAQ上,你能够在kettle的论坛上找到一些问题的答案
Join
我得到A数据流(不管是基于文件或数据库),A包含field1,field2,field3字段,然后我还有一个B数据流,B包含field4,field5,field6,我现在想把它们‘加’起来,应该怎么样做.
这是新手最容易犯错的一个地方,A数据流跟B数据流能够Join,肯定是它们包含joinkey,joinkey可以是一个字段也可以是多个字段。
如果两个数据流没有joinkey,那么它们就是在做笛卡尔积,一般很少会这样。
比如你现在需要列出一个员工的姓名和他所在部门的姓名,如果这是在同一个数据库,大家都知道会在一个sql里面加上where限定条件,但是如果员工表和部门表在两个不同的数据流里面,尤其是数据源的来源是多个数据库的情况,我们一般是要使用DatabaseJoin操作,然后用两个databasetableinput来表示输入流,一个输入是部门表的姓名,另一个是员工表的姓名,然后我们认为这两个表就可以”Join”了,我们需要的输出的确是这两个字段,但是这两个字段的输出并不代表只需要这两个字段的输入,它们之间肯定是需要一个约束关系存在的。
另外,无论是在做Join,Merge,Update,Delete这些常规操作的时候,都是先需要做一个compare操作的,这个compare操作都是针对comparekey的,无论两个表结构是不是一样的,比如employee表和department表,它们比较的依据就是employee的外键department_id,没有这个comparekey这两个表是不可能连接的起来的..对于两个表可能还有人知道是直接sql来做连接,如果是多个输入数据源,然后是三个表,有人就开始迷茫了,A表一个字段,B表一个字段,C表一个字段,然后就连Join操作都没有,直