《kettle开发使用手册》由会员分享,可在线阅读,更多相关《kettle开发使用手册(19页珍藏版)》请在金锄头文库上搜索。
1、 Kettle 开发使用手册1Kettle 开开发发使使用用 手手册册Kettle 开发使用手册22 0 1 7 年年 4 月月版版 本本 历历 史史 说说 明明版本版本作者作者日期日期备注备注1.0彭伟峰2017.04.11Kettle 开发使用手册31. Kettle 介绍介绍1.1. 什么是什么是KettleKettle是纯Java编写的、免费开源的ETL工具,主要用于抽取(Extraction)、转换(Transformation)、和装载(Loading)数据。Kettle中文名称叫水壶,该项目的主程序员MATT 希望把各种数据放到一个壶里,然后以一种指定的格式流出。在这种思想的设计
2、下,Kettle广泛用于不同数据库之间的数据抽取,例如Mysql数据库的数据传到Oracle,Oracle数据库的数据传到Greenplum数据库。1.2. Kettle的安装的安装Kettle 工具是不需要安装的,直接网上下载解压就可以运行了。不过它依赖于 Java,需要本地有 JDK 环境,如果是安装 4.2 或 5.4 版本,JDK 需要 1.5以上的版本,推荐 1.6 或 1.7 的 JDK。运行 Kettle 直接双击里面的批处理文件 spoon.bat 就行了,如图 1.1 所示:图 1.1Kettle 开发使用手册42. Kettle 脚本开发脚本开发2.1. 建立资源库建立资源
3、库(repository 仓库)仓库)Repository 仓库是用来存储所有 kettle 文件的文件系统,由于数据交换平台服务器管理 kettle 文件也是用 Repository 仓库,因此我们这边本地的kettle 开发环境也是要用到该资源库。建立资源库的方式是工具 资源库- - 连接资源库,这时候弹出一个窗口,我们点击右上角的“+”号,跟着点击下面的 kettle file repository 选项,按确定,如图 2.1 所示:图 2.1跟着在右上角选择一个目录,建议在 kettle 路径下新建 repository 文件夹,再选择这个文件夹作为根目录,名称和描述可以任意写,如图
4、2.2 所示:图 2.2建完后会 kettle 工具会自动连接到 repository 资源库,每次打开 kettle也会弹出一个窗口让你先连接到资源库。在连接到资源库的情况下打开文件就Kettle 开发使用手册5是资源库所在目录了,如图 2.3 所示。注意你在资源库建的目录结构要跟数据交换平台的目录结构一致,这样写好 kettle 脚本,保存后放的路径能跟交换平台的目录结构一致了。图 2.32.2. 在目标数据库里新建表在目标数据库里新建表在做数据迁移的时候我们需要先在目标数据库建立与源数据库类似的表结 构,才能在这两张表之间做数据迁移,以 oracle 数据库到 gp 数据库, T_SF_
5、DWJFDJXX_TEST 表做数据迁移为例,我们先建类似的表结构,首先先把表 结构的代码拷出来:create table T_SF_DWJFDJXX_TEST(NSRNBM NUMBER(10) not null,DWSBH VARCHAR2(18) not null,JFDWNBM NUMBER(10) not null,HYFL_DM CHAR(1) not null,JFDWLX_DM CHAR(3) not null,SBJC_DM CHAR(2) not null,SBGLJG_DM VARCHAR2(11) not null,SWGLJG_DM VARCHAR2(11) not
6、null,Kettle 开发使用手册6SBDJ_ZT CHAR(2) not null,DJSLRY_DM VARCHAR2(11),DJSL_RQ DATE,LRRY_DM VARCHAR2(11),XGRY_DM VARCHAR2(11),DJ_RQ DATE,DJJG_DM VARCHAR2(11),LR_SJ TIMESTAMP(6),XG_SJ TIMESTAMP(6),ZDFY_BJ CHAR(1),XMMC VARCHAR2(100),KNQYBZ_DM CHAR(1),ZDYCKJN_BJ CHAR(1),SJJHPT_SJ TIMESTAMP(6),SJJHPT_DZ NUM
7、BER(14);跟着在这个表结构的基础上,在目标数据库创建新表。需要注意的是,gp 数据库的数据类型有些跟 oracle 的一样,有些不同。相同的就不用改了,不同 的就改下。以上面的数据类型为例,相同的有 char、date、timestamp,不同 的是 varchar2 和 number,因此,varchar2(n)要改成 varchar(n),number(n) 要改成 integer(注意不带数字长度 n)。建完之后,我们就可以在这不同数据 库的两张表之间进行数据迁移或数据定时传输。2.3. 源数据库和目标数据库的源数据库和目标数据库的 jndi 设置设置Jndi 是 kettle 连
8、接数据库的配置文件,相当于 oracle 的 tns。Jndi 设置 的目录是在 kettle 目录下的 simple-jndi 文件夹里,打开后编辑Kettle 开发使用手册7jdbc.properties 来设置 jndi,下面附上公司揭阳涉税项目 oracle 到 gp 数据 库的 jndi 设置,分别是源端 oracle 数据库和目标端 gp 数据库。配置信息的斜 杠左边是 jndi 名,这里 jndi 的命名规则是数据库名_用户名,注意本地的 jndi 名要跟交换平台的 jndi 名一致。配置信息的斜杠右边分别是数据库类型、驱动、数据库地址、用户名和密 码。注意,相同数据库配置写法相
9、同,不同数据库的配置写法略有不同,像下 面的 oracle 和 gp 数据库的 driver 和 url 地址写法就不一样。oracle_db_mhpt/type=javax.sql.DataSourceoracle_db_mhpt/driver=oracle.jdbc.driver.OracleDriveroracle_db_mhpt/url=jdbc:oracle:thin:172.16.11.91:1521:zrmhdboracle_db_mhpt/user=db_mhptoracle_db_mhpt/password=DB_MHPTgp_public/type=javax.sql.Da
10、taSourcegp_public/driver=org.postgresql.Drivergp_public/url=jdbc:postgresql:/172.16.11.165:5432/postgresgp_public/database=8gp_public/user=gpadmingp_public/password=gpadmin2.4. 写写 kettle 脚本脚本Kettle 脚本有两种,ktr 脚本跟 kjb 脚本,其中 ktr 负责执行,具体要做 什么由 ktr 来负责;kjb 负责调度,调用一个或多个 ktr。Ktr 和 kjb 的关系类 似于像员工和领导之间,员工负责具
11、体的事务操作,领导负责计划安排工作。 新建 ktr 脚本可以点击左上角的文件 新建 转换,新建 kjb 脚本就文 件 新建 作业。我们这里传输数据只要用到 kjb 脚本,一张表的数据 传输要有 1 个脚本。Kettle 开发使用手册8首先先新建一个 ktr 文件,如图 2.4 所示,跟着我们按照主界面的提示拖 动主键来操作。拖动组件在核心对象的组件库里。图 2.4跟着我们需要 4 个组件,分别是获取变量、表输入、字符串操作、插入/更 新,先从组件库里找到这些组件然后拖动到右边面板上,查找组件可以用组件 名称来在组建的搜索框里搜索。拖动后如图 2.5 所示。图 2.5Kettle 开发使用手册9
12、然后给他们组件之间建立连接,用拉箭头来连接即可,如图 2.6 所示:图 2.6组件之间连接完之后,跟着双击组件一个个编辑。第一步是获取变量,在 获取变量前首先要设置入参用来获取变量,设置变量先双击主对象树的 ktr 名 (转换 1 是未保存文件到本地的默认名),跟着设置命名参数。如图 2.7 跟 2.8 所示。其中 start_timestamp 和 end_timestamp 这两个是数据交换平台服 务器上默认的用于增量抽取数据的两个入参,分别表示数据开始时间跟数据结 束时间。这里填上了默认值方便测试。Kettle 开发使用手册10图 2.7 图 2.8设置入参后再编辑获取变量的组件,这里名
13、称跟入参一样,kettle 变量 名的写法是$Variables,类型我们选择 string,因为服务器上交换平台传进 来的 start_timestamp 和 end_timestamp 参数也是 string 类型的,我们这里跟 它一致。也如图 2.9 所示:图 2.9第二步是表输入,首先要先连接数据库,之前我们在本地文件上配置了 jndi,这里 jndi 就用得上。新建或编辑数据库连接,选择好连接的数据库,还 有 jndi 连接方式,再填上 jndi 名称和连接名称,设置完了就点击左下角的测 试来测试本地能不能连上数据库。连上了我们才做其他的步骤。Kettle 开发使用手册11图 2.1
14、0连通好后,写好 sql 语句。这里 sql 语句用到变量,kettle 变量的写法 是$variables,而使用变量要在左右两端再加上单引号,变成 $variables 。注意数据库后台的日期类型是 date,而变量是字符串类型, 因此需要做个变量的类型转换。因为有使用变量,所以需要勾上“替换 sql 语 句里的变量”单选框。设置好后可以预览下数据看下。Kettle 开发使用手册12图 2.11第三步是字段去除左右空格,编辑“字符串操作”,点 get fields 获取 从上个步骤表表输入获取的字段名,然后把 trim type 全部选择 both,意思是 去除字段左右两端的空格。如果 g
15、et fields 得到的字段有 start_timestamp 和 end_timestamp 这两个,这两个多余的,就删去。如下图所示:图 2.12Kettle 开发使用手册13第四步是插入数据到目标端的新表,首先是要先连通目标端的数据库。 设置好后再点击“测试”连通到目标端的数据库。图 2.13跟着是设置目标表(目标模式可以不填),点击浏览选择模式/用户下的数 据库表。然后设置每插入多少条数据提交的提交记录数量,用来查询的关键字 选择主键的字段,而更新字段是全部,点击获取字段即可。他这里操作的原理 是:如果目标表有符合该查询的条件的记录时,那么更新此条数据;不符合时, 那么将源表的此条数
16、据插入到目标表。Kettle 开发使用手册14图 2.14这四个步骤编辑完成后最后就是执行这四个步骤了,点击左上角的运行图 标,设置时间参数或者时间参数按照默认值,运行后,如果全部组件都有绿色 勾勾的标志的话说明全部运行成功,如下图所示。如果某一个步骤失败的话就 是红色勾勾的标志,这时候就要看日志或者步骤度量来分析了。从下面的步骤 度量看表输入有 1 条数据输入进来,插入/更新步骤有 1 条数据写进去了。Kettle 开发使用手册15图 2.15Kettle 开发使用手册163. 在数据交换平台设置定时任务在数据交换平台设置定时任务以公司这边的数据交换平台为例(http:/172.16.11.17:9001/WebContentadmin/admin),