Kettle学习.docx
《Kettle学习.docx》由会员分享,可在线阅读,更多相关《Kettle学习.docx(45页珍藏版)》请在冰豆网上搜索。
Kettle学习
资源库:
转换和job的保存地点
1、kettle有两种方式连接资源库,一种是纯数据库式,所有的转换全部都保存在一个数据库中;另外一种连接方式是使用文本文件,也就是xml文件,在做完任何转换之后,我们都可以把转换或者Job变成xml文件输出。
Kettle中元素介绍
===========================Transformation======================
●输入:
1、AccessInput
2、CubeInput
3、Excel输入
4、Generaterandomvalue
5、GetFileNames
6、GetFilesRowsCount
7、GetSubFoldernames
8、GetdatafromXML
9、MondrianInput
10、ProppertyInput
11、XBase输入
12、文本文件输入
13、表输入
14、获取系统信息
15、CSVfileinput
●输出:
1、AccessOutput
2、Cube输出
3、ExcelOutput
4、PropertyOutput
5、SQLFileOutput
6、XML输出
7、删除
8、文本文件输出(CSV文件输出,将分隔符改为“,”)
9、表输出
●转换:
1、增加常量用来给查询增加常量列
2、增加序列用来给查询增加序列列
3、字段选择用来选择输出字段
4、拆分字段将某字段按照某个分隔符分割为多个字段
5、排序记录按照某些字段对记录进行排序
6、Numberrange不同范围输出不同的值
7、Addachecksummd5加密等
8、Replaceinstring替换字段值为其他值
9、去除重复记录使用之前所有记录必须已有序
10、值映射
11、Uniquerows(HashSet)
12、计算器对字段值进行+、-、*、/、平方、开放、四舍五入等数学计算以及时间计算。
●Flow:
1、过滤记录
2、Switch/Case
●查询:
1、数据库查询(多表关联时使用,无关联时只使用表输入即可)
●连接
1、记录关联(笛卡尔输出)将多个表记录关联起来(笛卡尔积,不是表连接)
●脚本
1、ModifiedJavaScriptValue
名词解释:
1、hops:
节点连接,一个连接连接两个步骤。
除了指定执行顺序,也可以指定下一个任务将会被执行的条件。
2、
常用的工具
1、SQLEditor:
数据库连接—右键SqlEditor
2、Explore:
数据库连接—右键explore
3、搜索元数据:
CTRL+F
4、设置环境变量:
ctrl+alt+j
变量
1.环境变量:
使用环境变量唯一的问题是:
不能动态的使用变量
2.Kettle变量:
因为环境变量的范围非常广泛,所以我们引入Kettle变量,它们对于设置变量的任务来说是局部的
3.内部变量:
3.1永远被定义(全局变量)
变量名称
示例值
Internal.Kettle.Build.Date
2007/05/2218:
01:
39
Internal.Kettle.Build.Version
2045
Internal.Kettle.Version
3.0.2
3.2转换中被定义
变量名称
示例值
Internal.Transformation.Filename.Directory
D:
\Kettle\Samples
Internal.Transformation.Filename.Name
Denormaliser-2seriesofkey-valueparis.ktr
Internal.Transformation.Repository
/
Internal.Transformation.Name
Denormaliser-2seriesofkey-valueparis.sample
3.3Job中被定义
变量名称
示例值
Internal.Job.Filename.Directory
/home/matt/jobs
Internal.Job.Filename.Name
Nestedjob.kjb
Internal.Job.Name
Nestedjobtestcase
Internal.Job.Repository.Directory
/
变量的使用:
1、unix下:
${variable}
2、%%java.io.tmpdir%%
Job和转换的区别与联系:
1、转换用来完成数据的转换。
2、Job完成整个工作流的控制。
转换
1.转换设置:
Ctrl+t
a)状态:
“产品”|“草案”
b)版本:
转换的版本
c)目录:
转换在资源库中存储的位置
d)日志数据库连接:
使用此链接写到日志表
e)日志表:
指定日志表的名称
f)Update日志步骤:
将当前步骤更新行的编号写入日志表。
Update:
在数据库更新
g)读取日志步骤:
将当前步骤读取行的编号写入日志表。
Read含义:
从源步骤读取
h)Input日志步骤:
将当前步骤输入行的编号写入日志表。
Input含义:
从文件或者数据库输入
i)Write日志步骤:
将当前步骤写入行的编号写入日志表。
Write含义:
写入到目标步骤
j)Output日志步骤:
将当前步骤输出行的编号写入日志表。
Output含义:
输出到文件或者数据库。
转换连接颜色
外观
含义
Green
分发行
Red
复制行
Yellow
给步骤提供信息,分发行
Magenta
给步骤提供信息,复制行
Gray
不可用
Black
命名目标步骤
Blue
侯选连接,使用鼠标中间按钮+拖拉
Orange(Dotline)
一直没有使用的,因为没有数据经过
Red(BoldDotline)
运输在源步骤中出错的行
以上数据与实际有冲突,可选择性参考。
步骤(右键属性)
1、改变开始复制数量:
有时候多次运行相同的步骤是非常有用的。
例如,执行一个数据库查询三次或者三次以上,这是因为数据库连接通常有一个反应时间,改变步骤运行的次数,可以有效的减少反应时间,提高效率。
相当于
2、复制、删除、分离步骤:
步骤的复制、删除和分离
3、步骤的分发、复制:
复制数据意思是说从“A”过来的所有行都被复制到3个目标步骤。
这就意味着最后一个步骤从“A”获取了所有行的三个副本。
事实上,由于每个步骤用不同的线程来运行,到达最后一个步骤的行的顺序可能
和“A”的顺序不一样。
4、定义错误处理:
代替一个转换因为某一个步骤发生错误的时候被中断,你可以引起错误的这些行,进入到一个不同的步骤。
不是所有步骤都有此功能,Js脚本步骤有此功能
5、显示输入/输出字段
6、编辑步骤/编辑步骤描述
文本文件输入
1、没有空行:
不往下一步骤发送空行
2、输出包括文件名:
输出包含文件名字段
3、输出包含行数:
输出字段包含行号
4、格式:
可以是DOS、Unix或混合模式。
UNIX行终止可以是回车、DOS是回车或换行。
混合模式则不验证。
5、编码方式:
默认编码方式。
Unicode编码方式有Utf-8,utf-16
6、记录数量限制:
设置读取记录的行数,0表示所有的。
7、解析日期时是否严格要求:
启用时1月32将变为2月1号
8、错误处理标签:
当错误发生时,错误处理标签可以允许你指定这个步骤将重新做些什么。
9、忽略错误
10、跳过错误行:
如果不跳过错误行,解析错误字段将是空的。
11、错误计数字段:
在输出流中增加一个字段,这个字段将包含错误发生的行数。
12、错误字段字段名:
输出流增加字段,该字段包含错误发生的字段名称。
13、错误文本字段:
输出流增加字段,该字段包含解析错误发生字段的描述。
14、警告文件目录:
当警告发生时,文件将被放进该目录,文件名为:
文件名。
<日期时间>.<错误文件扩展>
15、错误文件目录:
当错误发生时,文件将被放进该目录,文件名为:
文件名.<日期时间>.<错误文件扩展>
16、失败行数文件目录:
当解析发生错误,行号将被放进该目录,文件名将是:
文件名.<日期时间>.<错误行扩展>
17、过滤标签:
可以用来指定文件文件中要过滤的行。
18、过滤字符串:
搜索字符串,将符合条件的行从输出中去掉。
19、过滤器位置:
0:
起始位置。
不填(<0):
表示搜索整个字符。
20、停止在过滤器:
如果想在文本文件遇到过滤字符时停止处理,就指定“Y”。
表输入
1、从步骤插入数据:
指定我们期待读取数据的步骤名称,这些信息能被插入到sql语句。
例如:
sql:
select*fromtwheredatebetween?
and?
:
的数据来自其他步骤
获取系统信息
1、系统日期(可变):
系统时间,每次访问都在改变。
2、系统日期(固定):
系统时间,有转换开始来决定。
即转换开始时间
3、开始日期范围(转换):
根据etl日志表的信息,确定日期范围的开始。
4、结束日期范围(转换):
根据etl日志表的信息,确定日期范围的结束。
5、开始日期范围(作业):
根据etl日志表的信息,确定日期范围的开始
6、结束日期范围(作业):
根据etl日志表的信息,确定日期范围的结束。
7、昨天00:
00:
00:
昨天的开始
8、昨天23:
59:
59:
昨天的结束
9、今天00:
00:
00:
今天的开始
10、今天23:
59:
59:
今天的结束
11、上个月第一天的00:
00:
00:
上个月的开始
12、上个月最后一天的23:
59:
59:
上个月结束
13、本月的第一天00:
00:
00:
这个月的开始
14、本月的最后一天23:
59:
59:
这个月的结束
15、步骤拷贝:
复制步骤
16、转换名称:
转换的名称
17、转换的文件名:
转换的文件名(仅针对XML)
18、最后修改转换的用户
19、转换的最后修改日期
20、转换ID:
日志表中的批处理ID值
22、主机名:
返回服务器的主机名
23、IP地址:
返回服务器的IP地址
24、命令行参数1:
命令行的第一个参数。
25、Kettle版本:
返回Kettle的版本。
26:
Kettle编译版本:
返回Kettle核心库的编译版本
27:
Kettle编译日起:
Kettle核心库的编译日期
28:
Currentprocessidentifier(PID):
生成记录
1、限制:
记录数的条数
2、名称、值
Cube输入
从二进制KettleCube文件中读取数据行
Xbase输入
使用这一步可以读取大多数被称为Xbasefamily派生的DBF文件
1、最常用的是FoxPro
Excel输入
1、工作表名称
2、起始行:
开始读取的行。
3、起始列:
开始读取的列。
4、头部:
检查工作表是否指定了一个头部行。
5、非空记录:
检查是否不需要空行输出。
6、停在空记录:
当遇空行时停止读取。
7、文件名称字段:
步骤输出指定一个包含文件名的字段。
8、工作表名称字段:
步骤输出指定一个包含工作表名称的字段。
9、行号列:
指定输出行号列字段名称。
XML输入
1、LoopXPath:
选择/Rows/Row
2、Namespaceaware:
3、Ignorecomments:
忽略注释
4、ValidateXML:
验证XML,一般不验证
5、Ignoreemptyfile:
忽略空文件
6、Includefilenameinoutput:
输出步骤包含文件名字段
7、Rownuminoutput:
输出包含行号字段。
获取文件名
1、Get:
Allfiles、Onlyfolders、Onlyfiles
2、输出字段包含:
filename、short_filename、path、type(file/folder)、exists(Y/N)、ishidden、isreadable、iswriteable、lastmodifiedtime、size、extension(扩展名)、uri、rooturi
获取文件行数
1、RowsSeparatortype:
CarriageReturn
文本文件输出
1、Runthisasacommandinstead:
把结果输出到命令行或者脚本
2、文件名里包含步骤数:
如果你在多个拷贝中运行步骤,拷贝的数量将包含到文件名中。
3、Includepartitionnrinfilename:
文件名中包含数据分区数量
4、文件名包含日期
5、文件名包含时间
6、追加
7、分隔符
8、封闭符:
封闭字段的一对字符,可选
9、强制在字段周围加上封闭符
10、头部:
如果享有一个头部行,选中
11、尾部:
如果享有一个尾部行,选中
12、格式:
DOS文件的分隔符可以是回车或换行符
13、编码:
指定编码,如果空白就是用系统缺省的编码
14、Compression(压缩):
指定压缩的类型(zip,gzip)
15、Rightpadfields:
在字段最后添加空格或者删除字符,直到长度达到指定
16、Fastdatadump(noformatting):
当处理大量数据到一个文本文件时,提高性能.(不包含任何格式化信息)
17、分拆每一行:
如果n比0大,用n行拆分文本文件,分割成多个部分。
18、AddEndinglineoffile:
指定输出文本的额结束行。
表输出
1、TargetSchema:
目标模式。
要写数据的表的Schema的名称。
允许表明中包含“。
”对数据源来说是很重要的
2、目标表:
要写数据的表名。
3、提交记录数量:
在数据表中用事物插入行。
如果n比0大,每n行提交一次连接。
否则不使用事务,速度会慢一些。
4、裁剪表:
在第一行数据插入之前裁剪表。
5、忽略插入错误:
使Kettle忽略比如违反主键约束之类的插入错误,最多20个警告将被日志记录。
在批量插入的时候这个功能不可用。
6、使用批量插入:
这个选项速度快,默认被选上。
7、表分区数据:
使用这个选项可以在多个表之间拆分数据。
例如把数据放到表s1、s2、s3中来代替之间插入数据到表s中。
例如:
createorreplaceviewsalesas
Select*fromsales_200501
Unionall
Select*fromsales_200502
8、表名定义在一个字段里:
使用此选项可以拆分数据到一个或者多个表里,目标表名可以用你指定的字段来定义。
例如如果你想存储客户性别数据,这些数据可能会存储到表M和表F里面。
这个选项可以阻止这些字段插入到相应的表里。
9、返回一个自动产生的关键字:
往表中插入行时,是否产生一个关键字。
10、自动产生关键字的字段名称:
指定包含关键字的输出字段的字段名称。
插入/更新
1、targetschema:
要写入数据的表的schema名称。
允许表名包含”.”是很重要的。
2、commitsize:
提交之前要改变的行数(插入/更新)。
3、不执行任何更新:
如果被选择,则不执行任何更新,只允许插入。
4、用来查询的关键字:
可以指定字段值或者比较符。
可以用以下比较符:
>、>=、=、<>、<、<=、between、like、isnull、isnotnull
5、用来查询的关键字:
输入用来指定记录的关键字。
6、更新字段:
指定想要插入/更新的字段。
更新(可以用插入/更新替代)
更新只能用来更新,不能用来插入数据。
删除
执行删除操作。
注意:
在输出中,插入/更新、删除、更新对应的是数据库的增、删、改。
序列化到文件(以前是Cubeoutput)
这个步骤存储数据到一个二进制文件。
这个步骤有个优势就是回读的时候,文本文件的内容不需要解析。
这是因为元数据也同时存储在cube文件中。
用输出的Cube文件,用cube输入读入文件练习下。
XML输出
1、文件名中包含步骤号码:
如果你在多个拷贝中运行一个步骤,在文件扩展名的前面,将包含拷贝的号码。
2、分割每一个行:
每个xml文件中包含的记录数。
0表示不分割。
3、正在编码:
在XML文件头部指定。
4、字段选项卡
5、元素名称:
xml文件使用的元素的名称,不指定,则元素名称和字段名相同。
6、10进制:
小数点可以是”.”或者”,”
7、分组:
分组符可以是”,”或者”.”
8、空:
表示当字段值为空时,则用此字段值代替。
Excel输出
利用这个步骤,可以写入数据到一个或者多个文件中。
1、文件名和扩展名:
可以使用变量。
2、头部、尾部:
给文件添加头部和尾部。
3、Splitevery…rows:
分割数据到几个输出文件中。
4、Usetemplate:
使用模板
5、追加excel模板:
是否将Excel输出添加到指定的Excel模板中。
Access输出
1、数据库名:
注意要写入扩展名,否则输出的文件名不包含扩展名”.mdb”
2、创建数据库:
选中则创建数据库。
3、Targettable:
表名。
4、Createtable:
选中则创建数据表。
5、Commitsize:
定义输出数据时的提交尺寸。
数据库查询(Databaselookup)
这个步骤允许你在数据库表中查找值(多个表之间需要进行连接查询时用到leftjoin)。
1、使用缓存:
使用缓存,这意味着在某种查询值的条件下,每次数据库都能返回同样的结果。
流查询
1、源步骤:
数据来源的步骤名称。
2、查询值所需要的关键字:
允许你来指定用来查询值的字段名称。
值总是用“等于”比较符来搜素。
3、接收的字段:
你可以指定用来接收字段的名称,或者在值没有找到的情况下的缺省值,或者你不喜欢旧的字段名称的情况下的新字段名称。
4、PreserveMemory(保留内存):
排序的时候对数据行进行编码以保护内存。
5、Keyandvalueareexactlyoneintegerfield:
排序的时候对数据行进行编码以保护内存。
6、Usesortedlist:
是否用一个排序列表来存储值,它提供更好的内存使用。
7、获取字段:
自动获取源步骤的可用字段的名称,你可以删除你不想查询的字段。
8、获取查询字段:
自动获取输出流中的可用字段名称。
你可以删除你不想返回的字段。
调用数据库存储过程
这个步骤允许运行一个数据库存储过程,获取返回结果。
1、存储过程名称:
调用的存储过程或者函数名称。
2、自动提交:
在运行存储过程的时候自动提交。
3、结果名称:
调用存储过程或者函数返回结果的名称。
4、结果类型:
返回结果的类型。
5、参数:
存储过程或者函数需要的参数列表。
5.1.名称:
字段的名称
5.2.方向:
可以是in,out,inout、
5.3.类型:
使用输出参数,以便Kettle知道返回了什么。
注意:
如果是函数的话,通过结果名称返回值;如果是存储过程的话,通过参数列表返回值。
HTTP客户端
http客户端根据一个附带条件的基准URL,来调用一个简单的调用。
例如:
http:
//?
p1=v1&p2=v2&...,结果存储在指定名称的字符类型字段中。
1、URL:
基准url字符串
2、结果字段名称:
存储结果的字段名称。
3、参数:
用名称——值键值对来定义通过url传递的参数。
字段选择
这个步骤常常用来:
1、选择字段2、重命名字段3、指定字段长度或者精度
以下是三个不同标签的功能:
1、选择和修改:
指定输出流中字段的精确顺序和名称。
2、删除:
指定必须从输出流中删除的字段。
3、元数据:
修改数据字段的名称、类型、长度和精度。
选项:
1、字段名称:
选择或者修改的字段名称。
2、改名:
如果不想改名就留空白。
3、长度、精度:
输入数字指定长度、精度(-1:
代表没有长度、精度指定)
过滤记录
这个步骤允许你根据条件和比较符来过滤记录。
一旦这个步骤连接到先前的步骤中,单机“”,“=”和“”区域来构建条件。
1、发送“true”数据给步骤:
指定条件返回true的数据将发送到此步骤。
2、发送“false”数据给步骤:
指定条件返回false的数据将发送到此步骤。
排序记录
这个步骤利用你指定的字段排序行,无论他们是按照升序还是降序。
备注:
当行数超过5000行的时候,Kettle使用临时文件来排序行。
1、排序目录:
临时文件存储的目录。
如果缺省则为标准的系统临时文件夹。
2、内存里存放的记录数:
存储在内存中的行越多,排序的速度就越快。
3、临时文件前缀:
选择一个好记的前缀,以便在临时目录中容易寻找。
4、压缩临时文件:
当需要完成排序的时候,这个选项将压索临时文件。
添加序列
一个序列是在某个起始值和增量的基础上,经常改变的整数值。
你可以使用数据库的序列,也可以使用Kettle决定的序列。
备注:
Kettle序列在同一个转换中是唯一使用的。
每一次转换运行的时候,序列的值又会重新循环一次(从开始值开始)。
1、使用数据库获取序列
连接名称:
选择数据库序列存在的连接名称。
序列名称:
数据库序列名称。
2、使用计数器计算序列
计数器名称、增量、最大值
空操作(什么也不做)
此步骤什么也不做。
作用:
在你想测试什么的时候充当一个占位符,例如有一个转换,你至少需要两个彼此连接的步骤。
如果你想测试文本文件输入步骤,你可以将它连接到一个D步骤,例如以下示例:
很不幸的是,流查询步骤仅仅能从一个流中查询信息,如果你需要做转换如下:
行转列(RowNormaliser)
这个步骤转动表,标准化数据格式。
例如你想更新一个实际的物理表,这种形式的数据是更容易掌握的。
1、关键字段:
不转的字段
2、构成分组的字段:
标准化的字段名称(例如ProductA,ProductC)
3、目标字段:
你可以制定一个或者多个新值将要转入的字段(例如sales)
拆分字段
拆分的字段类型必须是String。
1、分隔符:
分割字段的符号。
2、字段:
拆分形成的字段列表。
去除重复记录
该步骤从流中移除重复的记录。
1、增加计数器到输出:
如果你想知道多少重复行被去掉,就选择此选项。
分组(Statistics)
在进行分组的时候,只能使用分组字段和聚合函数。
注意:
分组之前,必须先按照分组字段排好序,否则将会出现错误。
1、分组字段:
指定要分组的字段。
2、聚合:
指定需要聚合的字段。
3、包含所有的行:
如果选择这个,输出终究包含所有的行,不仅仅是聚合。
4、临时文件目录:
临时文件存储的目录。
5、临时文件前缀:
指定临时文件文件名的前缀。
6、添加行号,每一个分组重启:
如果你想给每一个组添加行号,选此项。
设置为空值(Nullif)
如果某个字符串的值等于指定的值,设置那个值为空。
计算器
可以进行数值,日期等格式数据的简单计算。
计算器的重要优势是,计算速度比js快几倍。
常用计算
功能
描述
需要字段
数学
A+(-、*、/)B
加减乘除
A和B
A*A…
A2,、开方
A
100*A/B
A和B的百分比
A和B