Kettle系统知识讲解一

1.kettle简介

1.数据仓库领域的一个重要概念就是数据整合。数据整合就是把不同数据库中的数据组合到一起,对外提供统一的数据视图。
2.kitchen用于执行作业,pan用于执行转换。
3.跳就是从一个作业项/步骤的中心连接到另一个作业项/步骤的一条线。在作业里跳定义的是控制流,在转换里跳定义的是数据流。

4.转换(transformation)是etl解决方案中最主要的部分,它处理抽取,转换,加载各阶段各种对数据行的操作。转换ID是数字,但是作业ID就是字符串。转换里的很多步骤是并行执行的,每个步骤都打开一个独立的数据库连接并开始一个事务。尽管这样在很多情况下会提高性能,但当不同步骤更新同一个表时,也会带来锁和参照完整性的问题。

5.kettle以插件的方式灵活地定义不同种类的资源库,但不论是哪种资源库,他们的基本要素是相同的:这些资源库都使用相同的用户界面,存储相同的原数据。目前有三种常见的资源库:数据资源库,Pentaho资源库,文件资源库。
6.KITCHEN允许你批量使用由Chef设计的任务(例如使用一个时间调度器)。KITCHEN也是一个后台运行的程序。
7.Kettle中有两种脚本文件,transformation和job。transformation完成针对数据的基础转换,job则完成整个工作流的控制。
8.Kettle家族目前包括4个产品:Spoon、Pan、CHEF、Kitchen
9.SPOON 允许你通过图形界面来设计ETL转换过程(Transformation)。
10.PAN 允许你批量运行由Spoon设计的ETL转换 (例如使用一个时间调度器)。Pan是一个后台执行的程序,没有图形界面。
11.CHEF 允许你创建任务(Job)。
任务通过执行每个转换,任务,脚本等等,更有利于自动化更新数据仓库的复杂工作。任务将会被检查,看看是否正确地运行了。

2.kettle下载安装

kettle官网:https://community.hitachivantara.com/docs/DOC-1009855
<https://community.hitachivantara.com/docs/DOC-1009855>
拉到较下部分,找到Download部分中的Older Version,然后就可以下载各个版本了。

3.常见问题


1.今天在用kettle对mysql插入空值”时,发现对空值的处理在插入mysql时,会自动转转换为null值,在网上找一下,需要在kettle.properties文件中添加如下参数,就不会自动转换了。

* windows下文件的位置:C:\Users\用户名.kettle目录中找到kettle.properties文件,增加
KETTLE_EMPTY_STRING_DIFFERS_FROM_NULL=Y;
* linux下文件的位置,位于安装kettle的用户所大的home目录下,在隐藏文件.kettle目录下
2.kettle解决乱码问题。
有好几方面的原因!需要设置指定连接的数据库是utf8。【同时最好保证mysql所在机器的my.ini/my.conf文件也是utf8编码】

* 1)在kettle中设置与源表/目标表表编码的格式
* 2)在mysql中配置文件my.ini中设置默认编码格式
3.kitchen -rep 资源库名称 -job 作业名称 -level Error 错误日志。kitchen 是kettle
的内置命令。错误日志的目录以及保存的日志文件都得手动建立

4.使用kitchen运行文件,命令如下:
D:\Program Files\pdi-ce-7.1.0.0-12\data-integration>kitchen /file
E:\kettle\MyKettle\JOB_TEMPLATE_PMS.kjb
主要日志输出如下:
WARNING: Using java from path DEBUG: _PENTAHO_JAVA_HOME= DEBUG:
_PENTAHO_JAVA=java.exe D:\Program Files\pdi-ce-7.1.0.0-12\data-integration
C:\Windows\system32 系统找不到指定的路径。 系统找不到指定的路径。 C:\Windows\System32>"java.exe"
"-Xms1024m" "-Xmx2048m" "-XX:MaxPermSize=256m"
"-Dhttps.protocols=TLSv1,TLSv1.1,TLSv1.2" "-Djava.library.path=libswt\win64"
"-DKETTLE_HOME=" "-DKETTLE_REPOSITORY=" "-DKETTLE_USER=" "-DKETTLE_PASSWORD="
"-DKETTLE_PLUGIN_PACKAGES=" "-DKETTLE_LOG_SIZE_LIMIT=" "-DKETTLE_JNDI_ROOT="
-jar launcher\pentaho-application-launcher-7.1.0.0-12.jar -lib ..\libswt\win64
-main org.pentaho.di.kitchen.Kitchen -initialDir"D:\Program
Files\pdi-ce-7.1.0.0-12\data-integration"\ /file
E:\kettle\MyKettle\JOB_TEMPLATE_PMS.kjb Error: Unableto access jarfile
launcher\pentaho-application-launcher-7.1.0.0-12.jar D:\Program Files\pdi-ce-7.1
.0.0-12\data-integration>kitchen /file E:\kettle\MyKettle\JOB_TEMPLATE_PMS.kjb
WARNING: Using java from path DEBUG: _PENTAHO_JAVA_HOME= DEBUG:
_PENTAHO_JAVA=java.exe D:\Program Files\pdi-ce-7.1.0.0-12\data-integration
系统找不到指定的路径。 系统找不到指定的路径。 D:\Program Files\pdi-ce-7.1.0.0-12\data-integration>
"java.exe" "-Xms1024m" "-Xmx2048m" "-XX:MaxPermSize=256m"
"-Dhttps.protocols=TLSv1,TLSv1.1,TLSv1.2" "-Djava.library.path=libswt\win64"
"-DKETTLE_HOME=" "-DKETTLE_REPOSITORY=" "-DKETTLE_USER=" "-DKETTLE_PASSWORD="
"-DKETTLE_PLUGIN_PACKAGES=" "-DKETTLE_LOG_SIZE_LIMIT=" "-DKETTLE_JNDI_ROOT="
-jar launcher\pentaho-application-launcher-7.1.0.0-12.jar -lib ..\libswt\win64
-main org.pentaho.di.kitchen.Kitchen -initialDir"D:\Program
Files\pdi-ce-7.1.0.0-12\data-integration"\ /file
E:\kettle\MyKettle\JOB_TEMPLATE_PMS.kjb Java HotSpot(TM)64-Bit Server VM
warning: ignoring option MaxPermSize=256m; support was removed in 8.0 22:43:53,
302 INFO [KarafBoot] Checking to see if org.pentaho.clean.karaf.cache is enabled
22:43:57,382 INFO [KarafInstance]
*******************************************************************************
*** Karaf Instance Number:1 at D:\Program Files\pdi-ce-7.1.0.0-12\data-int ***
*** egration\.\system\karaf\caches\kitchen\data-1 *** *** FastBin Provider Port:
52901 *** *** Karaf Port:8802 *** *** OSGI Service Port:9051 ***
*******************************************************************************
七月18, 2018 10:43:57 下午 org.apache.karaf.main.Main launch 信息: Installing and
starting initial bundles 七月18, 2018 10:43:58 下午 org.apache.karaf.main.Main
launch 信息:All initial bundles installed and set to start 七月 18, 2018 10:43:58
下午 org.apache.karaf.main.Main$KarafLockCallback lockAquired 信息: Lock acquired.
Setting startlevelto 100 2018/07/18 22:43:58 - Kitchen - Start of run. Creating
configuration from org.apache.karaf.command.acl.jaas.cfg Creating configuration
from org.ops4j.pax.url.mvn.cfg ··· Creatingconfiguration from
org.pentaho.features.cfg 七月18, 2018 10:44:01 下午
org.pentaho.caching.impl.PentahoCacheManagerFactory$RegistrationHandler$1
onSuccess 信息:New Caching Service registered 2018-07-18 22:44:12.612
:INFO:oejs.Server:jetty-8.1.15.v20140411 2018-07-18 22:44:12.641
:INFO:oejs.AbstractConnector:Started NIOSocketConnectorWrapper@0.0.0.0:9051 七月
18, 2018 10:44:12 下午 org.apache.cxf.bus.blueprint.NamespaceHandlerRegisterer
register 信息: Registered blueprint namespace handler for
http://cxf.apache.org/blueprint/core 七月18, 2018 10:44:12 下午 org.apache.cxf.bus
.blueprint.NamespaceHandlerRegistererregister 信息: Registered blueprint
namespace handlerfor http://cxf.apache.org/configuration/beans 七月 18, 2018 10:44
:12 下午 org.apache.cxf.bus.blueprint.NamespaceHandlerRegisterer register 信息:
Registered blueprint namespace handlerfor http://cxf.apache.org/configuration
/parameterized-types 七月18, 2018 10:44:12 下午 org.apache.cxf.bus
.blueprint.NamespaceHandlerRegistererregister ··· 2018/07/18 22:44:14 -
writeData.0 - Connected to database [connToStagingDB] (commit=1000) Wed Jul 18
22:44:14 CST 2018 WARN: Establishing SSL connection without server's identity
verificationis not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+
requirements SSL connection must be established bydefault if explicit option isn
't set. For compliance with existing applications not using SSL the
verifyServerCertificateproperty is set to 'false'. You need either to
explicitly disable SSL by setting useSSL=false,or set useSSL=true and provide
truststorefor server certificate verification. 2018/07/18 22:44:14 -
dataFromPMS_t_pms_employee.0 - Finished reading query, closing connection. 2018/
07/18 22:44:14 - dataFromPMS_t_pms_employee.0 - 完成处理 (I=5, O=0, R=0, W=5, U=0,
E=0) 2018/07/18 22:44:15 - writeData.0 - 完成处理 (I=0, O=5, R=5, W=5, U=0, E=0)
2018/07/18 22:44:15 - JOB_TEMPLATE_PMS - 开始项[Log Job Success] Wed Jul 18 22:44:
15 CST 2018 WARN: Establishing SSL connection without server's identity
verificationis not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+
requirements SSL connection must be established bydefault if explicit option isn
't set. For compliance with existing applications not using SSL the
verifyServerCertificateproperty is set to 'false'. You need either to
explicitly disable SSL by setting useSSL=false,or set useSSL=true and provide
truststorefor server certificate verification. 2018/07/18 22:44:15 -
JOB_TEMPLATE_PMS - 开始项[END] 2018/07/18 22:44:15 - JOB_TEMPLATE_PMS - 完成作业项[END]
(结果=[true])2018/07/18 22:44:15 - JOB_TEMPLATE_PMS - 完成作业项[Log Job Success]
(结果=[true])2018/07/18 22:44:15 - JOB_TEMPLATE_PMS - 完成作业项[Import Table]
(结果=[true])2018/07/18 22:44:15 - JOB_TEMPLATE_PMS - 完成作业项[check execution
window] (结果=[true])2018/07/18 22:44:15 - JOB_TEMPLATE_PMS - 完成作业项[Logging Job
running Status] (结果=[true])2018/07/18 22:44:15 - JOB_TEMPLATE_PMS - 开始项[显示消息对话框]
2018/07/18 22:44:15 - JOB_TEMPLATE_PMS - 完成作业项[显示消息对话框] (结果=[true]) 2018/07/18
22:44:15 - JOB_TEMPLATE_PMS - 完成作业项[Get start date] (结果=[true]) 2018/07/18 22:44
:15 - JOB_TEMPLATE_PMS - 完成作业项[check running status] (结果=[true]) 2018/07/18 22:
44:15 - JOB_TEMPLATE_PMS - 任务执行完毕 2018/07/18 22:44:15 - Kitchen - Finished! 2018
/07/18 22:44:15 - Kitchen - Start=2018/07/18 22:43:58.631, Stop=2018/07/18 22:44
:15.403 2018/07/18 22:44:15 - Kitchen - Processing ended after 16 seconds.

5.如果不是在kettle资源库中创建的.kjb或.ktr,那么在你将这些移动到资源库之后,无法修改其保存目录。因为这些文件的保存路径是被记录在文件的信息中的。所以无法更换保存目录【但可以使用另存为去保存】
如果是在资源库中建立的job/transform等,那么最好不要使用更换文件夹名等操作。相反,如果没有建立资源库,则直接使用是没有问题的。
6.下面提供一个kettle版本的循环实现:
var count; count = parent_job.getVariable("V_ID"); if(count == 2){ false; }else
{count++; parent_job.setVariable("V_ID", count); true; }
step:
“值映射”,把输入流中指定的值,通过映射关系,转换成另一个值。
“字段选择”:对输入流的一种常用操作。例如,删除列,重命名列,转换列的数据类型,最后生成特定的输出格式。

使用变量替换和使用参数。
01.使用变量:变量要在使用变量的转换去的前面进行某个转换设置。设置变量的转换往往是作业里的第一个转换。
02.使用参数:这种方法需要在“表输入”步骤前面有一个步骤,用来给”表输入”步骤提供一个货多个参数,这些参数替换“表输入”步骤的SQL语句里的问号。

7.在windows环境下执行,如果有命名参数需要上传,则应使用如下格式:
kitchen -file:E:\kettle\MyKettle\JOB_EXTRACT.kjb
"-param:CUR_TASK=KTR_TEMPLATE"
"-logfile:C:\Users\Administrator\Desktop\kettlelog.log"参数的地方必须使用”“引起来。

8.linux脚本下执行kitchen
./kitchen.sh -rep=GsBdcJobRps -dir=/datajob/olss/bns/olssbns_oama/jobs
-job=JobOlssBnsCabinetApproingMnt -param:STC_DAY='2018-07-18'
-param:DATA_BATCH_NO='201807018001' -param:P_DIM_STSG_TYPE='2'
-param:DATA_VERSION='1'

运行job.kjb文件,有两个参数files.dir=/opt/files 、max.date=2010-06-02
Linux: ./kitchen.sh-file:job.kjb -param:files.dir=/opt/files
-param:max.date=2010-06-02
Windows: Kitchen.bat -file:job.kjb
“-param:files.dir=/opt/files”“-param:max.date=2010-06-02”

9.kettle中的variable 与 argument,parameter的区别

* variable 即environment variables(环境变量或全局变量),即使是不同的转换它们也拥有同样的值,在需要的地方,直接
%%V_YES_DATE%%,或者${V_YES_DATE}就可以得到;
* 而argument(位置参数)和parameter(命名参数),可以映射为局部变量,只针对一个特定的转换,比如像是限定结果集的大小和过滤条件。
10.kettle命令行参数
/ref 资料库名称
/user 用户名
/pass 用户密码
/job 要启动的作业名称
/dir 目录(不要忘了/前缀)
/file 要启动的文件名(转换文件)
/level 日志级别
/logfile 要写入的日志文件
/listdir 列出资料库的目录
/listjobs 列出指定目录下的作业
/listrep 列出可用资料库
/expref 将资料库里所有对象导出到xml文件
/noref 不要将日志写到资料库中
/safemode 安全模式下运行,有额外检查
/version 显示转换的版本,校订和创建日期
/param 设置参数,参数格式为=,例如 -param.foo=bar 或者 /name:value
/listparam 列出转换里已经设置好的参数
/export 把作业依赖的所有资源导出到一个zip文件里
/maxloglines 内存中保存日志的最大日志行数
/maxlogtimeout 内存中保存日志的最长时间

11.报错如下:
2018/07/20 10:19:54 - JOB_EXTRACT - 开始项[invalid Para] Fri Jul 20 10:19:54 CST
2018 WARN: Establishing SSL connection without server's identity verification
is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements
SSL connection must be establishedby default if explicit option isn't set. For
compliance with existing applications not using SSL the verifyServerCertificate
property is set to 'false'. You need either to explicitly disable SSL by
setting useSSL=false, or set useSSL=true and provide truststore for server
certificate verification.
不大清楚这个warn是怎么回事儿。

12.使用对话框进行设计
在对话框中使用${variable}。
13.注意kettle中Integer与Number类型?
15.“表输入”控件的复制,不会复制数据库连接等配置!!!所以说如果你需要复制控件,还得自己手动修改一下数据库连接信息【如果是跟数据库连接有关的控件】
16.kettle中的“执行SQL脚本”这个操作中的参数是无法直接显示出来的【因为没有run整个代码,所以无法显示出来】,但是只要前续的变量的确存在即可。
17.转换的名字和你保存的转换名字应该一样。【这样方便查找修改】
18.系统变量只在转换操作中,系统变量中的值的变量名称需要自己设置。右击“类型”字段,选择自己要用的东西
19.如何通过转换,以数据行的形式处理数据,然后解释如何使用作业以工作流的形式将转换连接起来。

20.尽量使用已提供的各种组合来完成任务。在ETL流程中所有未指定的字段都会自动地传递到下一个组件。也就是说,输入中的字段会自动出现在输出中,除非中间过程特别设置了终止某个字段的传递。

21.如果步骤里发生了读取错误(转换错误,丢失字段等),而且没有做错误处理,全部转换都会失败。如果使用了错误处理,错误行就会被发送到另外一个步骤,在另外一个步骤里,错误数据会被保存在文件或数据库表里。

友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:ixiaoyang8@qq.com
QQ群:637538335
关注微信