Kettle开发使用手册
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Kettle开发使用手册2017年4月
版本历史说明
1.Kettle介绍
1.1.什么是Kettle
Kettle是纯Java编写的、免费开源的ETL工具,主要用于抽取(Extraction)、转换(Transformation)、和装载(Loading)数据。Kettle中文名称叫水壶,该项目的主程序员MATT 希望把各种数据放到一个壶里,然后以一种指定的格式流出。在这种思想的设计下,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.1
2.Kettle脚本开发
2.1.建立资源库(repository仓库)
Repository仓库是用来存储所有kettle文件的文件系统,由于数据交换平台服务器管理kettle文件也是用Repository仓库,因此我们这边本地的kettle开发环境也是要用到该资源库。建立资源库的方式是工具 --> 资源库- -> 连接资源库,这时候弹出一个窗口,我们点击右上角的“+”号,跟着点击下面的kettle file repository选项,按确定,如图2.1所示:
图2.1
跟着在右上角选择一个目录,建议在kettle路径下新建repository文件夹,再选择这个文件夹作为根目录,名称和描述可以任意写,如图2.2所示:
图2.2
建完后会kettle工具会自动连接到repository资源库,每次打开kettle 也会弹出一个窗口让你先连接到资源库。在连接到资源库的情况下打开文件就是资源库所在目录了,如图2.3所示。注意你在资源库建的目录结构要跟数据交换平台的目录结构一致,这样写好kettle脚本,保存后放的路径能跟交换平台的目录结构一致了。
图2.3
2.2.在目标数据库里新建表
在做数据迁移的时候我们需要先在目标数据库建立与源数据库类似的表结构,才能在这两张表之间做数据迁移,以oracle数据库到gp数据库,T_SF_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 null,
SBDJ_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 NUMBER(14)
);
跟着在这个表结构的基础上,在目标数据库创建新表。需要注意的是,gp数据库的数据类型有些跟oracle的一样,有些不同。相同的就不用改了,不同的就改下。以上面的数据类型为例,相同的有char、date、timestamp,不同的是varchar2和number,因此,varchar2(n)要改成varchar(n),number(n)要改成integer(注意不带数字长度n)。建完之后,我们就可以在这不同数据库的两张表之间进行数据迁移或数据定时传输。
2.3.源数据库和目标数据库的jndi设置
Jndi是kettle连接数据库的配置文件,相当于oracle的tns。Jndi设置的目录是在kettle目录下的simple-jndi文件夹里,打开后编辑jdbc.properties 来设置jndi,下面附上公司揭阳涉税项目oracle 到gp数据库的jndi设置,分别是源端oracle数据库和目标端gp数据库。配置信息的斜杠左边是jndi名,这里jndi的命名规则是数据库名_用户名,注意本地的jndi名要跟交换平台的jndi名一致。
配置信息的斜杠右边分别是数据库类型、驱动、数据库地址、用户名和密码。注意,相同数据库配置写法相同,不同数据库的配置写法略有不同,像下面的oracle和gp数据库的driver和url地址写法就不一样。
oracle_db_mhpt/type=javax.sql.DataSource
oracle_db_mhpt/driver=oracle.jdbc.driver.OracleDriver
oracle_db_mhpt/url=jdbc:oracle:thin:@172.16.11.91:1521:zrmhdb
oracle_db_mhpt/user=db_mhpt
oracle_db_mhpt/password=DB_MHPT
gp_public/type=javax.sql.DataSource
gp_public/driver=org.postgresql.Driver
gp_public/url=jdbc:postgresql://172.16.11.165:5432/postgres
gp_public/database=8
gp_public/user=gpadmin
gp_public/password=gpadmin
2.4.写kettle脚本
Kettle脚本有两种,ktr脚本跟kjb脚本,其中ktr负责执行,具体要做什么由ktr来负责;kjb负责调度,调用一个或多个ktr。Ktr和kjb的关系类似于像员工和领导之间,员工负责具体的事务操作,领导负责计划安排工作。新建ktr脚本可以点击左上角的文件 --> 新建 --> 转换,新建kjb脚本就文件 --> 新建 --> 作业。我们这里传输数据只要用到kjb脚本,一张表的数据传输要有1个脚本。
首先先新建一个ktr文件,如图2.4所示,跟着我们按照主界面的提示拖动主键来操作。拖动组件在核心对象的组件库里。