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)。 任务通过执行每个转换,任务,脚本等等,更有利于自动化更新数据仓库的复杂工作。任务将会被检查,看看是否正确地运行了。
kettle官网:https://community.hitachivantara.com/docs/DOC-1009855拉到较下部分,找到Download部分中的Older Version,然后就可以下载各个版本了。
1.今天在用kettle对mysql插入空值”时,发现对空值的处理在插入mysql时,会自动转转换为null值,在网上找一下,需要在kettle.properties文件中添加如下参数,就不会自动转换了。
KETTLE_EMPTY_STRING_DIFFERS_FROM_NULL=Y
;2.kettle解决乱码问题。
有好几方面的原因!需要设置指定连接的数据库是utf8。【同时最好保证mysql所在机器的my.ini/my.conf文件也是utf8编码】
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: Unable to 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 startlevel to 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
···
Creating configuration 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.NamespaceHandlerRegisterer register
信息: Registered blueprint namespace handler for http://cxf.apache.org/configuration/beans
七月 18, 2018 10:44:12 下午 org.apache.cxf.bus.blueprint.NamespaceHandlerRegisterer register
信息: Registered blueprint namespace handler for http://cxf.apache.org/configuration/parameterized-types
七月 18, 2018 10:44:12 下午 org.apache.cxf.bus.blueprint.NamespaceHandlerRegisterer register
···
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 verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by 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.
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 verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by 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.
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的区别
%%V_YES_DATE%%
,或者${V_YES_DATE}
就可以得到;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 established by 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.如果步骤里发生了读取错误(转换错误,丢失字段等),而且没有做错误处理,全部转换都会失败。如果使用了错误处理,错误行就会被发送到另外一个步骤,在另外一个步骤里,错误数据会被保存在文件或数据库表里。