一、介绍
ETL是EXTRACT(抽取)、TRANSFORM(转换)、LOAD(加载)的简称,实现数据从多个异构数据源加载到数据库或其他目标地址,是数据仓库建设和维护中的重要一环,也是工作量较大的一块。Kettle是ETL中其中一个开源工具,基于纯Java开发。
kettle有两种脚本transformation(转换)和Job(作业)
Kettle有三个主要组件:Spoon、Kitchen、Pan
- Spoon:是一个图形化的界面,可以让我们用图形化的方式开发转换和作业。
windows选择Spoon.bat;Linux选择Spoon.sh启动。 - Kitchen:利用Kitchen可以使用命令行调用Job
- Pan:利用Pan可以用命令行的形式调用Trans
- Carte:Carte是一个轻量级的Web容器,用于建立专用、远程的ETL Server。
二、kettle国内镜像下载
http://mirror.bit.edu.cn/pentaho/Data Integration/
三、解压下载的压缩包“pdi-ce-7.1.0.0-12.zip”
四、由于Kettle基于纯Java开发,启动前需提前安装好JDK(1.6版本以上)
五、Windows系统,选择“Spoon.bat”启动
六、配置数据库连接
1、点击界面右上角connect。
2、选择other Repositories
3.选择Database Repository,然后选择Get Started
4.填入Display Name(自定义),点击Database Connection时跳转数据库配置页面。
5.填入自己本机数据库配置,点击“测试”按钮确认是否连接成功。
6.如点击测试,弹出如下错误,请不要慌,是缺少了Oracle驱动包了。
报错解决办法:
缺少的Oracle的驱动的jar包的话,可自己去本机安装Oracle目录拷贝一个,最好的办法是
从“app\user\product\11.2.0\dbhome_1\jdbc\lib”下找到“ojdbc6.jar”拷贝至kettle安装目录的lib文件夹下面,
然后关闭再重启kettle测试连接提示成功。
7.选择“finish”
8.点击“Connect now”建立连接。
9.kettle 在创建连接的时候,会默认项数据库中插入默认用户名为admin 密码为admin的帐号
输入后可连接登录成功。
七、新建转换和作业
1、新建转换
需求:从Mysql 的A1库的B1表抽取数据,插入更新到OracleA2库的C模式下的B2表中。
Mysql 表创建SQL
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for student
-- ----------------------------
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(25) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
`sex` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
PRIMARY KEY (`id`) USING BTREE,
INDEX `编号`(`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 6 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
SET FOREIGN_KEY_CHECKS = 1;
Oracle表创建SQL
-- Create table
create table STUDENT
(
id INTEGER not null,
name VARCHAR2(25) not null,
sex CHAR(1)
)
tablespace TBS_SLDT_DCP
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 64K
next 1M
minextents 1
maxextents unlimited
);
-- Create/Recreate primary, unique and foreign key constraints
alter table STUDENT
add primary key (ID)
using index
tablespace TBS_SLDT_DCP
pctfree 10
initrans 2
maxtrans 255
storage
(
initial 64K
next 1M
minextents 1
maxextents unlimited
);
在“核心对象”tab下找到“表输入”,拖拽至右边设计面板中。
双击"表输入"区域,在弹出窗口点击“新建”编辑Mysql数据库连接。
编辑好数据库连接,点击“测试连接”测试数据库是否正常,如报缺少驱动包,则把mysql的驱动包放置kettle安装目录的lib文件夹下面,然后关闭再重启kettle测试连接提示成功。
注意:如果你连接的是mysql8.0以上 的版本,mysql的驱动jar包放到kettle的lib下面还是报驱动找不到的问题时,就要换JNDI连接方式了。
解决办法:编辑“pdi-ce-7.1.0.0-12\data-integration\simple-jndi\jdbc.properties” 添加下面配置。
其中配置“serverTimezone=UTC”也是不能少的,改完要重启kettle。
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
MYSQL8_DB/type=javax.sql.DataSource
MYSQL8_DB/driver=com.mysql.cj.jdbc.Driver
MYSQL8_DB/url=jdbc:mysql://localhost:3306/数据库?useUnicode=true&characterEncoding=utf-8&disableMariaDbDriver&useSSL=FALSE&serverTimezone=UTC
MYSQL8_DB/user=root
MYSQL8_DB/password=密码
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
原因:而且kettle默认使用的是org.gjt.mm.mysql.Driver,而mysql 8.0以上connector已经不再支持这个包名,所以,会出现明明已经将mysql-connector-java-8.0.xx.jar包拷贝到lib目录下,但还是报错说找不到驱动。
详情:https://blog.csdn.net/zougen/article/details/84975410
源表Mysql数据:
目标Oracle表:
2、新建作业
需求:定时从Mysql 的A1库的B1表抽取数据,插入更新到OracleA2库的C模式下的B2表中。