kettle入门学习详解

kettle入门学习详解

kettle做为ETL工具,主要用来对数据进行加载、清洗、导入导出等操作,这里主要对kettle的安装、执行、调用、使用中遇到的问题做一些分析详解。

kettle的基础命令行知识:

Kettle的几个子程序的功能和启动方式

Spoon.bat:图形界面方式启动作业和转换设计器。

Pan.bat:命令行方式执行转换Kitchen.bat:命令行方式执行作业。

Carte.bat:启动web服务,用于Kettle的远程运行或群集运行

Encr.bat:密码加密。

Kitchen命令行参数列表及执行方式:

/rep :资源库名称

/user :资源库用户名

/pass :资源库密码

/job :要启动的作业名称

/dir :目录(不要忘了前缀/)

/file :要启动的文件名(转换文件)

/level :日志级别(Error,Nothing,Minimal,Basic,Detailed,Debug,Rowlevel)

/logfile :要写入的日志文件

/listdir :列出资源库里的目录内存中保存日志的

/listjobs :列出指定目录下的作业

/listrep :列出可用资源库

/norep :不要将日志写到资源库中

/version :显示转换的版本,校订和创建日期

/param :设置参数,参数格式=,例如-param:FOO=bar/listparam :列出转换里已经设置好的参数

/export :把作业依赖的所有资源导出到一个ZIP文件里

/maxlogline :内存中保存日志的最大日志行数

/maxlogtimeout :内存中保存日志的最长时间。

生成记录和自定义常量控件一般用于一些固定数据的编写,自定义常量更加灵活,是后来新增的控件,有点像数据库的元数据编辑器,生成记录的缺点是数据重复"删除"控件表示根据与目标表里字段进行匹配来删除其他的被匹配上的值。可以这么理解,查询值所需关键字表示匹配的条件。

即相当于where后面的语句,类似sqldelete from aa where id in(select aa.id from aa join bb on aa.id=bb.id)"更新"控件与"删除"控件一样"插入更新"控件效率比较低,原因是每次插入/更新都会进行sql查询表,因此不到万不得已一般不会用,但是这个控件比较省事Excel输出有65535限制Excel2007输出没有该限输出步骤-文本文件/Json输出功能:文件名,内容,字段选择等基本功能文件分割Servlet输出:http调用参数,"rep","user","pass","trans","level输出步骤-报表输出功能:生成报表(pdf,excel,html等格式),需要事先定义好报表模板

kettle远程执行服务器的方式:

1,首先,输入cmd-->D:\data-integration\Carte.bat localhost 9111-->enter注:重点是找到Carte.bat这个文件地址,然后空格,在其后输入localhost 和端口号 端口号可以写其他,(有时候写8080可能会有被占用的错误),最后一行能看到端口号 表示运行成功,即远程服务已经启动

2,运行Spoon.bat,建立一个资源库,然后新建一个转换(或者使用资源库里面的转换), 然后在左侧子服务器中新建一个服务器,最后运行选择远程执行,最后执行成功。

kettle的作业、转换运行方式问题总结:

在连接两个步骤的时候 连线上的图标类型有三种:红色就不做说明了;黄锁,将鼠标放到锁上会提示:“this is an unconditional hop that means tha regardless of the execution result of 'start'the next job entries will be always executed”这是一个无条件的锁,,意味着那不管执行结果的“开始”接下来的工作条目将总是执行--有道翻译意思大体就是,不管上一步结果如何,将会继续向下执行

绿色箭头after the execution of '' the result of the execution will be evaluated if the result is true(without errors ) this path will be taken在执行“执行的结果将被评估如果结果是真实的(没有错误)这条路会被--有道翻译他的意思是,只有当上一步的任务执行成功并且没有任何错误的时候才会执行下一步。"launch next entries in parallel"的使用说明:在每个作业/转换/其他控件右击--"launch next entries in parallel",这个操作表示在运行时,后面的部分是并行运行的。

表输出控件的使用解释说明:

一般的像步骤名称、数据库连接、目标表、提交记录数量、批量插入、表名字段也输出到表里等就不做说明了这里需要说明的有:

1,表分区数据:分区字段根据前面的步骤产生的,并且表分区分为两个模式:每个月分区数据、每天分区数据。不论是哪种分区方式,最终的数据一份会存在目标表中,一份会保存在分区表中(如果是按照每个月分区数据,则需要提前建一张)、每月分区的表,表名自取,每天分区数据同理,如果没有见这样的表,执行这种操作,结果就会报表不存在的错误。分区字段必须是日期型的,否则可能也会报错

2,自动生成关键字:这里一般是id,即作为非空且唯一的主键来的,自动生成的规律为递增的,即按照数字1开始每次运行加1注:在表输出中,"数据库字段"这一项中,如果表里面本身有些字段你没有进行选择保留,那么输出到表里面的字段就不会包含这个没有保留的字段,但是在后面的步骤中却可以读到这个没有保留的字段,这也是与"字段选择"控件的区别所在

3,清空表:这里表示每次执行表输出操作时,都会将表里面原来的数据清空掉4,最后一个比较不常用但有效的方法---定义错误处理选中"表输出"控件右键-->定义错误处理--》在步骤错误处理设置中-->目标步骤表示将错误信息发送到哪里?错误数列名--记录错误了多少数错误描述名、错误编码列名、允许的最大错误数、允许的最大错误百分比、在计算百分比前最少要读入的行进行错误处理之后,即使整个运行有错也不会停止运行,会将错误的结果发送到一个指定的文件中。

表输入控件相关总结:

1,表输入 表输入里的"替换sql语句里的变量",当sql语句中存在变量时,这个一定得在后面打上勾,且在"从步骤插入数据"后面选择相应的步骤名。在sql语句中可以使用?或者${var}方式来使用变量?变量要求前面步骤传来的参数的顺序一延迟转换 getbytes() getString(输入步骤---表输入java.sql.Types

2 ,文本文件输入: 处理有列分隔符(限定符、逃逸符)的文本文件。 功能选项丰富、有错误处理机制

3,CSV文件输入: 简化了文本文件输入 通过NIO、并行、延迟转换提高性能

4,固定宽度: 列固定宽度的文件,不用解析字符串,性能好注:其中符号"口"可用$变量来表

5,xml输入文件选择方式: 直接选择本地文件 从上个步骤传递文件名XMLPath:自动选择XMLPath循环路径。字段:自动或手动设置优点:使用简单缺点:不能使用大XML文件,占用内存。xml输入(流方式)优点:可用于处理大的XML文件处理方式更灵活、效率更高缺点:使用复杂,要写脚本或java,有一定的使用难度。

获取系统信息控件的用法总结:

在获取系统信息控件中,最多有是个命令行参数,

分别为:命令行参数

1,命令行参数

2,命令行参数10,可以在该控件中来进行设置参数,但是不能预览数据否则会报错(空指针异常),当运行时,只需要给这些参数赋予一定的值,即可输出用参数表示的值。

灵活性比较大。

注:1,命令行参数用多少就写多少,当有些命令行参数不用时,执行会报错 2,命令行参数在代替后面的?变量时,是按照顺序来的,如果给的顺序跟后面? 的顺序有逻辑上的不同,也会报错

3,命令行参数不像设置的变量,虽然给的有名称,但是名称的用处不大开始日期范围(转换)/开始日期范围(作业):相当于日志表里面的开始时间字段结束日期范围(转换)/结束日期范围(作业):相当于日志表里面的结束时间字获取系统信息常见的功能:转换开始时间关键时间点信息最多十个命令行参数主机名/ip/进程号/虚拟机内存等上一个作业的完成情况参数

文本文件输入里面关于逃逸字符和分隔符的用法:

1,关于逃逸字符的用法: 如果一个文本文件中,分隔符为“;”,在某个文本文件中,有个值是: Pentaho said :;"kettle is etl";,那么此时如果没有用到逃逸字符,可能输出结果 为“Pentaho said :”,而要想是输出的结果是自己想要的,那么需要这样来进行 :设置逃逸字符为":",但有点需要注意的是,设置的逃逸字符在设置后,结果中 将不会看到逃逸字符,即逃逸字符被省略掉。即"Pentaho said ;"kettle is etl"" 可以看到";"被保留了,但是“:”不见了

2,分隔符即结果中将以此为分界点,结果中将不显示例如:测试输入文本N1;N2111;ok-1 222;"ok;kkk0\";oo" 244;ok\;1 233;o\;k2 236;ok设置分隔符为";",逃逸字符为"\",观察结果。

关于日志部分学习相关:

1,设置日志缓存大小的方法? 工具-->选项--> 1,日志窗口的最大行数:表示在窗口中显示的日志行数,日志保存在内存中 2,Central log line store timeout in minutes:(内存中保留日志时长) 如果内存中保留的日志过多可能导致OutOfMemory的错误 3,日志视图的最大行数:在视图里的日志最大行数。对应的在kettle.properties文件里设置:KETTLE_MAX_LOG_SIZE_IN_LINE变量KETTLE_MAX_LOG_TIMEOUT_IN_MINUTES变量转换有四个日志表:转换日志表步骤日志表性能日志表日志通道日志注:日志表里有日期时间字段,可作为增量时候的时间判断怎样开启性能监控表?在转换属性(双击空白地方出来转换属性),在"开启步骤性能监控"后面打勾。