kettle总结

kettle总结:

转换:
以数据行的形式处理数据。
作业:
以工作流的形式将转换连接起来。
转换跳:
定义了步骤之间的数据通路,两个步骤之间的行集的数据行缓存,
当行集满了,向行集写数据的步骤停止写入,直到行集又有了空间;
当行集空了,从行集读数据的步骤停止读取,直到行集里又有可读的数据行;
跳在转换里不能循环;
基于跳的行集缓存规则允许每个步骤都由一个独立的线程运行,也允许数据以最小消耗内存的数据流的方式来处理。
数据行:
行集里的所有行都应该有同样的数据结构。
例:当从多个步骤向一个步骤里写数据时,多个步骤输出的数据行应该又相同的结构,
即字段相同,字段数据类型相同,字段顺序相同;
字段元数据长度不会在转换中发生变化。
例:字符串,浮点数不会自动截去长度以适应指定的长度。
默认情况下,空字符串("")被认为与null相等。可通过KETTLE_EMPTY_STRING_DIFFERS_FROM_NULL设置。
作业项:
一个作业只能定义一个开始作业项。
回溯算法:
作业中存在多条路径时,使用回溯算法来执行作业里的所有作业项;
作业可以嵌套其他作业,作业可以创建循环。
作业项结果:
一组数据行;一组文件名;读写输入输出更新删除拒绝的行数和转换的错误数;脚本作业项的退出状态。
一组数据行:
在转换里使用“复制行到结果”设置这组数据,
在转换里用“从结果获取行”获取这组数据,
在作业项里,设置执行“执行每一输入行”可以循环这组数据行。
一组文件名:
在转换里使用“复制文件到结果”设置这组文件,这组文件名是所有与作业项发生过交互的文件的名称,
在转换里使用“从结果获取文件”获取这组文件名。
JavaScript作业项:
可以获取前一个作业项是否成功执行,前一个作业项退出状态,已执行的作业项的个数,错误,读取,更新删除个数等。
数据库连接:
在作业里,每一个作业项都打开和关闭一个独立的数据库连接。转换也是如此。
转化里的步骤是并行执行的,每个步骤都打开一个独立的数据库连接并开始一个事务。
当不同步骤更新同一个表时,也会带来锁和参照完整性问题。
kettle的连接有数据库连接池,可以在指定的数据库连接里面指定一开始连接池里面放多少个数据库连接,
在创建数据库连接的时候就有Pooling 选项卡,里面可以指定最大连接数和初始连接数,这可以一定程度上提高速度。
数据库连接池:
Apache通用数据库连接池,如果你运行了很多小的转换或作业,这些转换或作业里又定义了生命期短的数据库连接,
连接池选项就显得有意义了,连接池选项不会限制并发数据库连接的数量。
数据库事务:
一个转换为一个事务,转换设置对话框的杂项”使用唯一连接“,选中这个选项,默认关闭批量提交。
该转换中所有步骤里的数据库连接都是用同一数据库连接。只有所有步骤都正确,转换正确执行,才提交事务,否则回滚事务。
一个步骤一个事务,默认一个步骤一个独立的数据库连接一个事务,需关闭批量提交。
一个批次一个事务,打开批量提交,并设置批量提交数,会将每批次数据拼接成一条SQL执行并提交事务。
一条语句一个事务,打开批量提交,并设置批量提交数为1。
数据库集群:
如果使用很多小的数据库来处理数据,使用数据库分片技术来分散数据加载,可以在数据库连接对话框的“集群”标签下设置分区。
一般采用标识符计算余数的方法来决定分片的数据保存到哪个数据库实例中。
虚拟文件系统:
Kettle使用Apache的通用VFS作为文件处理接口,支持URL,zip等形式。
例如:“文本文件输入”,目录:zip:file:///C:/input/test.zip,通配符:.*.txt$:查找zip文件里所有以.txt结尾的文件。
变量:
系统设置和用户定义,系统变量包括Java虚拟机变量和Kettle内部定义的变量。
用户自定义变量:
1、.kettle目录下kettle.properties文件;格式:name=value,中文乱码,需用Unicode码,再对Unicode码进行转换。
2、设置变量步骤;
3、JavaScript步骤等;
参数:
转换或作业设置对话框,在“命名参数”标签页面下设置这些参数,参数可以通过默认值赋值,也可以在运行时给参数赋值,参数赋值>默认值;
如:sh pan.sh -file:/pentaho/test.ktr -param:input_param=test,为input_param赋值为test,windows环境=被空格替换,可使用"=";
变量和参数的使用:
可使用位置:菱形的内有$符号标志的输入框,Ctrl+Shift+空格(Ctrl+空格)可显示所有变量,${}或%%input_param%%引用变量。
变量运行时以递归的方式解析,可以在一个变量里使用另一个变量。
常用系统变量:
${Internal.Transformation.Filename.Directory}当前转换目录路径;
${Internal.Job.Filename.Directory}当前作业目录路径;
${Internal.Entry.Current.Directory}当前运行流程入口作业所在路径;
文本文件输入:
查看文本编码格式:浏览器打开文本文件,视图->编码,查看文件编码格式;
需指定文件格式(DOS,UNIX,Mixed):用来区分文件换行符;
文本输出为windows格式时,文本行以\r\n分割;Unix/linux格式,文本行以\n分割;Mac格式,文本行以\r分割;跨不同系统时,结尾字段会识别错误,如:Windows格式文件,上传到Linux系统时,每一行最后一个字段会多"\r";
指定逃逸字符:用来读取字段数据里包含分隔符的字段,通常是反斜线(\);
“文本文件输入”步骤比“CSV”和“固定宽度文件”输入占用更多内存和CPU处理能力;
XML文件处理:
验证XML数据:
1、验证XML文件是否有效,基本验证,只验证XML是否有完整的开始和结束标签,各层嵌套的结构是否完整;
2、DTD验证:检查XML文件的结构是否符合DTD文件要求;
3、XSD验证:检验XML文件的结构是否符合XML Schema定义文件的要求;
处理过程错误:
1、转换,所有步骤都运行成功,转换为成功,任何地方出错了,都会返回失败;
2、作业,最后执行的作业项成功,整个作业为成功,最后执行的作业项失败,整个作业失败;
kettle脚本:
1、相同处理逻辑java表达式性能高于JavaScript代码;
2、正则表达式,不仅可以匹配正则,还可以获取匹配到的组信息赋值给某个字段,类似Matcher.group();
增加序列:
1、一个转换中有多个“增加序列”步骤时,如果每个“增加序列”步骤里设置相同的“计数器名称”,那么这些步骤使用同一个计数器,可以保证每个步骤输出不同的序列值;
2、如果多次运行同一个转换,没有内置方法可以把偏移值设置为上次转换运行后的序列值;
3、可以使用获取偏移值设置参数,在“起始值”处引用参数,动态设置偏移量;
4、序列超过最大值,计数器就会从起始值重新开始;

增加插入速度:

useServerPrepStmts=false
rewriteBatchedStatements=true
useCompression=true
设置rewriteBatchedStatements=true时,表输出批量提交为,拼接成一个SQL一次输出,不设置为每条输出,到提交数量进行commit;

增加读速度:

useServerPrepStmts=true
cachePrepStmts=true

解决乱码:

characterEncoding = utf8

Excel输入:

表格类型引擎:Excel 97-2003 XLS (JXL),Excel 2007 XLSX (Apache POI),Excel 2007 XLSX (Apache POI Streaming),Open Office ODS (ODFDOM);
功能上:
Excel 97-2003 XLS (JXL)读.xls结尾excel;
Excel 2007 XLSX (Apache POI)读.xls和.xlsx结尾的excel;(Microsoft Excel 输出生成的excel只能使用该方法读)
Excel 2007 XLSX (Apache POI Streaming)读.xlsx结尾的excel;(读Microsoft Excel 输出生成的excel时,出现数据窜行,长数据被截取等情况)
性能上:
Excel 2007 XLSX (Apache POI)读大量数据文件容易卡死;(2G内存读10W条数据内存溢出)
Excel 2007 XLSX (Apache POI Streaming)可读大量数据的excel文件;

分隔符,文本限定符,逃逸字符:

分隔符:1、将数据分割为多列;2、字段含有分隔符将会错切,可以用文本限定符和逃逸字符优化;3、分隔符为空一行会识别成一个字段;
文本限定符:1、文本限定符限定字段的开始和结束;2、在文本限定符处会进行切割,直到遇到下一个文本限定符,两个文本限定符之间为一个字段,可能导致字段列数增加或减少;3、可以为空;
逃逸字符:1、如果字段中存在该字符将被替换为“”(空);2、逃逸字符+分隔符,该分割符处不分割;3、逃逸字符+文本限定符,该文本限定符失效,寻找下一个文本限定符;4、可以为空;

kettle配置文件加密解密:

加密:
kettle安装目录下:
windows系统命令行执行:Encr.bat -kettle password,如:Encr.bat -kettle 123456
linux/mac系统命令行执行:encr.sh -kettle password,如:encr.sh -kettle 123456
得到生成的:Encrypted 2be98afc86aa7f2e4cb79ce10bec3fd89
解密:
JavaScript脚本:
var setValue = org.pentaho.di.core.encryption.Encr.decryptPasswordOptionallyEncrypted(‘Encrypted 2be98afc86aa7f2e4cb79ce10bec3fd89’);

kettle发送邮件:

服务器选项,验证窗口,密码为授权密码,需发送邮件的邮箱开通SMTP传输协议,并得到授权码;

行扁平化:

行扁平化,多行记录只有一个字段不同时,将不同字段转变为列;
此控件只能满足相同数据行(一列不同)数据一样的情况,一旦出现不一样的情况将不再适用。

SQL语句使用参数:(有时需要加’’)

1、?
适用于:SQL语句替换参数,且参数为String;
需勾选:替换SQL语句中的变量;
需勾选:执行每一行;
需选择:从步骤中插入数据(选择插入数据的步骤)。
2、${参数名}/%%参数名%%
适用于:任何地方,任何数据类型调用,已经定义的参数;
需:本转换定义的参数,只能在一下个转换使用;
需:替换SQL语句时,需勾选替换SQL语句中的变量。

kettle批量导入es:

1、ketelle版本8,es版本6,其他版本导入需修改kettle中elactissearch插件;
2、满足版本使用Elasticsearch bulk insert插件,插件Servers配置,端口使用TCP端口,端口默认9300;
3、如果修改了es集群名称,插件Setting配置,cluster.name和相应值;
4、Id不能重复。

kettle排序的使用:

1、排序行的步骤根据您指定的字段和它们是否应该按升序或降序排序;
2、当行数超过指定的排序大小(默认为100万行)时候,kettle必须使用临时文件排序行;
3、步骤名称:名称在整个转换中应该是唯一的;
4、排序目录:默认当前操作系统的标准临时文件目录;
5、临时文件前缀:选择临时文件的前缀,便于识别;
6、排序缓存大小:默认内存可以排序100万行数据。存储在内存中的行越多,排序过程就越快,因为必须使用更少的临时文件;
7、未使用内存值:如果排序算法发现它的空闲内存比指定的数字少,那么它就会开始将数据页到磁盘上。

kettle并发执行调优:

1、执行速度为查询速度,按查询时间优化并发,如:前面查询(查询时间短)的多分数据,后面查询(查询时间长)少分数据;
2、执行速度为查询之后得速度,之后得操作会影响查询速度,之后操作速度一致,查询均分数据。

kettle连接neo4j:

1、通过表输入连接,全表(标签)扫描时,数据量过大,会导致kettle运行暂停;
2、通过neo4j插件连接,全表扫描不会卡死kettle。

kettle相同参数循环执行:

得到参数并执行操作的job/ktr,将执行每一个输入行"打对号"(第一个输入行都执行一遍job之后,第二…循环执行)。

kettle设置定时任务:

1、编辑.sh脚本文件:
#export JAVA_HOME=/opt/jdk1.8.0_191
#export JRE_HOME=/opt/jdk1.8.0_191/bin
#export PATH=$PATH:$JAVA_HOME/bin
#定义参数
kettle=/home/eb/src/data-integration/kitchen.sh
job=/home/eb/src/singleDiseaseByZheErBao1/ODS_OR_Test_Report.kjb
log=/home/eb/src/log/ODS_OR_Test_Report
#设置时间
if [ -n “$1” ]
then
exe_date=$1
else
exe_date=$(date +%Y%m%d)
fi
#执行脚本
nohup $kettle -file:$job -level:Basic>>${log}${exe_date}.log &
nohup $kettle -file:$job -param:i_acctdt=$i -level:Error>>${log}.${i}.log
#参数说明
-rep : Repository name 任务包所在存储名
-user : Repository username 执行人
-pass : Repository password 执行人密码
-job : The name of the job to launch 任务包名称
-dir : The directory (don’‘t forget the leading / or )
-file : The filename (Job XML) to launch
-level : The logging level (Basic, Detailed, Debug, Rowlevel, Error, Nothing) 指定日志级别
-log : The logging file to write to 指定日志文件
-listdir : List the directories in the repository 列出指定存储中的目录结构。
-listjobs : List the jobs in the specified directory 列出指定目录下的所有任务
-listrep : List the defined repositories 列出所有的存储
-norep : Don’'t log into the repository 不写日志
2、crontab设置定时任务:
44 * * * * /bin/sh /home/ubuntu/Desktop/kettle_ktr/fusion_execution.sh
第一个,一小时当中的第几分钟,0-59,*表示每一分钟;
第二个,一天当中的第几个小时,0-23,*表示每一小时;
第三个,一月当中的第几天,1-31,*表示每一天;
第四个,一年当中的第几个月,1-12,*表示每一月;
第五个,一周当中的星期几,0-7(0和7都代表星期日),*表示每一星期;
0 12-23/2 * * *,表示每月每天从12点开始每两小时执行一次;

将当前使用过的kettle迁移到其他环境时:

1、删除使用缓存${KETTLE_HOME}/system/karaf/caches;
2、删除{kettle_home}/system/karaf/data;

kettle调用http请求:

http post:调用post接口;
http client:调用get接口;
Request entity field:请求实体,一般为JSON串;
Body(Header)Parameters:请求头设置;
Query parameters:请求参数设置;
如果请求实体类型默认识别不正确,可先增加参数Content-Type,再在Body(Header)Parameters设置Content-Type;
如:增加参数Content-Type=application/json;Body(Header)Parameters设置Name=Content-Type Parameter=Content-Type;

Excel输出、Microsoft Excel 输出、文本文件输出:

文件格式:
Excel输出.xls;
Microsoft Excel 输出.xls或.xlsx;(只能使用Excel 2007 XLSX (Apache POI)读)
文本文件输出.txt或.csv;
输出速度:
Excel输出速度最慢大量数据不建议使用;
Microsoft Excel 输出可选择Stream XLSX data增加输出速度;
文本文件输出速度与Microsoft Excel 输出选择Stream XLSX data接近;
输出格式:
Excel输出,输出存在换行字段不乱序;
Microsoft Excel 输出,输出存在换行字段不乱序;
文本文件输出,输出存在换行字段乱序;

job调用JavaScript脚本必须用布尔类型结尾(kettle8.2);

kettle并行脚本,使用写日志插件将日志信息输出到数据库,写入数据库时日志有可能丢失;

csv输入与文本输入的区别:

1、csv输入没有找不到文件时会抛出异常,文本输入不会;
2、csv输入存在“字段中有回车换行”选项,文本输入不存在“字段中有回车换行”选项(kettle8.2+);
3、csv输入不支持正则表达式,文本输入支持正则表达式;
4、csv输入与表输入合并时,会报字符串类型不匹配问题;
5、csv输入读取.txt文件时,不能有效识别分隔符,会出现部分分隔符识别错误;

参与评论 您还未登录,请先 登录 后发表或查看评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

喜阳阳阳阳啊

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值